From 51042de0309fa662ec331fc6e97d01f92212ce80 Mon Sep 17 00:00:00 2001 From: Sami Tolvanen Date: Tue, 3 Dec 2019 15:56:24 -0800 Subject: [PATCH] ANDROID: kbuild: merge module sections with LTO LLD always splits sections with LTO, which increases module sizes. This change adds a linker script that merges the split sections in the final module. Bug: 145297228 Change-Id: I247e8bd029bd0f98a4fa1cd4db7f6398467b8e55 Suggested-by: Nick Desaulniers Signed-off-by: Sami Tolvanen --- Makefile | 2 ++ scripts/module-lto.lds | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 scripts/module-lto.lds diff --git a/Makefile b/Makefile index ec0ac17ab7e5..bee9a9e2bd43 100644 --- a/Makefile +++ b/Makefile @@ -839,6 +839,8 @@ lto-clang-flags := -flto endif lto-clang-flags += -fvisibility=default $(call cc-option, -fsplit-lto-unit) +KBUILD_LDS_MODULE += $(srctree)/scripts/module-lto.lds + # allow disabling only clang LTO where needed DISABLE_LTO_CLANG := -fno-lto export DISABLE_LTO_CLANG diff --git a/scripts/module-lto.lds b/scripts/module-lto.lds new file mode 100644 index 000000000000..f5ee544a877d --- /dev/null +++ b/scripts/module-lto.lds @@ -0,0 +1,22 @@ +/* + * With CONFIG_LTO_CLANG, LLD always enables -fdata-sections and + * -ffunction-sections, which increases the size of the final module. + * Merge the split sections in the final binary. + */ +SECTIONS { + /* + * LLVM may emit .eh_frame with CONFIG_CFI_CLANG despite + * -fno-asynchronous-unwind-tables. Discard the section. + */ + /DISCARD/ : { + *(.eh_frame) + } + + .bss : { *(.bss .bss[.0-9a-zA-Z_]*) } + .data : { *(.data .data[.0-9a-zA-Z_]*) } + .rela.data : { *(.rela.data .rela.data[.0-9a-zA-Z_]*) } + .rela.rodata : { *(.rela.rodata .rela.rodata[.0-9a-zA-Z_]*) } + .rela.text : { *(.rela.text .rela.text[.0-9a-zA-Z_]*) } + .rodata : { *(.rodata .rodata[.0-9a-zA-Z_]*) } + .text : { *(.text .text[.0-9a-zA-Z_]*) } +}