Le 20/04/2018 à 12:36, Nicholas Piggin a écrit :
On Fri, 20 Apr 2018 12:01:34 +0200
Christophe LEROY <christophe.leroy@xxxxxx> 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@xxxxxxxxx>
---
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