kbuild: rename built-in.o to built-in.a
authorNicholas Piggin <npiggin@gmail.com>
Sat, 10 Feb 2018 14:25:04 +0000 (00:25 +1000)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Sun, 25 Mar 2018 17:01:19 +0000 (02:01 +0900)
Incremental linking is gone, so rename built-in.o to built-in.a, which
is the usual extension for archive files.

This patch does two things, first is a simple search/replace:

git grep -l 'built-in\.o' | xargs sed -i 's/built-in\.o/built-in\.a/g'

The second is to invert nesting of nested text manipulations to avoid
filtering built-in.a out from libs-y2:

-libs-y2 := $(filter-out %.a, $(patsubst %/, %/built-in.a, $(libs-y)))
+libs-y2 := $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
12 files changed:
Documentation/kbuild/makefiles.txt
Documentation/process/changes.rst
Makefile
arch/blackfin/kernel/bfin_ksyms.c
arch/powerpc/kernel/Makefile
drivers/s390/Makefile
lib/Kconfig.debug
scripts/Makefile.build
scripts/Makefile.lib
scripts/link-vmlinux.sh
scripts/namespace.pl
usr/initramfs_data.S

index 750aea9..667cd89 100644 (file)
@@ -153,18 +153,18 @@ more details, with real examples.
        configuration.
 
        Kbuild compiles all the $(obj-y) files.  It then calls
        configuration.
 
        Kbuild compiles all the $(obj-y) files.  It then calls
-       "$(AR) rcSTP" to merge these files into one built-in.o file.
+       "$(AR) rcSTP" to merge these files into one built-in.a file.
        This is a thin archive without a symbol table, which makes it
        unsuitable as a linker input.
 
        The scripts/link-vmlinux.sh script later makes an aggregate
        This is a thin archive without a symbol table, which makes it
        unsuitable as a linker input.
 
        The scripts/link-vmlinux.sh script later makes an aggregate
-       built-in.o with "${AR} rcsTP", which creates the thin archive
+       built-in.a with "${AR} rcsTP", which creates the thin archive
        with a symbol table and an index, making it a valid input for
        the final vmlinux link passes.
 
        The order of files in $(obj-y) is significant.  Duplicates in
        the lists are allowed: the first instance will be linked into
        with a symbol table and an index, making it a valid input for
        the final vmlinux link passes.
 
        The order of files in $(obj-y) is significant.  Duplicates in
        the lists are allowed: the first instance will be linked into
-       built-in.o and succeeding instances will be ignored.
+       built-in.a and succeeding instances will be ignored.
 
        Link order is significant, because certain functions
        (module_init() / __initcall) will be called during boot in the
 
        Link order is significant, because certain functions
        (module_init() / __initcall) will be called during boot in the
@@ -228,7 +228,7 @@ more details, with real examples.
        Note: Of course, when you are building objects into the kernel,
        the syntax above will also work. So, if you have CONFIG_EXT2_FS=y,
        kbuild will build an ext2.o file for you out of the individual
        Note: Of course, when you are building objects into the kernel,
        the syntax above will also work. So, if you have CONFIG_EXT2_FS=y,
        kbuild will build an ext2.o file for you out of the individual
-       parts and then link this into built-in.o, as you would expect.
+       parts and then link this into built-in.a, as you would expect.
 
 --- 3.4 Objects which export symbols
 
 
 --- 3.4 Objects which export symbols
 
@@ -238,7 +238,7 @@ more details, with real examples.
 --- 3.5 Library file goals - lib-y
 
        Objects listed with obj-* are used for modules, or
 --- 3.5 Library file goals - lib-y
 
        Objects listed with obj-* are used for modules, or
-       combined in a built-in.o for that specific directory.
+       combined in a built-in.a for that specific directory.
        There is also the possibility to list objects that will
        be included in a library, lib.a.
        All objects listed with lib-y are combined in a single
        There is also the possibility to list objects that will
        be included in a library, lib.a.
        All objects listed with lib-y are combined in a single
@@ -250,7 +250,7 @@ more details, with real examples.
 
        Note that the same kbuild makefile may list files to be built-in
        and to be part of a library. Therefore the same directory
 
        Note that the same kbuild makefile may list files to be built-in
        and to be part of a library. Therefore the same directory
-       may contain both a built-in.o and a lib.a file.
+       may contain both a built-in.a and a lib.a file.
 
        Example:
                #arch/x86/lib/Makefile
 
        Example:
                #arch/x86/lib/Makefile
