diff options
author | Fangrui Song <maskray@google.com> | 2020-05-01 09:50:37 -0700 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2020-05-04 08:07:34 -0700 |
commit | c49f83b6e9e383ac9df02ab4d95974d7bb1e5ddc (patch) | |
tree | 2e861fc228439aea740f0e7213735ca1464b9e05 /llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp | |
parent | db015fdd2061714224f0ba46a10db28e90df8f7d (diff) | |
download | llvm-c49f83b6e9e383ac9df02ab4d95974d7bb1e5ddc.zip llvm-c49f83b6e9e383ac9df02ab4d95974d7bb1e5ddc.tar.gz llvm-c49f83b6e9e383ac9df02ab4d95974d7bb1e5ddc.tar.bz2 |
[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
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp')
0 files changed, 0 insertions, 0 deletions