diff mbox series

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

Message ID 1547436479-10491-1-git-send-email-yamada.masahiro@socionext.com
State New
Headers show
Series [1/2] kbuild: remove top-level built-in.a | expand

Commit Message

Masahiro Yamada Jan. 14, 2019, 3:27 a.m. UTC
The symbol table in the final archive is unneeded because it is passed
to the linker 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.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

---

 scripts/link-vmlinux.sh | 30 ++++++------------------------
 1 file changed, 6 insertions(+), 24 deletions(-)

-- 
2.7.4

Comments

Nicholas Piggin Jan. 15, 2019, 7:15 a.m. UTC | #1
Masahiro Yamada's on January 14, 2019 1:27 pm:
> The symbol table in the final archive is unneeded because it is passed

> to the linker 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.


This seems like a good improvement. As far as I remember, it was slower 
to do the final link without the index built. Maybe I was testing it 
in a revision before moving those files into --whole-archive? If there
is no slowdown, then I have no objection.

Acked-by: Nicholas Piggin <npiggin@gmail.com>
Masahiro Yamada Jan. 15, 2019, 9:01 a.m. UTC | #2
Hi Nicholas,


On Tue, Jan 15, 2019 at 5:07 PM Nicholas Piggin <npiggin@gmail.com> wrote:
>

> Masahiro Yamada's on January 14, 2019 1:27 pm:

> > The symbol table in the final archive is unneeded because it is passed

> > to the linker 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.

>

> This seems like a good improvement. As far as I remember, it was slower

> to do the final link without the index built. Maybe I was testing it

> in a revision before moving those files into --whole-archive? If there

> is no slowdown, then I have no objection.



Thanks for the review.


I measured the performance of scripts/link-vmlinux.sh with 'perf stat'.
(20 times for each)



Before this patch:

 Performance counter stats for 'make vmlinux' (20 runs):

       5.266796537 seconds time elapsed
          ( +-  0.12% )



After this patch:

 Performance counter stats for 'make vmlinux' (20 runs):

       4.945576395 seconds time elapsed




So, the performance is slightly better.

Maybe, does omitting the 'ar' save some time?


Anyway, this commit is good.


-- 
Best Regards
Masahiro Yamada
Nicholas Piggin Jan. 23, 2019, 8:26 a.m. UTC | #3
Masahiro Yamada's on January 15, 2019 7:01 pm:
> Hi Nicholas,

> 

> 

> On Tue, Jan 15, 2019 at 5:07 PM Nicholas Piggin <npiggin@gmail.com> wrote:

>>

>> Masahiro Yamada's on January 14, 2019 1:27 pm:

>> > The symbol table in the final archive is unneeded because it is passed

>> > to the linker 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.

>>

>> This seems like a good improvement. As far as I remember, it was slower

>> to do the final link without the index built. Maybe I was testing it

>> in a revision before moving those files into --whole-archive? If there

>> is no slowdown, then I have no objection.

> 

> 

> Thanks for the review.

> 

> 

> I measured the performance of scripts/link-vmlinux.sh with 'perf stat'.

> (20 times for each)

> 

> 

> 

> Before this patch:

> 

>  Performance counter stats for 'make vmlinux' (20 runs):

> 

>        5.266796537 seconds time elapsed

>           ( +-  0.12% )

> 

> 

> 

> After this patch:

> 

>  Performance counter stats for 'make vmlinux' (20 runs):

> 

>        4.945576395 seconds time elapsed

> 

> 

> 

> 

> So, the performance is slightly better.

> 

> Maybe, does omitting the 'ar' save some time?


Wow yeah that's a good speedup and simplification to boot. Thanks for 
checking it.

> Anyway, this commit is good.


Yes, it's a good improvement.

Thanks,
Nick
diff mbox series

Patch

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