Re: [PATCH v3 1/2] kbuild: remove top-level built-in.a

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 17, 2019 at 10:23 AM Masahiro Yamada
<yamada.masahiro@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxx>
> Acked-by: Nicholas Piggin <npiggin@xxxxxxxxx>
> ---

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



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux