MIPS: Enable dead code elimination
authorPaul Burton <paul.burton@mips.com>
Wed, 21 Nov 2018 21:56:36 +0000 (21:56 +0000)
committerPaul Burton <paul.burton@mips.com>
Wed, 21 Nov 2018 23:36:49 +0000 (15:36 -0800)
Select CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION for MIPS, allowing the
user to enable dead code elimination. In order for this to work, ensure
that we keep the data bus exception table & the machine list by
annotating them with KEEP.

This shrinks both 32r2el_defconfig & 64r6el_defconfig builds by ~6%, as
shown by numbers from scripts/bloat-o-meter:

          | 32r2el_defconfig | 64r6el_defconfig
  --------|------------------|------------------
   No DCE | 8919864          | 8286307
      DCE | 8338988 (-6.51%) | 7741808 (-6.57%)

Signed-off-by: Paul Burton <paul.burton@mips.com>
Patchwork: https://patchwork.linux-mips.org/patch/21187/
Cc: linux-mips@linux-mips.org
arch/mips/Kconfig
arch/mips/kernel/vmlinux.lds.S

index e83a8cce41e98b5429c9d0f7f44cb4f622b3fbbd..e49b5a0c85853f00df16bacc3593eae3692abead 100644 (file)
@@ -63,6 +63,7 @@ config MIPS
        select HAVE_IRQ_TIME_ACCOUNTING
        select HAVE_KPROBES
        select HAVE_KRETPROBES
+       select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
        select HAVE_MEMBLOCK_NODE_MAP
        select HAVE_MOD_ARCH_SPECIFIC
        select HAVE_NMI
index 971a504001c27cfd2408b634ace6d2501d47f6f8..cb7e9ed7a453cd8982fca4da2b3ee659d52181cb 100644 (file)
@@ -72,7 +72,7 @@ SECTIONS
        /* Exception table for data bus errors */
        __dbe_table : {
                __start___dbe_table = .;
-               *(__dbe_table)
+               KEEP(*(__dbe_table))
                __stop___dbe_table = .;
        }
 
@@ -123,7 +123,7 @@ SECTIONS
        . = ALIGN(4);
        .mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) {
                __mips_machines_start = .;
-               *(.mips.machines.init)
+               KEEP(*(.mips.machines.init))
                __mips_machines_end = .;
        }