From: Masahiro Yamada <yamada.masahiro@socionext.com>
To: Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>,
Nicholas Piggin <npiggin@gmail.com>,
"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Jonathan Corbet <corbet@lwn.net>,
Michal Marek <michal.lkml@markovi.net>
Subject: Re: [PATCH v3 1/2] kbuild: remove top-level built-in.a
Date: Thu, 24 Jan 2019 13:27:17 +0900 [thread overview]
Message-ID: <CAK7LNAS=4nfM0eFBt8_JbtWhtOcDthpmxkLNZkMBut9djnDWpg@mail.gmail.com> (raw)
In-Reply-To: <1547683804-17956-1-git-send-email-yamada.masahiro@socionext.com>
On Thu, Jan 17, 2019 at 10:23 AM Masahiro Yamada
<yamada.masahiro@socionext.com> wrote:
>
> The symbol table in the final archive is unneeded; the linker does not
> require the symbol table after the --whole-archive option. Every object
> file in the archive is included in the link anyway.
>
> Pass thin archives from subdirectories directly to the linker, and
> remove the final archiving step.
>
> Fix up the document and comments as well.
>
> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> Acked-by: Nicholas Piggin <npiggin@gmail.com>
> ---
Applied to linux-kbuild.
> Changes in v3: None
> Changes in v2:
> - Update the document and comments
> - Add Nicholas' Ack
>
> Documentation/kbuild/makefiles.txt | 9 ++-------
> scripts/Makefile.build | 8 ++------
> scripts/link-vmlinux.sh | 30 ++++++------------------------
> 3 files changed, 10 insertions(+), 37 deletions(-)
>
> diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
> index bf28c47..48eab0b 100644
> --- a/Documentation/kbuild/makefiles.txt
> +++ b/Documentation/kbuild/makefiles.txt
> @@ -154,13 +154,8 @@ more details, with real examples.
>
> Kbuild compiles all the $(obj-y) files. It then calls
> "$(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.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.
> + This is a thin archive without a symbol table. It will be later
> + linked into vmlinux by scripts/link-vmlinux.sh
>
> The order of files in $(obj-y) is significant. Duplicates in
> the lists are allowed: the first instance will be linked into
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index fd03d60..681ab58 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -394,14 +394,10 @@ $(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler
> $(sort $(subdir-obj-y)): $(subdir-ym) ;
>
> #
> -# Rule to compile a set of .o files into one .o file
> +# Rule to compile a set of .o files into one .a file (without symbol table)
> #
> ifdef builtin-target
>
> -# 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.a with a symbol
> -# table and index.
> quiet_cmd_ar_builtin = AR $@
> cmd_ar_builtin = rm -f $@; \
> $(AR) rcSTP$(KBUILD_ARFLAGS) $@ $(filter $(real-obj-y), $^)
> @@ -426,7 +422,7 @@ $(modorder-target): $(subdir-ym) FORCE
> $(Q)(cat /dev/null; $(modorder-cmds)) > $@
>
> #
> -# Rule to compile a set of .o files into one .a file
> +# Rule to compile a set of .o files into one .a file (with symbol table)
> #
> ifdef lib-target
> quiet_cmd_link_l_target = AR $@
> diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
> index c8cf453..4788def 100755
> --- a/scripts/link-vmlinux.sh
> +++ b/scripts/link-vmlinux.sh
> @@ -44,24 +44,6 @@ info()
> fi
> }
>
> -# Thin archive build here makes a final archive with symbol table and indexes
> -# from vmlinux objects INIT and MAIN, which can be used as input to linker.
> -# KBUILD_VMLINUX_LIBS archives should already have symbol table and indexes
> -# added.
> -#
> -# Traditional incremental style of link does not require this step
> -#
> -# built-in.a output file
> -#
> -archive_builtin()
> -{
> - info AR built-in.a
> - rm -f built-in.a;
> - ${AR} rcsTP${KBUILD_ARFLAGS} built-in.a \
> - ${KBUILD_VMLINUX_INIT} \
> - ${KBUILD_VMLINUX_MAIN}
> -}
> -
> # Link of vmlinux.o used for section mismatch analysis
> # ${1} output file
> modpost_link()
> @@ -69,7 +51,8 @@ modpost_link()
> local objects
>
> objects="--whole-archive \
> - built-in.a \
> + ${KBUILD_VMLINUX_INIT} \
> + ${KBUILD_VMLINUX_MAIN} \
> --no-whole-archive \
> --start-group \
> ${KBUILD_VMLINUX_LIBS} \
> @@ -88,7 +71,8 @@ vmlinux_link()
>
> if [ "${SRCARCH}" != "um" ]; then
> objects="--whole-archive \
> - built-in.a \
> + ${KBUILD_VMLINUX_INIT} \
> + ${KBUILD_VMLINUX_MAIN} \
> --no-whole-archive \
> --start-group \
> ${KBUILD_VMLINUX_LIBS} \
> @@ -99,7 +83,8 @@ vmlinux_link()
> -T ${lds} ${objects}
> else
> objects="-Wl,--whole-archive \
> - built-in.a \
> + ${KBUILD_VMLINUX_INIT} \
> + ${KBUILD_VMLINUX_MAIN} \
> -Wl,--no-whole-archive \
> -Wl,--start-group \
> ${KBUILD_VMLINUX_LIBS} \
> @@ -160,7 +145,6 @@ cleanup()
> rm -f .tmp_System.map
> rm -f .tmp_kallsyms*
> rm -f .tmp_vmlinux*
> - rm -f built-in.a
> rm -f System.map
> rm -f vmlinux
> rm -f vmlinux.o
> @@ -217,8 +201,6 @@ fi;
> # final build of init/
> ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init
>
> -archive_builtin
> -
> #link vmlinux.o
> info LD vmlinux.o
> modpost_link vmlinux.o
> --
> 2.7.4
>
--
Best Regards
Masahiro Yamada
prev parent reply other threads:[~2019-01-24 4:28 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-17 0:10 Masahiro Yamada
2019-01-17 0:10 ` [PATCH v3 2/2] kbuild: merge KBUILD_VMLINUX_{INIT,MAIN} into KBUILD_VMLINUX_OBJS Masahiro Yamada
2019-01-24 4:27 ` Masahiro Yamada [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAK7LNAS=4nfM0eFBt8_JbtWhtOcDthpmxkLNZkMBut9djnDWpg@mail.gmail.com' \
--to=yamada.masahiro@socionext.com \
--cc=corbet@lwn.net \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michal.lkml@markovi.net \
--cc=npiggin@gmail.com \
--cc=sfr@canb.auug.org.au \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®