forked from OSchip/llvm-project
[lld/mac] Test zerofill sections after __thread_bss
Real zerofill sections go after __thread_bss, since zerofill sections must all be at the end of their segment and __thread_bss must be right after __thread_data. Works fine already, but wasn't tested as far as I can tell. Also tweak comment about zerofill sections a bit. No behavior change. Differential Revision: https://reviews.llvm.org/D104609
This commit is contained in:
parent
62ed024c74
commit
e6cb55d5ce
|
@ -130,8 +130,10 @@ static int sectionOrder(OutputSection *osec) {
|
|||
.Case(section_names::codeSignature, std::numeric_limits<int>::max())
|
||||
.Default(osec->inputOrder);
|
||||
}
|
||||
// ZeroFill sections must always be the at the end of their segments,
|
||||
// otherwise subsequent sections may get overwritten with zeroes at runtime.
|
||||
// ZeroFill sections must always be the at the end of their segments:
|
||||
// dyld checks if a segment's file size is smaller than its in-memory
|
||||
// size to detect if a segment has zerofill sections, and if so it maps
|
||||
// the missing tail as zerofill.
|
||||
if (sectionType(osec->flags) == S_ZEROFILL)
|
||||
return std::numeric_limits<int>::max();
|
||||
return osec->inputOrder;
|
||||
|
|
|
@ -69,11 +69,29 @@
|
|||
# FLAGS-NEXT: segname __DATA
|
||||
# FLAGS-NEXT: addr
|
||||
# FLAGS-NEXT: size 0x0000000000000008
|
||||
# FLAGS-NEXT: offset
|
||||
# FLAGS-NEXT: offset 0
|
||||
# FLAGS-NEXT: align 2^3 (8)
|
||||
# FLAGS-NEXT: reloff 0
|
||||
# FLAGS-NEXT: nreloc 0
|
||||
# FLAGS-NEXT: type S_THREAD_LOCAL_ZEROFILL
|
||||
# FLAGS: sectname __bss
|
||||
# FLAGS-NEXT: segname __DATA
|
||||
# FLAGS-NEXT: addr
|
||||
# FLAGS-NEXT: size 0x0000000000002000
|
||||
# FLAGS-NEXT: offset 0
|
||||
# FLAGS-NEXT: align 2^0 (1)
|
||||
# FLAGS-NEXT: reloff 0
|
||||
# FLAGS-NEXT: nreloc 0
|
||||
# FLAGS-NEXT: type S_ZEROFILL
|
||||
# FLAGS: sectname __common
|
||||
# FLAGS-NEXT: segname __DATA
|
||||
# FLAGS-NEXT: addr
|
||||
# FLAGS-NEXT: size 0x0000000000004000
|
||||
# FLAGS-NEXT: offset 0
|
||||
# FLAGS-NEXT: align 2^14 (16384)
|
||||
# FLAGS-NEXT: reloff 0
|
||||
# FLAGS-NEXT: nreloc 0
|
||||
# FLAGS-NEXT: type S_ZEROFILL
|
||||
|
||||
#--- libtlv.s
|
||||
.section __DATA,__thread_vars,thread_local_variables
|
||||
|
@ -95,6 +113,12 @@ _main:
|
|||
|
||||
## Add some TLVs to test too, so that we can test the ordering
|
||||
## of __thread_ptrs, __thread_data, and __thread_bss.
|
||||
## Also add a .bss and a .comm for good measure too. Since they
|
||||
## are both zerofill, they end up after __thread_bss.
|
||||
.comm _com, 0x4000
|
||||
.bss
|
||||
.zero 0x2000
|
||||
|
||||
.section __DATA,__thread_data,thread_local_regular
|
||||
_tfoo$tlv$init:
|
||||
.quad 123
|
||||
|
|
Loading…
Reference in New Issue