@@ -992,7 +992,7 @@ When kbuild executes, the following steps are followed (roughly):
 
        $(head-y) lists objects to be linked first in vmlinux.
        $(libs-y) lists directories where a lib.a archive can be located.
 
        $(head-y) lists objects to be linked first in vmlinux.
        $(libs-y) lists directories where a lib.a archive can be located.
-       The rest list directories where a built-in.o object file can be
+       The rest list directories where a built-in.a object file can be
        located.
 
        $(init-y) objects will be located after $(head-y).
        located.
 
        $(init-y) objects will be located after $(head-y).
@@ -1077,7 +1077,7 @@ When kbuild executes, the following steps are followed (roughly):
                extra-y := head.o init_task.o
 
        In this example, extra-y is used to list object files that
                extra-y := head.o init_task.o
 
        In this example, extra-y is used to list object files that
-       shall be built, but shall not be linked as part of built-in.o.
+       shall be built, but shall not be linked as part of built-in.a.
 
 
 --- 6.7 Commands useful for building a boot image
 
 
 --- 6.7 Commands useful for building a boot image
index 81cdb52..4f19a97 100644 (file)
@@ -78,7 +78,7 @@ Binutils
 --------
 
 The build system has, as of 4.13, switched to using thin archives (`ar T`)
 --------
 
 The build system has, as of 4.13, switched to using thin archives (`ar T`)
-rather than incremental linking (`ld -r`) for built-in.o intermediate steps.
+rather than incremental linking (`ld -r`) for built-in.a intermediate steps.
 This requires binutils 2.20 or newer.
 
 Flex
 This requires binutils 2.20 or newer.
 
 Flex
index e02d092..3cb5d10 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -35,7 +35,7 @@ unexport GREP_OPTIONS
 # Most importantly: sub-Makefiles should only ever modify files in
 # their own directory. If in some directory we have a dependency on
 # a file in another dir (which doesn't happen often, but it's often
 # Most importantly: sub-Makefiles should only ever modify files in
 # their own directory. If in some directory we have a dependency on
 # a file in another dir (which doesn't happen often, but it's often
-# unavoidable when linking the built-in.o targets which finally
+# unavoidable when linking the built-in.a targets which finally
 # turn into vmlinux), we will call a sub make in that other dir, and
 # after that we are sure that everything which is in that other dir
 # is now up to date.
 # turn into vmlinux), we will call a sub make in that other dir, and
 # after that we are sure that everything which is in that other dir
 # is now up to date.
@@ -982,13 +982,13 @@ vmlinux-dirs      := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
 vmlinux-alldirs        := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
                     $(init-) $(core-) $(drivers-) $(net-) $(libs-) $(virt-))))
 
 vmlinux-alldirs        := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
                     $(init-) $(core-) $(drivers-) $(net-) $(libs-) $(virt-))))
 
-init-y         := $(patsubst %/, %/built-in.o, $(init-y))
-core-y         := $(patsubst %/, %/built-in.o, $(core-y))
-drivers-y      := $(patsubst %/, %/built-in.o, $(drivers-y))
-net-y          := $(patsubst %/, %/built-in.o, $(net-y))
+init-y         := $(patsubst %/, %/built-in.a, $(init-y))
+core-y         := $(patsubst %/, %/built-in.a, $(core-y))
+drivers-y      := $(patsubst %/, %/built-in.a, $(drivers-y))
+net-y          := $(patsubst %/, %/built-in.a, $(net-y))
 libs-y1                := $(patsubst %/, %/lib.a, $(libs-y))
 libs-y1                := $(patsubst %/, %/lib.a, $(libs-y))
-libs-y2                := $(filter-out %.a, $(patsubst %/, %/built-in.o, $(libs-y)))
-virt-y         := $(patsubst %/, %/built-in.o, $(virt-y))
+libs-y2                := $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))
+virt-y         := $(patsubst %/, %/built-in.a, $(virt-y))
 
 # Externally visible symbols (used by link-vmlinux.sh)
 export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)
 
 # Externally visible symbols (used by link-vmlinux.sh)
 export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)
index 68096e8..c0038ee 100644 (file)
@@ -36,7 +36,7 @@ EXPORT_SYMBOL(memchr);
 /*
  * Because string functions are both inline and exported functions and
  * folder arch/blackfin/lib is configured as a library path in Makefile,
 /*
  * Because string functions are both inline and exported functions and
  * folder arch/blackfin/lib is configured as a library path in Makefile,
- * symbols exported in folder lib  is not linked into built-in.o but
+ * symbols exported in folder lib  is not linked into built-in.a but
  * inlined only. In order to export string symbols to kernel module
  * properly, they should be exported here.
  */
  * inlined only. In order to export string symbols to kernel module
  * properly, they should be exported here.
  */
