forked from OSchip/llvm-project
Use a bit in SymbolBody to store CanKeepUndefined.
UndefinedElf for 64 bits goes from 72 to 64 bytes. llvm-svn: 265543
This commit is contained in:
parent
4eaeacec6d
commit
5e34568f79
|
@ -89,15 +89,14 @@ static typename ELFT::uint getSymVA(const SymbolBody &Body,
|
|||
|
||||
SymbolBody::SymbolBody(Kind K, uint32_t NameOffset, uint8_t StOther,
|
||||
uint8_t Type)
|
||||
: SymbolKind(K), MustBeInDynSym(false), NeedsCopyOrPltAddr(false),
|
||||
Type(Type), Binding(STB_LOCAL), StOther(StOther), NameOffset(NameOffset) {
|
||||
: SymbolKind(K), Type(Type), Binding(STB_LOCAL), StOther(StOther),
|
||||
NameOffset(NameOffset) {
|
||||
init();
|
||||
}
|
||||
|
||||
SymbolBody::SymbolBody(Kind K, StringRef Name, uint8_t Binding, uint8_t StOther,
|
||||
uint8_t Type)
|
||||
: SymbolKind(K), MustBeInDynSym(false), NeedsCopyOrPltAddr(false),
|
||||
Type(Type), Binding(Binding), StOther(StOther),
|
||||
: SymbolKind(K), Type(Type), Binding(Binding), StOther(StOther),
|
||||
Name({Name.data(), Name.size()}) {
|
||||
assert(!isLocal());
|
||||
init();
|
||||
|
@ -107,6 +106,9 @@ void SymbolBody::init() {
|
|||
Kind K = kind();
|
||||
IsUsedInRegularObj = K == DefinedRegularKind || K == DefinedCommonKind ||
|
||||
K == DefinedSyntheticKind || K == UndefinedElfKind;
|
||||
CanKeepUndefined = false;
|
||||
MustBeInDynSym = false;
|
||||
NeedsCopyOrPltAddr = false;
|
||||
}
|
||||
|
||||
// Returns true if a symbol can be replaced at load-time by a symbol
|
||||
|
@ -267,8 +269,9 @@ template <typename ELFT>
|
|||
UndefinedElf<ELFT>::UndefinedElf(StringRef Name, uint8_t Binding,
|
||||
uint8_t StOther, uint8_t Type,
|
||||
bool CanKeepUndefined)
|
||||
: SymbolBody(SymbolBody::UndefinedElfKind, Name, Binding, StOther, Type),
|
||||
CanKeepUndefined(CanKeepUndefined) {}
|
||||
: SymbolBody(SymbolBody::UndefinedElfKind, Name, Binding, StOther, Type) {
|
||||
this->CanKeepUndefined = CanKeepUndefined;
|
||||
}
|
||||
|
||||
template <typename ELFT>
|
||||
UndefinedElf<ELFT>::UndefinedElf(const Elf_Sym &Sym)
|
||||
|
|
|
@ -147,6 +147,8 @@ public:
|
|||
// symbol or if the symbol should point to its plt entry.
|
||||
unsigned NeedsCopyOrPltAddr : 1;
|
||||
|
||||
unsigned CanKeepUndefined : 1;
|
||||
|
||||
// The following fields have the same meaning as the ELF symbol attributes.
|
||||
uint8_t Type; // symbol type
|
||||
uint8_t Binding; // symbol binding
|
||||
|
@ -289,7 +291,6 @@ public:
|
|||
template <class ELFT> class UndefinedElf : public SymbolBody {
|
||||
typedef typename ELFT::uint uintX_t;
|
||||
typedef typename ELFT::Sym Elf_Sym;
|
||||
bool CanKeepUndefined = false;
|
||||
|
||||
public:
|
||||
UndefinedElf(StringRef N, const Elf_Sym &Sym);
|
||||
|
|
Loading…
Reference in New Issue