diff mbox

[2/2] kbuild: rename built-in.o to built-in.a

Message ID 20180210142504.29890-3-npiggin@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Nicholas Piggin Feb. 10, 2018, 2:25 p.m. UTC
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(-)

Comments

Masahiro Yamada Feb. 11, 2018, 4:38 a.m. UTC | #1
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'?
Nicholas Piggin Feb. 11, 2018, 11:15 a.m. UTC | #2
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
Masahiro Yamada Feb. 12, 2018, 12:57 a.m. UTC | #3
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
Nicolas Pitre Feb. 12, 2018, 1:26 a.m. UTC | #4
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
Masahiro Yamada Feb. 12, 2018, 3 a.m. UTC | #5
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/
Masahiro Yamada Feb. 12, 2018, 3:08 a.m. UTC | #6
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 ;;
Sam Ravnborg Feb. 18, 2018, 5:10 p.m. UTC | #7
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
Nicholas Piggin Feb. 19, 2018, 7:04 a.m. UTC | #8
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 mbox

Patch

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.