-
Notifications
You must be signed in to change notification settings - Fork 11.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ELF] Add two new tests showing broken .tbss alignment if first in PT…
…_TLS This is a similar problem to D66658, where we are too aggressive in not aligning NOBITS sections, and the tests are based on the ones added for that fix. If a .tbss section is first in a PT_TLS segment (i.e. there is no .tdata section) then, although it doesn't need to be aligned such that address and offset are congruent modulo the page size, they do need to be congruent modulo the segment alignment, otherwise the whole PT_TLS will be unaligned. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D106986
- Loading branch information
Showing
2 changed files
with
53 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# REQUIRES: x86 | ||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o | ||
# RUN: echo "SECTIONS { \ | ||
# RUN: .sec1 : { . += 1; } \ | ||
# RUN: .tbss : { *(.tbss) } \ | ||
# RUN: };" > %t.script | ||
# RUN: ld.lld %t.o -T %t.script -o %t | ||
# RUN: llvm-readelf -S -l %t | FileCheck %s | ||
|
||
## If a SHT_NOBITS section is the only section of a PT_TLS segment, | ||
## p_offset will be set to the sh_offset field of the section. Check we align | ||
## sh_offset to sh_addr modulo p_align, so that p_vaddr=p_offset (mod | ||
## p_align). | ||
## TODO: Currently we fail to ensure this, as shown by this test | ||
|
||
# CHECK: Name Type Address Off Size | ||
# CHECK-NEXT: NULL 0000000000000000 000000 000000 | ||
# CHECK-NEXT: .text PROGBITS 0000000000000000 000190 000000 | ||
# CHECK-NEXT: .sec1 PROGBITS 0000000000000000 001000 000001 | ||
# CHECK-NEXT: .tbss NOBITS 0000000000000400 001001 000001 | ||
|
||
# CHECK: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align | ||
# CHECK-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000001 0x000001 R 0x1000 | ||
# CHECK-NEXT: TLS 0x001001 0x0000000000000400 0x0000000000000400 0x000000 0x000001 R 0x400 | ||
|
||
# CHECK: 00 .sec1 {{$}} | ||
# CHECK: 01 .tbss {{$}} | ||
|
||
.tbss | ||
.p2align 10 | ||
.byte 0 |
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,22 @@ | ||
# REQUIRES: aarch64 | ||
# RUN: llvm-mc -filetype=obj -triple=aarch64 %s -o %t.o | ||
# RUN: ld.lld %t.o -o %t | ||
# RUN: llvm-readelf -S -l %t | FileCheck %s | ||
|
||
## If a SHT_NOBITS section is the only section of a PT_TLS segment, | ||
## p_offset will be set to the sh_offset field of the section. Check we align | ||
## sh_offset to sh_addr modulo p_align, so that p_vaddr=p_offset (mod | ||
## p_align). | ||
## TODO: Currently we fail to ensure this, as shown by this test | ||
|
||
# CHECK: Name Type Address Off Size ES Flg Lk Inf Al | ||
# CHECK: .tbss NOBITS 0000000000211000 000158 000001 00 WAT 0 0 4096 | ||
|
||
# CHECK: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align | ||
# CHECK: TLS 0x000158 0x0000000000211000 0x0000000000211000 0x000000 0x000001 R 0x1000 | ||
|
||
# CHECK: 02 .tbss | ||
|
||
.tbss | ||
.p2align 12 | ||
.byte 0 |