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
Bug: 140525226
Change-Id: I247e8bd029bd0f98a4fa1cd4db7f6398467b8e55
Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
(cherry picked from commit 6cea04778e129512a395b5043864f79bd970c750)
Signed-off-by: Kyle Lin <kylelin@google.com>
Signed-off-by: Chenyang Zhong <zhongcy95@gmail.com>
This commit is contained in:
Sami Tolvanen 2019-12-03 15:56:24 -08:00 committed by xxmustafacooTR
parent 3180aedfe1
commit 73b85ecfd8
No known key found for this signature in database
GPG key ID: 520B6FE385CBF5C9
2 changed files with 24 additions and 0 deletions

22
scripts/module-lto.lds Normal file
View file

@ -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_]*) }
}