Re: [PATCH] arm64: enable dead code elimination

From: Kefeng Wang
Date: Mon Jul 17 2023 - 07:56:50 EST




On 2023/7/17 17:42, Marc Zyngier wrote:
On 2023-07-17 09:07, Kefeng Wang wrote:
Select CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION for arm64, allowing the
user to enable dead code elimination. In order for this to work, ensure
that we keep the necessary tables by annotating them with KEEP, also it
requires further changes to linker script to KEEP some tables and wildcard
compiler generated sections into the right place.

The following comparison is based 6.5-rc2 with defconfig,

$ ./scripts/bloat-o-meter vmlinux-base vmlinux-new
add/remove: 3/1106 grow/shrink: 4102/6964 up/down: 35704/-99980 (-64276)
Function                                     old     new   delta
...
Total: Before=17888959, After=17824683, chg -0.36%

add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-44 (-44)
Data                                         old     new   delta
...
Total: Before=4820808, After=4820764, chg -0.00%

add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-1096 (-1096)
RO Data                                      old     new   delta
...
Total: Before=5179123, After=5178027, chg -0.02%

$ size vmlinux-base vmlinux
   text       data         bss      dec       hex    filename
25433734  15385766  630656  41450156  2787aac    vmlinux-base
24756738  15360870  629888  40747496  26dc1e8    vmlinux-new

Memory available after booting, saving 704k on qemu,
base: 8084532K/8388608K
new:  8085236K/8388608K

Signed-off-by: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx>

I took this patch for a spin in my tree, and ended up with:

  CC      .vmlinux.export.o
  UPD     include/generated/utsversion.h
  CC      init/version-timestamp.o
  LD      .tmp_vmlinux.kallsyms1
ld: init/main.o(__patchable_function_entries): error: need linked-to section for --gc-sections
make[2]: *** [scripts/Makefile.vmlinux:36: vmlinux] Error 1
make[1]: *** [/home/maz/hot-poop/arm-platforms/Makefile:1238: vmlinux] Error 2
make: *** [Makefile:234: __sub-make] Error 2

I don't find this error with CONFIG_FTRACE_MCOUNT_RECORD or allyesconfig, does it need special config or gcc version?

so it's probably not ready for prime time.

        M.