Remove Size from Undefined symbol.
There seems to be no reason to keep st_size of undefined symbols. This patch removes the member for it. This patch will change outputs in cases that undefined symbols are copied to output, but I think this is unimportant. Differential Revision: http://reviews.llvm.org/D19574 llvm-svn: 267826
This commit is contained in:
parent
f10237b689
commit
62ee16faa8
|
@ -316,8 +316,7 @@ SymbolBody *elf::ObjectFile<ELFT>::createSymbolBody(const Elf_Sym *Sym) {
|
|||
InputSectionBase<ELFT> *Sec = getSection(*Sym);
|
||||
if (Binding == STB_LOCAL) {
|
||||
if (Sym->st_shndx == SHN_UNDEF)
|
||||
return new (Alloc)
|
||||
Undefined(Sym->st_name, Sym->st_other, Sym->getType(), Sym->st_size);
|
||||
return new (Alloc) Undefined(Sym->st_name, Sym->st_other, Sym->getType());
|
||||
return new (Alloc) DefinedRegular<ELFT>(*Sym, Sec);
|
||||
}
|
||||
|
||||
|
@ -325,9 +324,8 @@ SymbolBody *elf::ObjectFile<ELFT>::createSymbolBody(const Elf_Sym *Sym) {
|
|||
|
||||
switch (Sym->st_shndx) {
|
||||
case SHN_UNDEF:
|
||||
return new (Alloc)
|
||||
Undefined(Name, Binding, Sym->st_other, Sym->getType(), Sym->st_size,
|
||||
/*IsBitcode*/ false);
|
||||
return new (Alloc) Undefined(Name, Binding, Sym->st_other, Sym->getType(),
|
||||
/*IsBitcode*/ false);
|
||||
case SHN_COMMON:
|
||||
return new (Alloc) DefinedCommon(Name, Sym->st_size, Sym->st_value, Binding,
|
||||
Sym->st_other, Sym->getType());
|
||||
|
@ -340,9 +338,8 @@ SymbolBody *elf::ObjectFile<ELFT>::createSymbolBody(const Elf_Sym *Sym) {
|
|||
case STB_WEAK:
|
||||
case STB_GNU_UNIQUE:
|
||||
if (Sec == &InputSection<ELFT>::Discarded)
|
||||
return new (Alloc)
|
||||
Undefined(Name, Binding, Sym->st_other, Sym->getType(), Sym->st_size,
|
||||
/*IsBitcode*/ false);
|
||||
return new (Alloc) Undefined(Name, Binding, Sym->st_other, Sym->getType(),
|
||||
/*IsBitcode*/ false);
|
||||
return new (Alloc) DefinedRegular<ELFT>(Name, *Sym, Sec);
|
||||
}
|
||||
}
|
||||
|
@ -548,14 +545,14 @@ BitcodeFile::createBody(const DenseSet<const Comdat *> &KeptComdats,
|
|||
if (const Comdat *C = GV->getComdat())
|
||||
if (!KeptComdats.count(C)) {
|
||||
Body = new (Alloc) Undefined(NameRef, Binding, Visibility, /*Type*/ 0,
|
||||
/*Size*/ 0, /*IsBitcode*/ true);
|
||||
/*IsBitcode*/ true);
|
||||
return Body;
|
||||
}
|
||||
|
||||
const Module &M = Obj.getModule();
|
||||
if (Flags & BasicSymbolRef::SF_Undefined)
|
||||
return new (Alloc) Undefined(NameRef, Binding, Visibility, /*Type*/ 0,
|
||||
/*Size*/ 0, /*IsBitcode*/ true);
|
||||
/*IsBitcode*/ true);
|
||||
if (Flags & BasicSymbolRef::SF_Common) {
|
||||
// FIXME: Set SF_Common flag correctly for module asm symbols, and expose
|
||||
// size and alignment.
|
||||
|
|
|
@ -150,9 +150,8 @@ template <class ELFT> void SymbolTable<ELFT>::addCombinedLtoObject() {
|
|||
// Add an undefined symbol.
|
||||
template <class ELFT>
|
||||
SymbolBody *SymbolTable<ELFT>::addUndefined(StringRef Name) {
|
||||
auto *Sym = new (Alloc)
|
||||
Undefined(Name, STB_GLOBAL, STV_DEFAULT, /*Type*/ 0, /*Size*/ 0,
|
||||
/*IsBitcode*/ false);
|
||||
auto *Sym = new (Alloc) Undefined(Name, STB_GLOBAL, STV_DEFAULT, /*Type*/ 0,
|
||||
/*IsBitcode*/ false);
|
||||
resolve(Sym);
|
||||
return Sym;
|
||||
}
|
||||
|
|
|
@ -174,8 +174,6 @@ template <class ELFT> typename ELFT::uint SymbolBody::getSize() const {
|
|||
return DR->Size;
|
||||
if (const auto *S = dyn_cast<SharedSymbol<ELFT>>(this))
|
||||
return S->Sym.st_size;
|
||||
if (const auto *U = dyn_cast<Undefined>(this))
|
||||
return U->Size;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -232,16 +230,13 @@ bool DefinedBitcode::classof(const SymbolBody *S) {
|
|||
}
|
||||
|
||||
Undefined::Undefined(StringRef Name, uint8_t Binding, uint8_t StOther,
|
||||
uint8_t Type, uint64_t Size, bool IsBitcode)
|
||||
: SymbolBody(SymbolBody::UndefinedKind, Name, Binding, StOther, Type),
|
||||
Size(Size) {
|
||||
uint8_t Type, bool IsBitcode)
|
||||
: SymbolBody(SymbolBody::UndefinedKind, Name, Binding, StOther, Type) {
|
||||
this->IsUndefinedBitcode = IsBitcode;
|
||||
}
|
||||
|
||||
Undefined::Undefined(uint32_t NameOffset, uint8_t StOther, uint8_t Type,
|
||||
uint64_t Size)
|
||||
: SymbolBody(SymbolBody::UndefinedKind, NameOffset, StOther, Type),
|
||||
Size(Size) {
|
||||
Undefined::Undefined(uint32_t NameOffset, uint8_t StOther, uint8_t Type)
|
||||
: SymbolBody(SymbolBody::UndefinedKind, NameOffset, StOther, Type) {
|
||||
this->IsUndefinedBitcode = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -312,10 +312,8 @@ public:
|
|||
class Undefined : public SymbolBody {
|
||||
public:
|
||||
Undefined(StringRef Name, uint8_t Binding, uint8_t StOther, uint8_t Type,
|
||||
uint64_t Size, bool IsBitcode);
|
||||
Undefined(uint32_t NameOffset, uint8_t StOther, uint8_t Type, uint64_t Size);
|
||||
|
||||
uint64_t Size;
|
||||
bool IsBitcode);
|
||||
Undefined(uint32_t NameOffset, uint8_t StOther, uint8_t Type);
|
||||
|
||||
static bool classof(const SymbolBody *S) {
|
||||
return S->kind() == UndefinedKind;
|
||||
|
|
|
@ -309,7 +309,7 @@
|
|||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: UndefWeak_with_UndefWeak
|
||||
// CHECK-NEXT: Value: 0x0
|
||||
// CHECK-NEXT: Size: 15
|
||||
// CHECK-NEXT: Size: 0
|
||||
// CHECK-NEXT: Binding: Weak
|
||||
// CHECK-NEXT: Type: None
|
||||
// CHECK-NEXT: Other: 0
|
||||
|
|
Loading…
Reference in New Issue