Message ID | 20180210142504.29890-3-npiggin@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
2018-02-10 23:25 GMT+09:00 Nicholas Piggin <npiggin@gmail.com>: > 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> I think this is the right thing to do, but I have no idea why 'less kernel/built-in.a' shows strange output. Do you have a clue? Without this patch, 'emacs kernel/built-in.o' 'cat kernel/built-in.o' 'less kernel/built-in.o' showed me the same content. $ less kernel/built-in.o | head -n 10 !<thin> // 2964 ` fork.o/ exec_domain.o/ panic.o/ cpu.o/ exit.o/ softirq.o/ resource.o/ sysctl.o/ After applying this patch, 'less kernel/built-in.a' is strange. $ less kernel/built-in.a | head -n 10 rw-r--r-- 0/0 60216 Jan 1 09:00 1970 kernel/fork.o rw-r--r-- 0/0 3648 Jan 1 09:00 1970 kernel/exec_domain.o rw-r--r-- 0/0 20552 Jan 1 09:00 1970 kernel/panic.o rw-r--r-- 0/0 87752 Jan 1 09:00 1970 kernel/cpu.o rw-r--r-- 0/0 34136 Jan 1 09:00 1970 kernel/exit.o rw-r--r-- 0/0 41448 Jan 1 09:00 1970 kernel/softirq.o rw-r--r-- 0/0 40904 Jan 1 09:00 1970 kernel/resource.o rw-r--r-- 0/0 60968 Jan 1 09:00 1970 kernel/sysctl.o rw-r--r-- 0/0 4472 Jan 1 09:00 1970 kernel/sysctl_binary.o rw-r--r-- 0/0 12472 Jan 1 09:00 1970 kernel/capability.o However, 'cat kernel/built-in.a' works as I expect. $ cat kernel/built-in.a | head -n 10 !<thin> // 2964 ` fork.o/ exec_domain.o/ panic.o/ cpu.o/ exit.o/ softirq.o/ resource.o/ sysctl.o/ Is my 'less' insane? Or, is this intentional behavior of 'less'?
On Sun, 11 Feb 2018 13:38:04 +0900 Masahiro Yamada <yamada.masahiro@socionext.com> wrote: > 2018-02-10 23:25 GMT+09:00 Nicholas Piggin <npiggin@gmail.com>: > > 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> > > > I think this is the right thing to do, but I have no idea > why 'less kernel/built-in.a' shows strange output. > Do you have a clue? > > > Without this patch, > 'emacs kernel/built-in.o' > 'cat kernel/built-in.o' > 'less kernel/built-in.o' > > showed me the same content. > > $ less kernel/built-in.o | head -n 10 > !<thin> > // 2964 ` > fork.o/ > exec_domain.o/ > panic.o/ > cpu.o/ > exit.o/ > softirq.o/ > resource.o/ > sysctl.o/ > > > > > After applying this patch, > 'less kernel/built-in.a' is strange. > > > $ less kernel/built-in.a | head -n 10 > rw-r--r-- 0/0 60216 Jan 1 09:00 1970 kernel/fork.o > rw-r--r-- 0/0 3648 Jan 1 09:00 1970 kernel/exec_domain.o > rw-r--r-- 0/0 20552 Jan 1 09:00 1970 kernel/panic.o > rw-r--r-- 0/0 87752 Jan 1 09:00 1970 kernel/cpu.o > rw-r--r-- 0/0 34136 Jan 1 09:00 1970 kernel/exit.o > rw-r--r-- 0/0 41448 Jan 1 09:00 1970 kernel/softirq.o > rw-r--r-- 0/0 40904 Jan 1 09:00 1970 kernel/resource.o > rw-r--r-- 0/0 60968 Jan 1 09:00 1970 kernel/sysctl.o > rw-r--r-- 0/0 4472 Jan 1 09:00 1970 kernel/sysctl_binary.o > rw-r--r-- 0/0 12472 Jan 1 09:00 1970 kernel/capability.o > > > However, 'cat kernel/built-in.a' works as I expect. > > $ cat kernel/built-in.a | head -n 10 > !<thin> > // 2964 ` > fork.o/ > exec_domain.o/ > panic.o/ > cpu.o/ > exit.o/ > softirq.o/ > resource.o/ > sysctl.o/ > > > > Is my 'less' insane? > Or, is this intentional behavior of 'less'? Interesting, my less does not do that. Instead of the raw contents of the file, yours is providing output of `ar tv`, which is reconstructing more of the archive metadata. I guess it is keyed on the filename extension. Do you have an alias for it, or maybe the distro patches the tool? It seems a bit rude for your less tool to reformat data for you. Thanks, Nick -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
2018-02-11 20:15 GMT+09:00 Nicholas Piggin <npiggin@gmail.com>: > On Sun, 11 Feb 2018 13:38:04 +0900 > Masahiro Yamada <yamada.masahiro@socionext.com> wrote: > >> 2018-02-10 23:25 GMT+09:00 Nicholas Piggin <npiggin@gmail.com>: >> > 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> >> >> >> I think this is the right thing to do, but I have no idea >> why 'less kernel/built-in.a' shows strange output. >> Do you have a clue? >> >> >> Without this patch, >> 'emacs kernel/built-in.o' >> 'cat kernel/built-in.o' >> 'less kernel/built-in.o' >> >> showed me the same content. >> >> $ less kernel/built-in.o | head -n 10 >> !<thin> >> // 2964 ` >> fork.o/ >> exec_domain.o/ >> panic.o/ >> cpu.o/ >> exit.o/ >> softirq.o/ >> resource.o/ >> sysctl.o/ >> >> >> >> >> After applying this patch, >> 'less kernel/built-in.a' is strange. >> >> >> $ less kernel/built-in.a | head -n 10 >> rw-r--r-- 0/0 60216 Jan 1 09:00 1970 kernel/fork.o >> rw-r--r-- 0/0 3648 Jan 1 09:00 1970 kernel/exec_domain.o >> rw-r--r-- 0/0 20552 Jan 1 09:00 1970 kernel/panic.o >> rw-r--r-- 0/0 87752 Jan 1 09:00 1970 kernel/cpu.o >> rw-r--r-- 0/0 34136 Jan 1 09:00 1970 kernel/exit.o >> rw-r--r-- 0/0 41448 Jan 1 09:00 1970 kernel/softirq.o >> rw-r--r-- 0/0 40904 Jan 1 09:00 1970 kernel/resource.o >> rw-r--r-- 0/0 60968 Jan 1 09:00 1970 kernel/sysctl.o >> rw-r--r-- 0/0 4472 Jan 1 09:00 1970 kernel/sysctl_binary.o >> rw-r--r-- 0/0 12472 Jan 1 09:00 1970 kernel/capability.o >> >> >> However, 'cat kernel/built-in.a' works as I expect. >> >> $ cat kernel/built-in.a | head -n 10 >> !<thin> >> // 2964 ` >> fork.o/ >> exec_domain.o/ >> panic.o/ >> cpu.o/ >> exit.o/ >> softirq.o/ >> resource.o/ >> sysctl.o/ >> >> >> >> Is my 'less' insane? >> Or, is this intentional behavior of 'less'? > > Interesting, my less does not do that. Instead of the raw contents > of the file, yours is providing output of `ar tv`, which is > reconstructing more of the archive metadata. I guess it is keyed > on the filename extension. Ah, I see. 'ar tv' and 'less' gave me the same output. > Do you have an alias for it, or maybe the distro patches the tool? I use Ubuntu 16.04 LTS. Not alias'ed $ type less less is hashed (/usr/bin/less) $ /usr/bin/less kernel/built-in.a | head -n 10 rw-r--r-- 0/0 60216 Jan 1 09:00 1970 kernel/fork.o rw-r--r-- 0/0 3648 Jan 1 09:00 1970 kernel/exec_domain.o rw-r--r-- 0/0 20552 Jan 1 09:00 1970 kernel/panic.o rw-r--r-- 0/0 87752 Jan 1 09:00 1970 kernel/cpu.o rw-r--r-- 0/0 34136 Jan 1 09:00 1970 kernel/exit.o rw-r--r-- 0/0 41448 Jan 1 09:00 1970 kernel/softirq.o rw-r--r-- 0/0 40904 Jan 1 09:00 1970 kernel/resource.o rw-r--r-- 0/0 60968 Jan 1 09:00 1970 kernel/sysctl.o rw-r--r-- 0/0 4472 Jan 1 09:00 1970 kernel/sysctl_binary.o rw-r--r-- 0/0 12472 Jan 1 09:00 1970 kernel/capability.o Could be patched by the disto. > It seems a bit rude for your less tool to reformat data for you. > > Thanks, > Nick > -- > To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 12 Feb 2018, Masahiro Yamada wrote: > 2018-02-11 20:15 GMT+09:00 Nicholas Piggin <npiggin@gmail.com>: > > On Sun, 11 Feb 2018 13:38:04 +0900 > > Masahiro Yamada <yamada.masahiro@socionext.com> wrote: > > > >> Is my 'less' insane? > >> Or, is this intentional behavior of 'less'? > > > > Interesting, my less does not do that. Instead of the raw contents > > of the file, yours is providing output of `ar tv`, which is > > reconstructing more of the archive metadata. I guess it is keyed > > on the filename extension. > > Ah, I see. 'ar tv' and 'less' gave me the same output. > > > > Do you have an alias for it, or maybe the distro patches the tool? > > I use Ubuntu 16.04 LTS. > > Not alias'ed > > $ type less > less is hashed (/usr/bin/less) > $ /usr/bin/less kernel/built-in.a | head -n 10 > rw-r--r-- 0/0 60216 Jan 1 09:00 1970 kernel/fork.o > rw-r--r-- 0/0 3648 Jan 1 09:00 1970 kernel/exec_domain.o > rw-r--r-- 0/0 20552 Jan 1 09:00 1970 kernel/panic.o > rw-r--r-- 0/0 87752 Jan 1 09:00 1970 kernel/cpu.o > rw-r--r-- 0/0 34136 Jan 1 09:00 1970 kernel/exit.o > rw-r--r-- 0/0 41448 Jan 1 09:00 1970 kernel/softirq.o > rw-r--r-- 0/0 40904 Jan 1 09:00 1970 kernel/resource.o > rw-r--r-- 0/0 60968 Jan 1 09:00 1970 kernel/sysctl.o > rw-r--r-- 0/0 4472 Jan 1 09:00 1970 kernel/sysctl_binary.o > rw-r--r-- 0/0 12472 Jan 1 09:00 1970 kernel/capability.o > > Could be patched by the disto. What do you get from: $ echo $LESSOPEN ? Nicolas -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
2018-02-12 10:26 GMT+09:00 Nicolas Pitre <nico@fluxnic.net>: > On Mon, 12 Feb 2018, Masahiro Yamada wrote: > >> 2018-02-11 20:15 GMT+09:00 Nicholas Piggin <npiggin@gmail.com>: >> > On Sun, 11 Feb 2018 13:38:04 +0900 >> > Masahiro Yamada <yamada.masahiro@socionext.com> wrote: >> > >> >> Is my 'less' insane? >> >> Or, is this intentional behavior of 'less'? >> > >> > Interesting, my less does not do that. Instead of the raw contents >> > of the file, yours is providing output of `ar tv`, which is >> > reconstructing more of the archive metadata. I guess it is keyed >> > on the filename extension. >> >> Ah, I see. 'ar tv' and 'less' gave me the same output. >> >> >> > Do you have an alias for it, or maybe the distro patches the tool? >> >> I use Ubuntu 16.04 LTS. >> >> Not alias'ed >> >> $ type less >> less is hashed (/usr/bin/less) >> $ /usr/bin/less kernel/built-in.a | head -n 10 >> rw-r--r-- 0/0 60216 Jan 1 09:00 1970 kernel/fork.o >> rw-r--r-- 0/0 3648 Jan 1 09:00 1970 kernel/exec_domain.o >> rw-r--r-- 0/0 20552 Jan 1 09:00 1970 kernel/panic.o >> rw-r--r-- 0/0 87752 Jan 1 09:00 1970 kernel/cpu.o >> rw-r--r-- 0/0 34136 Jan 1 09:00 1970 kernel/exit.o >> rw-r--r-- 0/0 41448 Jan 1 09:00 1970 kernel/softirq.o >> rw-r--r-- 0/0 40904 Jan 1 09:00 1970 kernel/resource.o >> rw-r--r-- 0/0 60968 Jan 1 09:00 1970 kernel/sysctl.o >> rw-r--r-- 0/0 4472 Jan 1 09:00 1970 kernel/sysctl_binary.o >> rw-r--r-- 0/0 12472 Jan 1 09:00 1970 kernel/capability.o >> >> Could be patched by the disto. > > What do you get from: > > $ echo $LESSOPEN > > ? > You are right. If I reset LESSOPEN, I got what I expect. $ echo $LESSOPEN | /usr/bin/lesspipe %s $ LESSOPEN= less kernel/built-in.a | head -n 10 !<thin> // 2964 ` fork.o/ exec_domain.o/ panic.o/ cpu.o/ exit.o/ softirq.o/ resource.o/ sysctl.o/
2018-02-12 12:00 GMT+09:00 Masahiro Yamada <yamada.masahiro@socionext.com>: > 2018-02-12 10:26 GMT+09:00 Nicolas Pitre <nico@fluxnic.net>: >> On Mon, 12 Feb 2018, Masahiro Yamada wrote: >> >>> 2018-02-11 20:15 GMT+09:00 Nicholas Piggin <npiggin@gmail.com>: >>> > On Sun, 11 Feb 2018 13:38:04 +0900 >>> > Masahiro Yamada <yamada.masahiro@socionext.com> wrote: >>> > >>> >> Is my 'less' insane? >>> >> Or, is this intentional behavior of 'less'? >>> > >>> > Interesting, my less does not do that. Instead of the raw contents >>> > of the file, yours is providing output of `ar tv`, which is >>> > reconstructing more of the archive metadata. I guess it is keyed >>> > on the filename extension. >>> >>> Ah, I see. 'ar tv' and 'less' gave me the same output. >>> >>> >>> > Do you have an alias for it, or maybe the distro patches the tool? >>> >>> I use Ubuntu 16.04 LTS. >>> >>> Not alias'ed >>> >>> $ type less >>> less is hashed (/usr/bin/less) >>> $ /usr/bin/less kernel/built-in.a | head -n 10 >>> rw-r--r-- 0/0 60216 Jan 1 09:00 1970 kernel/fork.o >>> rw-r--r-- 0/0 3648 Jan 1 09:00 1970 kernel/exec_domain.o >>> rw-r--r-- 0/0 20552 Jan 1 09:00 1970 kernel/panic.o >>> rw-r--r-- 0/0 87752 Jan 1 09:00 1970 kernel/cpu.o >>> rw-r--r-- 0/0 34136 Jan 1 09:00 1970 kernel/exit.o >>> rw-r--r-- 0/0 41448 Jan 1 09:00 1970 kernel/softirq.o >>> rw-r--r-- 0/0 40904 Jan 1 09:00 1970 kernel/resource.o >>> rw-r--r-- 0/0 60968 Jan 1 09:00 1970 kernel/sysctl.o >>> rw-r--r-- 0/0 4472 Jan 1 09:00 1970 kernel/sysctl_binary.o >>> rw-r--r-- 0/0 12472 Jan 1 09:00 1970 kernel/capability.o >>> >>> Could be patched by the disto. >> >> What do you get from: >> >> $ echo $LESSOPEN >> >> ? >> > > > You are right. > If I reset LESSOPEN, I got what I expect. > > > $ echo $LESSOPEN > | /usr/bin/lesspipe %s > $ LESSOPEN= less kernel/built-in.a | head -n 10 > !<thin> > // 2964 ` > fork.o/ > exec_domain.o/ > panic.o/ > cpu.o/ > exit.o/ > softirq.o/ > resource.o/ > sysctl.o/ > > If I open /usr/bin/lesspipe, probably this line # Decode file for less case `echo "$1" | tr '[:upper:]' '[:lower:]'` in *.a) if [ -x "`which ar`" ]; then ar tv "$1" else echo "No ar available"; fi ;;
Hi Nicholas. On Sun, Feb 11, 2018 at 12:25:04AM +1000, Nicholas Piggin wrote: > 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> Renaming is welcome - .o files should not list files. Acked-by: Sam Ravnborg <sam@ravnborg.org> Did you check that make clean / make mrproper continue to do the right thing? I recalled we had "*.o" hardcoded somewhere but grep did not reveal any places that should matter. So likely it does. Sam -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sun, 18 Feb 2018 18:10:05 +0100 Sam Ravnborg <sam@ravnborg.org> wrote: > Hi Nicholas. > > On Sun, Feb 11, 2018 at 12:25:04AM +1000, Nicholas Piggin wrote: > > 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> > > Renaming is welcome - .o files should not list files. > Acked-by: Sam Ravnborg <sam@ravnborg.org> > > Did you check that make clean / make mrproper continue to > do the right thing? > > I recalled we had "*.o" hardcoded somewhere but grep > did not reveal any places that should matter. > So likely it does. Yes it seemed to just work. I guess .a files are already removed in subdirectories. built-in.o was hard coded in the final link cleanup, but the rename catches that. Thanks, Nick -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 750aea9edd35..667cd899ada8 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -153,18 +153,18 @@ more details, with real examples. 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 - 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 - 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 @@ -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 - 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 @@ -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 - 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 @@ -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 - 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 @@ -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. - 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). @@ -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 - 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 diff --git a/Documentation/process/changes.rst b/Documentation/process/changes.rst index 81cdb528ad46..4f19a9725f76 100644 --- a/Documentation/process/changes.rst +++ b/Documentation/process/changes.rst @@ -78,7 +78,7 @@ Binutils -------- 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 diff --git a/Makefile b/Makefile index cd9145c0878d..174ec0addf92 100644 --- 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 -# 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. @@ -979,13 +979,13 @@ vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \ 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-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) diff --git a/arch/blackfin/kernel/bfin_ksyms.c b/arch/blackfin/kernel/bfin_ksyms.c index 68096e8f787f..c0038eeb9e29 100644 --- a/arch/blackfin/kernel/bfin_ksyms.c +++ b/arch/blackfin/kernel/bfin_ksyms.c @@ -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, - * 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. */ diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 1b6bc7fba996..2358f97d62ec 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -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) -$(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" diff --git a/drivers/s390/Makefile b/drivers/s390/Makefile index 2fdab400c1fe..a863b0462b43 100644 --- a/drivers/s390/Makefile +++ b/drivers/s390/Makefile @@ -5,5 +5,5 @@ obj-y += cio/ block/ char/ crypto/ net/ scsi/ virtio/ -drivers-y += drivers/s390/built-in.o +drivers-y += drivers/s390/built-in.a diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 6088408ef26c..7c66b7152578 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -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). - - 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. - 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. diff --git a/scripts/Makefile.build b/scripts/Makefile.build index c43df53c7cce..03c2c2964d22 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -77,7 +77,7 @@ obj-y += $(obj)/lib-ksyms.o 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 @@ -104,7 +104,7 @@ ifneq ($(KBUILD_ENABLE_EXTRA_GCC_CHECKS),) 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 @@ -450,15 +450,15 @@ $(sort $(subdir-obj-y)): $(subdir-ym) ; # 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. -# 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 $@ -# 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),\ diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 5589bae34af6..3b151bb390cb 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -27,7 +27,7 @@ modorder := $(patsubst %/,%/modules.order, $(filter %/, $(obj-y)) $(obj-m:.o=.ko # 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) @@ -35,7 +35,7 @@ __subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y))) 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 @@ -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 := $(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))) diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index a55c24a86133..bf9a24e51b9b 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -4,7 +4,7 @@ # 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 @@ -18,7 +18,7 @@ # | +--< 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 @@ -51,13 +51,13 @@ info() # # Traditional incremental style of link does not require this step # -# built-in.o output file +# built-in.a output file # 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} } @@ -69,7 +69,7 @@ modpost_link() local objects objects="--whole-archive \ - built-in.o \ + built-in.a \ --no-whole-archive \ --start-group \ ${KBUILD_VMLINUX_LIBS} \ @@ -88,7 +88,7 @@ vmlinux_link() if [ "${SRCARCH}" != "um" ]; then objects="--whole-archive \ - built-in.o \ + built-in.a \ --no-whole-archive \ --start-group \ ${KBUILD_VMLINUX_LIBS} \ @@ -99,7 +99,7 @@ vmlinux_link() -T ${lds} ${objects} else objects="-Wl,--whole-archive \ - built-in.o \ + built-in.a \ -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 built-in.o + rm -f built-in.a rm -f System.map rm -f vmlinux rm -f vmlinux.o diff --git a/scripts/namespace.pl b/scripts/namespace.pl index 729c547fc9e1..6135574a6f39 100755 --- a/scripts/namespace.pl +++ b/scripts/namespace.pl @@ -164,7 +164,7 @@ sub linux_objects 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$: diff --git a/usr/initramfs_data.S b/usr/initramfs_data.S index 10d325e24566..b28da799f6a6 100644 --- a/usr/initramfs_data.S +++ b/usr/initramfs_data.S @@ -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 -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.
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> --- Documentation/kbuild/makefiles.txt | 16 ++++++++-------- Documentation/process/changes.rst | 2 +- Makefile | 14 +++++++------- arch/blackfin/kernel/bfin_ksyms.c | 2 +- arch/powerpc/kernel/Makefile | 2 +- drivers/s390/Makefile | 2 +- lib/Kconfig.debug | 4 ++-- scripts/Makefile.build | 10 +++++----- scripts/Makefile.lib | 6 +++--- scripts/link-vmlinux.sh | 20 ++++++++++---------- scripts/namespace.pl | 2 +- usr/initramfs_data.S | 2 +- 12 files changed, 41 insertions(+), 41 deletions(-)