parent
9bd12f4b3a
commit
a940e5396b
|
@ -357,11 +357,14 @@ static void assignSectionSymbol(SymbolAssignment *Cmd,
|
|||
Body->Value = Cmd->Expression(Sec->getVA() + Off);
|
||||
}
|
||||
|
||||
template <class ELFT> static bool isTbss(OutputSectionBase<ELFT> *Sec) {
|
||||
return (Sec->getFlags() & SHF_TLS) && Sec->getType() == SHT_NOBITS;
|
||||
}
|
||||
|
||||
template <class ELFT> void LinkerScript<ELFT>::output(InputSection<ELFT> *S) {
|
||||
if (!AlreadyOutputIS.insert(S).second)
|
||||
return;
|
||||
bool IsTbss =
|
||||
(CurOutSec->getFlags() & SHF_TLS) && CurOutSec->getType() == SHT_NOBITS;
|
||||
bool IsTbss = isTbss(CurOutSec);
|
||||
|
||||
uintX_t Pos = IsTbss ? Dot + ThreadBssOffset : Dot;
|
||||
Pos = alignTo(Pos, S->Alignment);
|
||||
|
@ -398,7 +401,7 @@ void LinkerScript<ELFT>::switchTo(OutputSectionBase<ELFT> *Sec) {
|
|||
CurOutSec = Sec;
|
||||
|
||||
Dot = alignTo(Dot, CurOutSec->getAlignment());
|
||||
CurOutSec->setVA(Dot);
|
||||
CurOutSec->setVA(isTbss(CurOutSec) ? Dot + ThreadBssOffset : Dot);
|
||||
}
|
||||
|
||||
template <class ELFT> void LinkerScript<ELFT>::process(BaseCommand &Base) {
|
||||
|
|
|
@ -2,7 +2,35 @@
|
|||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
|
||||
# RUN: echo "SECTIONS { }" > %t.script
|
||||
# RUN: ld.lld -T %t.script %t.o -o %t
|
||||
# RUN: llvm-readobj -l %t | FileCheck %s
|
||||
# RUN: llvm-readobj -l -s %t | FileCheck %s
|
||||
|
||||
# CHECK: Name: .tbss
|
||||
# CHECK-NEXT: Type: SHT_NOBITS
|
||||
# CHECK-NEXT: Flags [
|
||||
# CHECK-NEXT: SHF_ALLOC
|
||||
# CHECK-NEXT: SHF_TLS
|
||||
# CHECK-NEXT: SHF_WRITE
|
||||
# CHECK-NEXT: ]
|
||||
# CHECK-NEXT: Address:
|
||||
# CHECK-NEXT: Offset:
|
||||
# CHECK-NEXT: Size: 8
|
||||
# CHECK-NEXT: Link:
|
||||
# CHECK-NEXT: Info:
|
||||
# CHECK-NEXT: AddressAlignment:
|
||||
# CHECK-NEXT: EntrySize:
|
||||
# CHECK-NEXT: }
|
||||
# CHECK-NEXT: Section {
|
||||
# CHECK-NEXT: Index:
|
||||
# CHECK-NEXT: Name: foo
|
||||
# CHECK-NEXT: Type: SHT_NOBITS
|
||||
# CHECK-NEXT: Flags [
|
||||
# CHECK-NEXT: SHF_ALLOC
|
||||
# CHECK-NEXT: SHF_TLS
|
||||
# CHECK-NEXT: SHF_WRITE
|
||||
# CHECK-NEXT: ]
|
||||
# CHECK-NEXT: Address:
|
||||
# CHECK-NEXT: Offset:
|
||||
# CHECK-NEXT: Size: 1
|
||||
|
||||
# CHECK: Type: PT_TLS
|
||||
# CHECK-NEXT: Offset:
|
||||
|
|
Loading…
Reference in New Issue