| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: Sami Tolvanen <samitolvanen@google.com> |
| Date: Tue, 3 Dec 2019 15:56:24 -0800 |
| Subject: 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 <ndesaulniers@google.com> |
| Signed-off-by: Sami Tolvanen <samitolvanen@google.com> |
| --- |
| 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 28ff164ef6a5..bdcecbc27095 100644 |
| --- a/Makefile |
| +++ b/Makefile |
| @@ -874,6 +874,8 @@ else |
| CC_FLAGS_LTO_CLANG := -flto |
| endif |
| CC_FLAGS_LTO_CLANG += -fvisibility=default |
| + |
| +KBUILD_LDS_MODULE += $(srctree)/scripts/module-lto.lds |
| endif |
| |
| ifdef CONFIG_LTO |
| 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_]*) } |
| +} |