Thread (7 messages) flat view 7 messages, 4 authors, 2020-06-16

Re: [PATCH] kbuild: reuse vmlinux.o in vmlinux_link

From: Nicholas Piggin <npiggin@gmail.com>
Date: 2020-05-23 10:06:39
Also in: linux-kbuild, lkml

Excerpts from Masahiro Yamada's message of May 23, 2020 3:44 am:
+ Michael, and PPC ML.

They may know something about the reason of failure.
Because the linker can't put branch stubs within object code sections, 
so when you incrementally link them too large, the linker can't resolve 
branches into other object files.

This is why we added incremental linking in the first place. I suppose 
it could be made conditional for platforms that can use this 
optimization.

What'd be really nice is if we could somehow build and link kallsyms 
without relinking everything twice, and if we could do section mismatch 
analysis without making that vmlinux.o as well. I had a few ideas but 
not enough time to do much work on it.

Thanks,
Nick

On Sat, May 23, 2020 at 2:41 AM Masahiro Yamada [off-list ref] wrote:
quoted
On Fri, May 22, 2020 at 5:27 AM Sami Tolvanen [off-list ref] wrote:
quoted
Instead of linking all compilation units again each time vmlinux_link is
called, reuse vmlinux.o from modpost_link.

With x86_64 allyesconfig, vmlinux_link is called three times and reusing
vmlinux.o reduces the build time ~38 seconds on my system (59% reduction
in the time spent in vmlinux_link).

Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
---
 scripts/link-vmlinux.sh | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index d09ab4afbda4..c6cc4305950c 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -77,11 +77,8 @@ vmlinux_link()

        if [ "${SRCARCH}" != "um" ]; then
                objects="--whole-archive                        \
-                       ${KBUILD_VMLINUX_OBJS}                  \
+                       vmlinux.o                               \
                        --no-whole-archive                      \
-                       --start-group                           \
-                       ${KBUILD_VMLINUX_LIBS}                  \
-                       --end-group                             \
                        ${@}"

                ${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux}      \
base-commit: b85051e755b0e9d6dd8f17ef1da083851b83287d
--
2.27.0.rc0.183.gde8f92d652-goog

I like this patch irrespective of CLANG_LTO, but
unfortunately, my build test failed.


ARCH=powerpc failed to build as follows:



  MODPOST vmlinux.o
  MODINFO modules.builtin.modinfo
  GEN     modules.builtin
  LD      .tmp_vmlinux.kallsyms1
vmlinux.o:(__ftr_alt_97+0x20): relocation truncated to fit:
R_PPC64_REL14 against `.text'+4b1c
vmlinux.o:(__ftr_alt_97+0x164): relocation truncated to fit:
R_PPC64_REL14 against `.text'+1cf78
vmlinux.o:(__ftr_alt_97+0x288): relocation truncated to fit:
R_PPC64_REL14 against `.text'+1dac4
vmlinux.o:(__ftr_alt_97+0x2f0): relocation truncated to fit:
R_PPC64_REL14 against `.text'+1e254
make: *** [Makefile:1125: vmlinux] Error 1



I used powerpc-linux-gcc
available at
https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/9.2.0/


Build command:

make -j24 ARCH=powerpc  CROSS_COMPILE=powerpc-linux-  defconfig all


Could you check it please?



I will apply it to my test branch.
Perhaps, 0-day bot may find more failure cases.


--
Best Regards
Masahiro Yamada


-- 
Best Regards
Masahiro Yamada
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help