mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-29 22:30:33 +00:00
Don't include an invalid symbol in the symbol table.
The symbol table itself has no relocations, so it is not possible to represent things like a = undefined + 1 With the patch we just omit these variables. That matches the behaviour of the gnu assembler. llvm-svn: 207419
This commit is contained in:
parent
001cd50325
commit
4d0ea07e27
@ -107,7 +107,7 @@ class ELFObjectWriter : public MCObjectWriter {
|
||||
static bool isFixupKindPCRel(const MCAssembler &Asm, unsigned Kind);
|
||||
static bool RelocNeedsGOT(MCSymbolRefExpr::VariantKind Variant);
|
||||
static uint64_t SymbolValue(MCSymbolData &Data, const MCAsmLayout &Layout);
|
||||
static bool isInSymtab(const MCAssembler &Asm, const MCSymbolData &Data,
|
||||
static bool isInSymtab(const MCAsmLayout &Layout, const MCSymbolData &Data,
|
||||
bool Used, bool Renamed);
|
||||
static bool isLocal(const MCSymbolData &Data, bool isSignature,
|
||||
bool isUsedInReloc);
|
||||
@ -934,9 +934,9 @@ ELFObjectWriter::getSymbolIndexInSymbolTable(const MCAssembler &Asm,
|
||||
return SD.getIndex();
|
||||
}
|
||||
|
||||
bool ELFObjectWriter::isInSymtab(const MCAssembler &Asm,
|
||||
const MCSymbolData &Data,
|
||||
bool Used, bool Renamed) {
|
||||
bool ELFObjectWriter::isInSymtab(const MCAsmLayout &Layout,
|
||||
const MCSymbolData &Data, bool Used,
|
||||
bool Renamed) {
|
||||
const MCSymbol &Symbol = Data.getSymbol();
|
||||
if (Symbol.isVariable()) {
|
||||
const MCExpr *Expr = Symbol.getVariableValue();
|
||||
@ -955,9 +955,11 @@ bool ELFObjectWriter::isInSymtab(const MCAssembler &Asm,
|
||||
if (Symbol.getName() == "_GLOBAL_OFFSET_TABLE_")
|
||||
return true;
|
||||
|
||||
const MCSymbol &A = Symbol.AliasedSymbol();
|
||||
if (Symbol.isVariable() && !A.isVariable() && A.isUndefined())
|
||||
return false;
|
||||
if (Symbol.isVariable()) {
|
||||
const MCSymbol *Base = getBaseSymbol(Layout, Symbol);
|
||||
if (Base && Base->isUndefined())
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsGlobal = MCELF::GetBinding(Data) == ELF::STB_GLOBAL;
|
||||
if (!Symbol.isVariable() && Symbol.isUndefined() && !IsGlobal)
|
||||
@ -1059,7 +1061,7 @@ ELFObjectWriter::computeSymbolTable(MCAssembler &Asm, const MCAsmLayout &Layout,
|
||||
bool WeakrefUsed = WeakrefUsedInReloc.count(&Symbol);
|
||||
bool isSignature = RevGroupMap.count(&Symbol);
|
||||
|
||||
if (!isInSymtab(Asm, SD,
|
||||
if (!isInSymtab(Layout, SD,
|
||||
Used || WeakrefUsed || isSignature,
|
||||
Renames.count(&Symbol)))
|
||||
continue;
|
||||
|
@ -19,6 +19,9 @@
|
||||
.text
|
||||
movsd .Lsym8(%rip), %xmm1
|
||||
|
||||
test2_a = undef
|
||||
test2_b = undef + 1
|
||||
|
||||
// CHECK: Symbols [
|
||||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: (0)
|
||||
|
Loading…
Reference in New Issue
Block a user