index 1b6bc7f..2358f97 100644 (file)
@@ -165,7 +165,7 @@ systbl_chk: $(src)/systbl_chk.sh $(obj)/systbl_chk.i
        $(call cmd,systbl_chk)
 
 ifeq ($(CONFIG_PPC_OF_BOOT_TRAMPOLINE),y)
        $(call cmd,systbl_chk)
 
 ifeq ($(CONFIG_PPC_OF_BOOT_TRAMPOLINE),y)
-$(obj)/built-in.o:             prom_init_check
+$(obj)/built-in.a:             prom_init_check
 
 quiet_cmd_prom_init_check = CALL    $<
       cmd_prom_init_check = $(CONFIG_SHELL) $< "$(NM)" "$(obj)/prom_init.o"
 
 quiet_cmd_prom_init_check = CALL    $<
       cmd_prom_init_check = $(CONFIG_SHELL) $< "$(NM)" "$(obj)/prom_init.o"
index 2fdab40..a863b04 100644 (file)
@@ -5,5 +5,5 @@
 
 obj-y += cio/ block/ char/ crypto/ net/ scsi/ virtio/
 
 
 obj-y += cio/ block/ char/ crypto/ net/ scsi/ virtio/
 
-drivers-y += drivers/s390/built-in.o
+drivers-y += drivers/s390/built-in.a
 
 
index 64155e3..5be22e4 100644 (file)
@@ -324,11 +324,11 @@ config DEBUG_SECTION_MISMATCH
            the analysis would not catch the illegal reference.
            This option tells gcc to inline less (but it does result in
            a larger kernel).
            the analysis would not catch the illegal reference.
            This option tells gcc to inline less (but it does result in
            a larger kernel).
-         - Run the section mismatch analysis for each module/built-in.o file.
+         - Run the section mismatch analysis for each module/built-in.a file.
            When we run the section mismatch analysis on vmlinux.o, we
            lose valuable information about where the mismatch was
            introduced.
            When we run the section mismatch analysis on vmlinux.o, we
            lose valuable information about where the mismatch was
            introduced.
-           Running the analysis for each module/built-in.o file
+           Running the analysis for each module/built-in.a file
            tells where the mismatch happens much closer to the
            source. The drawback is that the same mismatch is
            reported at least twice.
            tells where the mismatch happens much closer to the
            source. The drawback is that the same mismatch is
            reported at least twice.
index 672cf5b..7cd2f4a 100644 (file)
@@ -77,7 +77,7 @@ obj-y += $(obj)/lib-ksyms.o
 endif
 
 ifneq ($(strip $(obj-y) $(need-builtin)),)
 endif
 
 ifneq ($(strip $(obj-y) $(need-builtin)),)
-builtin-target := $(obj)/built-in.o
+builtin-target := $(obj)/built-in.a
 endif
 
 modorder-target := $(obj)/modules.order
 endif
 
 modorder-target := $(obj)/modules.order
@@ -104,7 +104,7 @@ ifneq ($(KBUILD_ENABLE_EXTRA_GCC_CHECKS),)
   cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $< ;
 endif
 
   cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $< ;
 endif
 
-# Do section mismatch analysis for each module/built-in.o
+# Do section mismatch analysis for each module/built-in.a
 ifdef CONFIG_DEBUG_SECTION_MISMATCH
   cmd_secanalysis = ; scripts/mod/modpost $@
 endif
 ifdef CONFIG_DEBUG_SECTION_MISMATCH
   cmd_secanalysis = ; scripts/mod/modpost $@
 endif
@@ -458,15 +458,15 @@ $(sort $(subdir-obj-y)): $(subdir-ym) ;
 #
 ifdef builtin-target
 
 #
 ifdef builtin-target
 
-# built-in.o archives are made with no symbol table or index which
+# built-in.a archives are made with no symbol table or index which
 # makes them small and fast, but unable to be used by the linker.
 # makes them small and fast, but unable to be used by the linker.
-# scripts/link-vmlinux.sh builds an aggregate built-in.o with a symbol
+# scripts/link-vmlinux.sh builds an aggregate built-in.a with a symbol
 # table and index.
 cmd_make_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
 cmd_make_empty_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
 quiet_cmd_link_o_target = AR      $@
 
 # table and index.
 cmd_make_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
 cmd_make_empty_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
 quiet_cmd_link_o_target = AR      $@
 
-# If the list of objects to link is empty, just create an empty built-in.o
+# If the list of objects to link is empty, just create an empty built-in.a
 cmd_link_o_target = $(if $(strip $(obj-y)),\
                      $(cmd_make_builtin) $@ $(filter $(obj-y), $^) \
                      $(cmd_secanalysis),\
 cmd_link_o_target = $(if $(strip $(obj-y)),\
                      $(cmd_make_builtin) $@ $(filter $(obj-y), $^) \
                      $(cmd_secanalysis),\
index a6f538b..5fd60af 100644 (file)
@@ -27,7 +27,7 @@ modorder      := $(patsubst %/,%/modules.order, $(filter %/, $(obj-y)) $(obj-m:.o=.ko
 
 # Handle objects in subdirs
 # ---------------------------------------------------------------------------
 
 # Handle objects in subdirs
 # ---------------------------------------------------------------------------
-# o if we encounter foo/ in $(obj-y), replace it by foo/built-in.o
+# o if we encounter foo/ in $(obj-y), replace it by foo/built-in.a
 #   and add the directory to the list of dirs to descend into: $(subdir-y)
 # o if we encounter foo/ in $(obj-m), remove it from $(obj-m)
 #   and add the directory to the list of dirs to descend into: $(subdir-m)
 #   and add the directory to the list of dirs to descend into: $(subdir-y)
 # o if we encounter foo/ in $(obj-m), remove it from $(obj-m)
 #   and add the directory to the list of dirs to descend into: $(subdir-m)
@@ -35,7 +35,7 @@ __subdir-y    := $(patsubst %/,%,$(filter %/, $(obj-y)))
 subdir-y       += $(__subdir-y)
 __subdir-m     := $(patsubst %/,%,$(filter %/, $(obj-m)))
 subdir-m       += $(__subdir-m)
 subdir-y       += $(__subdir-y)
 __subdir-m     := $(patsubst %/,%,$(filter %/, $(obj-m)))
 subdir-m       += $(__subdir-m)
-obj-y          := $(patsubst %/, %/built-in.o, $(obj-y))
+obj-y          := $(patsubst %/, %/built-in.a, $(obj-y))
 obj-m          := $(filter-out %/, $(obj-m))
 
 # Subdirectories we need to descend into
 obj-m          := $(filter-out %/, $(obj-m))
 
 # Subdirectories we need to descend into
@@ -54,7 +54,7 @@ multi-objs-m := $(foreach m, $(multi-used-m), $($(m:.o=-objs)) $($(m:.o=-y)))
 
 # $(subdir-obj-y) is the list of objects in $(obj-y) which uses dir/ to
 # tell kbuild to descend
 
 # $(subdir-obj-y) is the list of objects in $(obj-y) which uses dir/ to
 # tell kbuild to descend
-subdir-obj-y := $(filter %/built-in.o, $(obj-y))
+subdir-obj-y := $(filter %/built-in.a, $(obj-y))
 
 # Replace multi-part objects by their individual parts, look at local dir only
 real-objs-y := $(foreach m, $(filter-out $(subdir-obj-y), $(obj-y)), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m)))
 
 # Replace multi-part objects by their individual parts, look at local dir only
 real-objs-y := $(foreach m, $(filter-out $(subdir-obj-y), $(obj-y)), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m)))
index 601ca8b..08ca08e 100755 (executable)
@@ -4,7 +4,7 @@
 # link vmlinux
 #
 # vmlinux is linked from the objects selected by $(KBUILD_VMLINUX_INIT) and
 # link vmlinux
 #
 # vmlinux is linked from the objects selected by $(KBUILD_VMLINUX_INIT) and
-# $(KBUILD_VMLINUX_MAIN) and $(KBUILD_VMLINUX_LIBS). Most are built-in.o files
+# $(KBUILD_VMLINUX_MAIN) and $(KBUILD_VMLINUX_LIBS). Most are built-in.a files
 # from top-level directories in the kernel tree, others are specified in
 # arch/$(ARCH)/Makefile. Ordering when linking is important, and
 # $(KBUILD_VMLINUX_INIT) must be first. $(KBUILD_VMLINUX_LIBS) are archives
 # from top-level directories in the kernel tree, others are specified in
 # arch/$(ARCH)/Makefile. Ordering when linking is important, and
 # $(KBUILD_VMLINUX_INIT) must be first. $(KBUILD_VMLINUX_LIBS) are archives
@@ -18,7 +18,7 @@
 #   |   +--< init/version.o + more
 #   |
 #   +--< $(KBUILD_VMLINUX_MAIN)
 #   |   +--< init/version.o + more
 #   |
 #   +--< $(KBUILD_VMLINUX_MAIN)
