diff options
author | Nicholas Piggin <npiggin@gmail.com> | 2016-08-24 22:29:20 +1000 |
---|---|---|
committer | Michal Marek <mmarek@suse.com> | 2016-09-09 10:47:00 +0200 |
commit | b67067f1176df6ee727450546b58704e4b588563 (patch) | |
tree | 59cfd4ebc0ea13e799b9e4393740591f9e16985d /arch/Kconfig | |
parent | a5967db9af51a84f5e181600954714a9e4c69f1f (diff) | |
download | linux-b67067f1176df6ee727450546b58704e4b588563.tar.gz linux-b67067f1176df6ee727450546b58704e4b588563.tar.bz2 linux-b67067f1176df6ee727450546b58704e4b588563.zip |
kbuild: allow archs to select link dead code/data elimination
Introduce LD_DEAD_CODE_DATA_ELIMINATION option for architectures to
select to build with -ffunction-sections, -fdata-sections, and link
with --gc-sections. It requires some work (documented) to ensure all
unreferenced entrypoints are live, and requires toolchain and build
verification, so it is made a per-arch option for now.
On a random powerpc64le build, this yelds a significant size saving,
it boots and runs fine, but there is a lot I haven't tested as yet, so
these savings may be reduced if there are bugs in the link.
text data bss dec filename
11169741 1180744 1923176 14273661 vmlinux
10445269 1004127 1919707 13369103 vmlinux.dce
~700K text, ~170K data, 6% removed from kernel image size.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michal Marek <mmarek@suse.com>
Diffstat (limited to 'arch/Kconfig')
-rw-r--r-- | arch/Kconfig | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/Kconfig b/arch/Kconfig index 6842154813e5..3f948c422d9d 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -467,6 +467,19 @@ config THIN_ARCHIVES Select this if the architecture wants to use thin archives instead of ld -r to create the built-in.o files. +config LD_DEAD_CODE_DATA_ELIMINATION + bool + help + Select this if the architecture wants to do dead code and + data elimination with the linker by compiling with + -ffunction-sections -fdata-sections and linking with + --gc-sections. + + This requires that the arch annotates or otherwise protects + its external entry points from being discarded. Linker scripts + must also merge .text.*, .data.*, and .bss.* correctly into + output sections. + config HAVE_CONTEXT_TRACKING bool help |