[ELF] - Simplify a SymbolBody class interface a bit.
Get rid of few accessors in that class, and replace
them with direct fields access.
Differential revision: http://reviews.llvm.org/D17879
llvm-svn: 262796
diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp
index 4d74f84..9e0ecd9 100644
--- a/lld/ELF/InputSection.cpp
+++ b/lld/ELF/InputSection.cpp
@@ -282,7 +282,7 @@
SymVA = Out<ELFT>::Got->getMipsLocalFullAddr(*Body);
else
SymVA = Body->getGotVA<ELFT>();
- if (Body->isTls())
+ if (Body->IsTls)
Type = Target->getTlsGotRel(Type);
} else if (!Target->needsCopyRel<ELFT>(Type, *Body) &&
isa<SharedSymbol<ELFT>>(*Body)) {
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp
index c717344..8c294f6 100644
--- a/lld/ELF/OutputSections.cpp
+++ b/lld/ELF/OutputSections.cpp
@@ -955,7 +955,7 @@
return false;
if (Body->getVisibility() != STV_DEFAULT)
return false;
- if (Config->Bsymbolic || (Config->BsymbolicFunctions && Body->isFunc()))
+ if (Config->Bsymbolic || (Config->BsymbolicFunctions && Body->IsFunc))
return false;
return true;
}
diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp
index 7f41724..cd8c8d2 100644
--- a/lld/ELF/SymbolTable.cpp
+++ b/lld/ELF/SymbolTable.cpp
@@ -285,7 +285,7 @@
return;
}
- if (New->isTls() != Existing->isTls()) {
+ if (New->IsTls != Existing->IsTls) {
error("TLS attribute mismatch for symbol: " + conflictMsg(Existing, New));
return;
}
@@ -346,8 +346,7 @@
L->setWeak();
// FIXME: Do we need to copy more?
- if (Undef->isTls())
- L->setTls();
+ L->IsTls |= Undef->IsTls;
return;
}
diff --git a/lld/ELF/Symbols.cpp b/lld/ELF/Symbols.cpp
index 49304e4..f67b206 100644
--- a/lld/ELF/Symbols.cpp
+++ b/lld/ELF/Symbols.cpp
@@ -61,7 +61,7 @@
auto *SS = cast<SharedSymbol<ELFT>>(this);
if (!SS->NeedsCopyOrPltAddr)
return 0;
- if (SS->isFunc())
+ if (SS->IsFunc)
return getPltVA<ELFT>();
else
return Out<ELFT>::Bss->getVA() + SS->OffsetInBss;
diff --git a/lld/ELF/Symbols.h b/lld/ELF/Symbols.h
index fc240b1..c73371a 100644
--- a/lld/ELF/Symbols.h
+++ b/lld/ELF/Symbols.h
@@ -84,8 +84,6 @@
bool isLazy() const { return SymbolKind == LazyKind; }
bool isShared() const { return SymbolKind == SharedKind; }
bool isUsedInRegularObj() const { return IsUsedInRegularObj; }
- bool isFunc() const { return Type == llvm::ELF::STT_FUNC; }
- bool isTls() const { return Type == llvm::ELF::STT_TLS; }
// Returns the symbol name.
StringRef getName() const { return Name; }
@@ -131,8 +129,9 @@
SymbolBody(Kind K, StringRef Name, bool IsWeak, uint8_t Visibility,
uint8_t Type)
: SymbolKind(K), IsWeak(IsWeak), Visibility(Visibility),
- MustBeInDynSym(false), NeedsCopyOrPltAddr(false),
- Type(Type), Name(Name) {
+ MustBeInDynSym(false), NeedsCopyOrPltAddr(false), Name(Name) {
+ IsFunc = Type == llvm::ELF::STT_FUNC;
+ IsTls = Type == llvm::ELF::STT_TLS;
IsUsedInRegularObj = K != SharedKind && K != LazyKind;
}
@@ -154,9 +153,10 @@
// symbol or if the symbol should point to its plt entry.
unsigned NeedsCopyOrPltAddr : 1;
-protected:
- uint8_t Type;
+ unsigned IsTls : 1;
+ unsigned IsFunc : 1;
+protected:
StringRef Name;
Symbol *Backref = nullptr;
};
@@ -305,7 +305,7 @@
// OffsetInBss is significant only when needsCopy() is true.
uintX_t OffsetInBss = 0;
- bool needsCopy() const { return this->NeedsCopyOrPltAddr && !this->isFunc(); }
+ bool needsCopy() const { return this->NeedsCopyOrPltAddr && !this->IsFunc; }
};
// This class represents a symbol defined in an archive file. It is
@@ -326,7 +326,6 @@
// was already returned.
std::unique_ptr<InputFile> getMember();
- void setTls() { this->Type = llvm::ELF::STT_TLS; }
void setWeak() { IsWeak = true; }
void setUsedInRegularObj() { IsUsedInRegularObj = true; }
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index e4ba6d7..c38a087 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -264,7 +264,7 @@
TargetInfo::~TargetInfo() {}
bool TargetInfo::canRelaxTls(uint32_t Type, const SymbolBody *S) const {
- if (Config->Shared || (S && !S->isTls()))
+ if (Config->Shared || (S && !S->IsTls))
return false;
// We know we are producing an executable.
@@ -485,7 +485,7 @@
}
bool X86TargetInfo::needsGot(uint32_t Type, SymbolBody &S) const {
- if (S.isTls() && Type == R_386_TLS_GD)
+ if (S.IsTls && Type == R_386_TLS_GD)
return Target->canRelaxTls(Type, &S) && canBePreempted(&S);
if (Type == R_386_TLS_GOTIE || Type == R_386_TLS_IE)
return !canRelaxTls(Type, &S);
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index bd24dcf..cf22b10 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -268,7 +268,7 @@
return true;
}
- if (!Body || !Body->isTls())
+ if (!Body || !Body->IsTls)
return false;
if (Target->isTlsGlobalDynamicRel(Type)) {
@@ -424,7 +424,7 @@
if (CBP || Dynrel) {
uint32_t DynType;
if (CBP)
- DynType = Body->isTls() ? Target->TlsGotRel : Target->GotRel;
+ DynType = Body->IsTls ? Target->TlsGotRel : Target->GotRel;
else
DynType = Target->RelativeRel;
Out<ELFT>::RelaDyn->addReloc(