Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[LLD][ELF] - Do not remove empty sections referenced in LOADADDR/ADDR…
… commands. This is https://bugs.llvm.org//show_bug.cgi?id=38750. If script references empty sections in LOADADDR/ADDR commands .empty : { *(.empty ) } .text : AT(LOADADDR (.empty) + SIZEOF (.empty)) { *(.text) } then an empty section will be removed and LOADADDR/ADDR will evaluate to null. It is not that user may expect from using of the generic script, what is a common case. Differential revision: https://reviews.llvm.org/D54621 llvm-svn: 359279
- Loading branch information
George Rimar
committed
Apr 26, 2019
1 parent
2aa0bde
commit dee900a
Showing
4 changed files
with
36 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# REQUIRES: x86 | ||
# RUN: echo ".text; nop; .data; .byte 0" \ | ||
# RUN: | llvm-mc -filetype=obj -triple=x86_64-pc-linux - -o %t.o | ||
# RUN: ld.lld -o %t --script %s %t.o | ||
# RUN: llvm-readelf -program-headers %t | FileCheck %s | ||
|
||
## Check we do not remove the empty output sections used in LOADADDR/ADDR | ||
## expressions and hence can evaluate the correct addresses. | ||
|
||
# CHECK: Program Headers: | ||
# CHECK-NEXT: Type Offset VirtAddr PhysAddr | ||
# CHECK-NEXT: LOAD 0x001000 0x0000000000080000 0x0000000000080000 | ||
# CHECK-NEXT: LOAD 0x001001 0x0000000000080001 0x0000000000082000 | ||
|
||
# CHECK: Section to Segment mapping: | ||
# CHECK: 00 .empty .text | ||
# CHECK-NEXT: 01 .data | ||
|
||
SECTIONS { | ||
. = 0x00080000; | ||
.empty : { *(.empty ) } | ||
.text : AT(LOADADDR(.empty) + SIZEOF(.empty)) { *(.text) } | ||
.data : AT(ADDR(.empty) + 0x2000) { *(.data) } | ||
} |