-#   |    +--< drivers/built-in.o mm/built-in.o + more
+#   |    +--< drivers/built-in.a mm/built-in.a + more
 #   |
 #   +--< $(KBUILD_VMLINUX_LIBS)
 #   |    +--< lib/lib.a + more
 #   |
 #   +--< $(KBUILD_VMLINUX_LIBS)
 #   |    +--< lib/lib.a + more
@@ -51,13 +51,13 @@ info()
 #
 # Traditional incremental style of link does not require this step
 #
 #
 # Traditional incremental style of link does not require this step
 #
-# built-in.o output file
+# built-in.a output file
 #
 archive_builtin()
 {
 #
 archive_builtin()
 {
-       info AR built-in.o
-       rm -f built-in.o;
-       ${AR} rcsTP${KBUILD_ARFLAGS} built-in.o                 \
+       info AR built-in.a
+       rm -f built-in.a;
+       ${AR} rcsTP${KBUILD_ARFLAGS} built-in.a                 \
                                ${KBUILD_VMLINUX_INIT}          \
                                ${KBUILD_VMLINUX_MAIN}
 }
                                ${KBUILD_VMLINUX_INIT}          \
                                ${KBUILD_VMLINUX_MAIN}
 }
@@ -69,7 +69,7 @@ modpost_link()
        local objects
 
        objects="--whole-archive                                \
        local objects
 
        objects="--whole-archive                                \
-               built-in.o                                      \
+               built-in.a                                      \
                --no-whole-archive                              \
                --start-group                                   \
                ${KBUILD_VMLINUX_LIBS}                          \
                --no-whole-archive                              \
                --start-group                                   \
                ${KBUILD_VMLINUX_LIBS}                          \
@@ -88,7 +88,7 @@ vmlinux_link()
 
        if [ "${SRCARCH}" != "um" ]; then
                objects="--whole-archive                        \
 
        if [ "${SRCARCH}" != "um" ]; then
                objects="--whole-archive                        \
-                       built-in.o                              \
+                       built-in.a                              \
                        --no-whole-archive                      \
                        --start-group                           \
                        ${KBUILD_VMLINUX_LIBS}                  \
                        --no-whole-archive                      \
                        --start-group                           \
                        ${KBUILD_VMLINUX_LIBS}                  \
@@ -99,7 +99,7 @@ vmlinux_link()
                        -T ${lds} ${objects}
        else
                objects="-Wl,--whole-archive                    \
                        -T ${lds} ${objects}
        else
                objects="-Wl,--whole-archive                    \
-                       built-in.o                              \
+                       built-in.a                              \
                        -Wl,--no-whole-archive                  \
                        -Wl,--start-group                       \
                        ${KBUILD_VMLINUX_LIBS}                  \
                        -Wl,--no-whole-archive                  \
                        -Wl,--start-group                       \
                        ${KBUILD_VMLINUX_LIBS}                  \
@@ -164,7 +164,7 @@ cleanup()
        rm -f .tmp_System.map
        rm -f .tmp_kallsyms*
        rm -f .tmp_vmlinux*
        rm -f .tmp_System.map
        rm -f .tmp_kallsyms*
        rm -f .tmp_vmlinux*
-       rm -f built-in.o
+       rm -f built-in.a
        rm -f System.map
        rm -f vmlinux
        rm -f vmlinux.o
        rm -f System.map
        rm -f vmlinux
        rm -f vmlinux.o
index 729c547..6135574 100755 (executable)
@@ -164,7 +164,7 @@ sub linux_objects
        s:^\./::;
        if (/.*\.o$/ &&
                ! (
        s:^\./::;
        if (/.*\.o$/ &&
                ! (
-               m:/built-in.o$:
+               m:/built-in.a$:
                || m:arch/x86/vdso/:
                || m:arch/x86/boot/:
                || m:arch/ia64/ia32/ia32.o$:
                || m:arch/x86/vdso/:
                || m:arch/x86/boot/:
                || m:arch/ia64/ia32/ia32.o$:
index 10d325e..b28da79 100644 (file)
@@ -10,7 +10,7 @@
 
   ld -m elf_i386  --format binary --oformat elf32-i386 -r \
   -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o
 
   ld -m elf_i386  --format binary --oformat elf32-i386 -r \
   -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o
-   ld -m elf_i386  -r -o built-in.o initramfs_data.o
+   ld -m elf_i386  -r -o built-in.a initramfs_data.o
 
   For including the .init.ramfs sections, see include/asm-generic/vmlinux.lds.
 
 
   For including the .init.ramfs sections, see include/asm-generic/vmlinux.lds.