Thread (10 messages) 10 messages, 4 authors, 2018-04-24

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 the
linker
+         by compiling with -ffunction-sections -fdata-sections and
linking
+         with --gc-sections.
    endmenu
 
Just 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/status

 
quoted
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.without  

Here 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help