Fangrui Song
c49f83b6e9
[ELF] Don't advance sh_offset for an empty section whose PT_LOAD is removed (due to p_memsz=0)
removeEmptyPTLoad() removes empty (p_memsz=0) PT_LOAD segments. In
assignFileOffsets(), setFileOffset() unnecessarily advances file offsets
for containing empty sections.
This is exposed by arm Linux kernel's multi_v5_defconfig
(see https://bugs.llvm.org/show_bug.cgi?id=45632)
```
ld.lld (max-page-size=65536):
[34] .init.data PROGBITS c0c24000 c34000 0128ac 00 WA 0 0 4096
[35] .text_itcm PROGBITS fffe0000 c50000 000000 00 WA 0 0 1
[36] .data_dtcm PROGBITS fffe8000 c58000 000000 00 WA 0 0 1
[37] .data PROGBITS c0c38000 c58000 0647a0 00 WA 0 0 32
arm-linux-gnueabi-ld (max-page-size=65536):
[23] .init.data PROGBITS c0c12000 c22000 0128ac 00 WA 0 0 4096
[24] .text_itcm PROGBITS fffe0000 ca2558 000000 00 W 0 0 1
[25] .data_dtcm PROGBITS fffe8000 ca2558 000000 00 W 0 0 1
[26] .data PROGBITS c0c26000 c36000 0647a0 00 WA 0 0 32
```
This patch clears OutputSection::ptLoad if ptLoad is removed by
removeEmptyPTLoad(). Conceptually this removes "dangling" references.
Reviewed By: psmith
Differential Revision: https://reviews.llvm.org/D79254
2020-05-04 08:07:34 -07:00
..
2020-04-17 17:15:12 -07:00
2018-06-13 18:59:14 +00:00
2020-05-04 08:07:34 -07:00
2020-04-29 14:45:44 -07:00
2020-05-01 16:57:18 -07:00
2019-10-10 09:46:41 +00:00
2020-04-29 01:38:08 +00:00
2020-04-30 12:43:15 -07:00
2020-04-29 15:44:44 -07:00
2019-03-01 18:53:41 +00:00
2020-04-29 01:38:08 +00:00