[PATCH 4/4] powerpc: Allow LD_DEAD_CODE_DATA_ELIMINATION to be selected

Christophe LEROY christophe.leroy at c-s.fr
Fri Apr 20 23:21:35 AEST 2018



Le 20/04/2018 à 12:36, Nicholas Piggin a écrit :
> On Fri, 20 Apr 2018 12:01:34 +0200
> Christophe LEROY <christophe.leroy at c-s.fr> wrote:
> 
>> Le 20/04/2018 à 09:34, Nicholas Piggin a écrit :
>>> This requires further changes to linker script to KEEP some tables
>>> and wildcard compiler generated sections into the right place. This
>>> includes pp32 modifications from Christophe Leroy.
>>>
>>> When compiling powernv_defconfig with this option:
>>>
>>> text       data      bss       dec        filename
>>> 11827621   4810490   1341080   17979191   vmlinux
>>> 11752437   4598858   1338776   17690071   vmlinux.dcde
>>>
>>> Resulting kernel is almost 400kB smaller (and still boots).
>>>
>>> [ppc32 numbers here]

Here a few results, obtained with readelf -l vmlinux | grep LOAD

First val is filesz, second is memsz, for each config you get the size 
before and after activation of LD_DCDE, and the difference between the two.

mpc83xx_defconfig:
Before: 0x5ecfe0 0x60b69c
After:  0x5d2fe0 0x5f04a4
Diff:   0x01a000 0x01b4c8

mpc83xx_defconfig without CONFIG_MODULE:
Before: 0x5c1040 0x5e0614
After:  0x55f040 0x57d314
Diff:   0x062000 0x063300

mpc885_ads_defconfig:
Before: 0x36eda4 0x38da04
After:  0x316da4 0x333764
Diff:   0x058000 0x05a2a0

Custom mpc885 config:
Before: 0x719948 0x78bc34
After:  0x6b9948 0x72a99c
Diff:   0x060000 0x061298

Custom mpc8321 config:
Before: 0x70f714 0x7d766c
After:  0x6af714 0x7763ec
Diff:   0x060000 0x061280



>>>
>>> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
>>> ---
>>>    arch/powerpc/Kconfig              |  1 +
>>>    arch/powerpc/kernel/vmlinux.lds.S | 22 +++++++++++-----------
>>>    2 files changed, 12 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
>>> index c32a181a7cbb..ee6dbe2efc8b 100644
>>> --- a/arch/powerpc/Kconfig
>>> +++ b/arch/powerpc/Kconfig
>>> @@ -205,6 +205,7 @@ config PPC
>>>    	select HAVE_KPROBES
>>>    	select HAVE_KPROBES_ON_FTRACE
>>>    	select HAVE_KRETPROBES
>>> +	select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
>>>    	select HAVE_LIVEPATCH			if HAVE_DYNAMIC_FTRACE_WITH_REGS
>>>    	select HAVE_MEMBLOCK
>>>    	select HAVE_MEMBLOCK_NODE_MAP
>>> diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
>>> index c8af90ff49f0..89381dc959ce 100644
>>> --- a/arch/powerpc/kernel/vmlinux.lds.S
>>> +++ b/arch/powerpc/kernel/vmlinux.lds.S
>>> @@ -89,7 +89,7 @@ SECTIONS
>>>    	 */
>>>    	.text BLOCK(0) : AT(ADDR(.text) - LOAD_OFFSET) {
>>>    #ifdef CONFIG_LD_HEAD_STUB_CATCH
>>> -		*(.linker_stub_catch);
>>> +		KEEP(*(.linker_stub_catch));
>>>    		. = . ;
>>>    #endif
>>>    
>>> @@ -98,7 +98,7 @@ SECTIONS
>>>    		ALIGN_FUNCTION();
>>>    #endif
>>>    		/* careful! __ftr_alt_* sections need to be close to .text */
>>> -		*(.text.hot .text .text.fixup .text.unlikely .fixup __ftr_alt_* .ref.text);
>>> +		*(.text.hot .text .text.[0-9a-zA-Z_]* .text.fixup .text.unlikely .fixup __ftr_alt_* .ref.text);
>>
>> Why not use TEXT_MAIN here instead of .text .text.[0-9a-zA-Z_]* ?
> 
> It's from my early patch before we added those in the generic linker
> script. Yes your version looks nicer.
> 
> Thanks,
> Nick
> 


More information about the Linuxppc-dev mailing list