Re: [PATCH] powerpc: Allow selection of CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
From: Nicholas Piggin <npiggin@gmail.com>
Date: 2018-04-19 05:10:28
Also in:
lkml
On Wed, 18 Apr 2018 15:11:24 +0200 Christophe LEROY [off-list ref] wrote:
Le 18/04/2018 à 10:36, Mathieu Malaterre a écrit :quoted
Christophe, On Wed, Apr 18, 2018 at 8:34 AM, Christophe LEROY [off-list ref] wrote:quoted
Le 17/04/2018 à 19:10, Mathieu Malaterre a écrit :quoted
On Tue, Apr 17, 2018 at 6:49 PM, Christophe LEROY [off-list ref] wrote:quoted
Le 17/04/2018 à 18:45, Mathieu Malaterre a écrit :quoted
On Tue, Apr 17, 2018 at 12:49 PM, Christophe Leroy [off-list ref] wrote:quoted
This option does dead code and data elimination with the linker by compiling with -ffunction-sections -fdata-sections and linking with --gc-sections. By selecting this option on mpc885_ads_defconfig, vmlinux LOAD segment size gets reduced by 10% Program Header before the patch: LOAD off 0x00010000 vaddr 0xc0000000 paddr 0x00000000 align 2**16 filesz 0x0036eda4 memsz 0x0038de04 flags rwx Program Header after the patch: LOAD off 0x00010000 vaddr 0xc0000000 paddr 0x00000000 align 2**16 filesz 0x00316da4 memsz 0x00334268 flags rwx Signed-off-by: Christophe Leroy <redacted> --- arch/powerpc/Kconfig | 8 ++++++++ 1 file changed, 8 insertions(+)diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 8fe4353be5e3..e1fac49cf465 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig@@ -888,6 +888,14 @@ config PPC_MEM_KEYS If unsure, say y. +config PPC_UNUSED_ELIMINATION + bool "Eliminate unused functions and data from vmlinux" + default n + select LD_DEAD_CODE_DATA_ELIMINATION + help + Select this to do dead code and data elimination with thelinker + by compiling with -ffunction-sections -fdata-sections and linking + with --gc-sections. endmenuJust for reference, I cannot boot my Mac Mini G4 anymore (yaboot). The messages I can see (prom_init) are:Which version of GCC do you use ?$ powerpc-linux-gnu-gcc --version powerpc-linux-gnu-gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. this is simply coming from: $ apt-cache policy crossbuild-essential-powerpc crossbuild-essential-powerpc: Installed: 12.3 Candidate: 12.3 Version table: *** 12.3 500 500 http://ftp.fr.debian.org/debian stretch/main amd64 Packages 500 http://ftp.fr.debian.org/debian stretch/main i386 Packages 100 /var/lib/dpkg/statusquoted
Can you provide the generated System.map with and without that option active ?$ du -sh g4/System.map.* 1.7M g4/System.map.with 1.8M g4/System.map.withoutHere below is the list of objects removed with the option selected. I can't see anything suspect at first.Does this help: $ grep orphan /tmp/g4.log|grep prom_init powerpc-linux-gnu-ld: warning: orphan section `.sbss.of_workarounds' from `arch/powerpc/kernel/prom_init.o' being placed in section `.sbss.of_workarounds'. powerpc-linux-gnu-ld: warning: orphan section `.sbss.of_workarounds' from `arch/powerpc/kernel/prom_init.o' being placed in section `.sbss.of_workarounds'. powerpc-linux-gnu-ld: warning: orphan section `.sbss.of_workarounds' from `arch/powerpc/kernel/prom_init.o' being placed in section `.sbss.of_workarounds'.Well, in a way yes. I initially thought that all those warnings where normal, but indeed not. We were missing some things in powerpc linker script, and most likely some sections ended up in the wrong place. Last week I tested on an 8xx and it was booting without any issue. I tested today on an 83xx and it was not booting. I will soon send new patches with the fixes in the linker scripts.
Yeah there needs to be a bit more work for powerpc before we can enable this. I have some old patches I will dust off and re-send. I never got modules working properly, I'll see if I can figure it out. Thanks, Nick