forked from OSchip/llvm-project
revert r254428 [ELF] - Refactor of tls_index implementation for tls local dynamic model.
It failed buildbot: http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/3782/steps/build/logs/stdio Target.cpp In file included from /home/buildbot/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/lld/ELF/Target.cpp:20: /home/buildbot/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/lld/ELF/OutputSections.h:136:42: error: use of undeclared identifier 'getVA' uint32_t getLocalTlsIndexVA() { return getVA() + LocalTlsIndexOff; } llvm-svn: 254432
This commit is contained in:
parent
98ad82a6a1
commit
60849f2913
|
@ -113,7 +113,8 @@ void InputSectionBase<ELFT>::relocate(
|
|||
if (Target->isTlsLocalDynamicReloc(Type) &&
|
||||
!Target->isTlsOptimized(Type, nullptr)) {
|
||||
Target->relocateOne(BufLoc, BufEnd, Type, AddrLoc,
|
||||
Out<ELFT>::Got->getLocalTlsIndexVA() +
|
||||
Out<ELFT>::Got->getVA() +
|
||||
Out<ELFT>::LocalModuleTlsIndexOffset +
|
||||
getAddend<ELFT>(RI));
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -87,13 +87,10 @@ template <class ELFT> void GotSection<ELFT>::addDynTlsEntry(SymbolBody *Sym) {
|
|||
Entries.push_back(nullptr);
|
||||
}
|
||||
|
||||
template <class ELFT> bool GotSection<ELFT>::addLocalModelTlsIndex() {
|
||||
if (LocalTlsIndexOff != uint32_t(-1))
|
||||
return false;
|
||||
template <class ELFT> uint32_t GotSection<ELFT>::addLocalModuleTlsIndex() {
|
||||
Entries.push_back(nullptr);
|
||||
Entries.push_back(nullptr);
|
||||
LocalTlsIndexOff = (Entries.size() - 2) * sizeof(uintX_t);
|
||||
return true;
|
||||
return (Entries.size() - 2) * sizeof(uintX_t);
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
|
@ -204,7 +201,8 @@ bool RelocationSection<ELFT>::applyTlsDynamicReloc(SymbolBody *Body,
|
|||
Elf_Rel *N) {
|
||||
if (Target->isTlsLocalDynamicReloc(Type)) {
|
||||
P->setSymbolAndType(0, Target->getTlsModuleIndexReloc(), Config->Mips64EL);
|
||||
P->r_offset = Out<ELFT>::Got->getLocalTlsIndexVA();
|
||||
P->r_offset =
|
||||
Out<ELFT>::Got->getVA() + Out<ELFT>::LocalModuleTlsIndexOffset;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ public:
|
|||
void writeTo(uint8_t *Buf) override;
|
||||
void addEntry(SymbolBody *Sym);
|
||||
void addDynTlsEntry(SymbolBody *Sym);
|
||||
bool addLocalModelTlsIndex();
|
||||
uint32_t addLocalModuleTlsIndex();
|
||||
bool empty() const { return Entries.empty(); }
|
||||
uintX_t getEntryAddr(const SymbolBody &B) const;
|
||||
|
||||
|
@ -133,11 +133,8 @@ public:
|
|||
// the number of reserved entries. This method is MIPS-specific.
|
||||
unsigned getMipsLocalEntriesNum() const;
|
||||
|
||||
uint32_t getLocalTlsIndexVA() { return getVA() + LocalTlsIndexOff; }
|
||||
|
||||
private:
|
||||
std::vector<const SymbolBody *> Entries;
|
||||
uint32_t LocalTlsIndexOff = -1;
|
||||
};
|
||||
|
||||
template <class ELFT>
|
||||
|
@ -433,6 +430,7 @@ template <class ELFT> struct Out {
|
|||
static SymbolTableSection<ELFT> *DynSymTab;
|
||||
static SymbolTableSection<ELFT> *SymTab;
|
||||
static Elf_Phdr *TlsPhdr;
|
||||
static uint32_t LocalModuleTlsIndexOffset;
|
||||
};
|
||||
|
||||
template <class ELFT> DynamicSection<ELFT> *Out<ELFT>::Dynamic;
|
||||
|
@ -454,6 +452,7 @@ template <class ELFT> StringTableSection<ELFT> *Out<ELFT>::StrTab;
|
|||
template <class ELFT> SymbolTableSection<ELFT> *Out<ELFT>::DynSymTab;
|
||||
template <class ELFT> SymbolTableSection<ELFT> *Out<ELFT>::SymTab;
|
||||
template <class ELFT> typename Out<ELFT>::Elf_Phdr *Out<ELFT>::TlsPhdr;
|
||||
template <class ELFT> uint32_t Out<ELFT>::LocalModuleTlsIndexOffset = -1;
|
||||
|
||||
} // namespace elf2
|
||||
} // namespace lld
|
||||
|
|
|
@ -205,8 +205,11 @@ void Writer<ELFT>::scanRelocs(
|
|||
if (Target->isTlsLocalDynamicReloc(Type)) {
|
||||
if (Target->isTlsOptimized(Type, nullptr))
|
||||
continue;
|
||||
if (Out<ELFT>::Got->addLocalModelTlsIndex())
|
||||
if (Out<ELFT>::LocalModuleTlsIndexOffset == uint32_t(-1)) {
|
||||
Out<ELFT>::LocalModuleTlsIndexOffset =
|
||||
Out<ELFT>::Got->addLocalModuleTlsIndex();
|
||||
Out<ELFT>::RelaDyn->addReloc({&C, &RI});
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue