Fix wrong TLS symbol values.

I do not fully understand why we had these values in the tests, but
the new value matches what ld.bfd and ld.gold set, so I guess that
was just a mistake.

Differential Revision: https://reviews.llvm.org/D30441

llvm-svn: 296505
This commit is contained in:
Rui Ueyama 2017-02-28 19:06:32 +00:00
parent 519b0816c6
commit 4d574b324a
5 changed files with 4 additions and 12 deletions

View File

@ -1376,14 +1376,6 @@ template <class ELFT> void SymbolTableSection<ELFT>::writeTo(uint8_t *Buf) {
if (const OutputSection *OutSec = Body->getOutputSection<ELFT>()) {
ESym->st_shndx = OutSec->SectionIndex;
// This piece of code should go away as it doesn't make sense,
// but we want to keep it tentatively because some tests for TLS
// variable depends on this. We should fix the test and remove
// this code.
if (Body->isLocal())
if (auto *DS = dyn_cast<DefinedRegular<ELFT>>(Body))
ESym->st_value = OutSec->Addr + DS->Section->getOffset(*DS);
} else if (isa<DefinedRegular<ELFT>>(Body)) {
ESym->st_shndx = SHN_ABS;
} else if (isa<DefinedCommon>(Body)) {

View File

@ -6,7 +6,7 @@
# NOGC: Symbol {
# NOGC: Name: patatino
# NOGC-NEXT: Value: 0x1000
# NOGC-NEXT: Value: 0x0
# NOGC-NEXT: Size: 0
# NOGC-NEXT: Binding: Local
# NOGC-NEXT: Type: TLS

View File

@ -29,7 +29,7 @@
# DIS-NEXT: 30040 00000000 00000000 00000000 00000001
# DIS-NEXT: 30050 ffffffff ffff8004 ffffffff ffff9004
# DIS: 0000000000040000 l .tdata 00000000 loc
# DIS: 0000000000000000 l .tdata 00000000 loc
# DIS: 0000000000000004 g .tdata 00000000 bar
# DIS: 0000000000000000 g *UND* 00000000 foo

View File

@ -21,7 +21,7 @@
# DIS-NEXT: 2000c: 24 62 90 00 addiu $2, $3, -28672
# %lo(loc0 - .tdata - 0x7000) --^
# DIS: 00040000 l .tdata 00000000 loc0
# DIS: 00000000 l .tdata 00000000 loc0
# CHECK: Relocations [
# CHECK-NEXT: ]

View File

@ -27,7 +27,7 @@
# DIS-NEXT: 30020 00000000 00000001 00000000 00000001
# DIS-NEXT: 30030 ffff8004 ffff9004
# DIS: 00040000 l .tdata 00000000 loc
# DIS: 00000000 l .tdata 00000000 loc
# DIS: 00000004 g .tdata 00000000 bar
# DIS: 00000000 g *UND* 00000000 foo