diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-03-27 00:28:24 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-03-27 00:28:24 +0000 |
commit | a041ef1bd8905f0d58e301c6830b183002ff1847 (patch) | |
tree | ded1b281e300a226655f1d349904910ff07bef57 /llvm/lib/MC | |
parent | 6373e70f81c167c7f9dd8ecc4ef5c6e7b47685bb (diff) | |
download | bcm5719-llvm-a041ef1bd8905f0d58e301c6830b183002ff1847.tar.gz bcm5719-llvm-a041ef1bd8905f0d58e301c6830b183002ff1847.zip |
Correctly propagates st_size.
This also finally removes a bogus call to AliasedSymbol.
llvm-svn: 204883
Diffstat (limited to 'llvm/lib/MC')
-rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index 7c2135b2487..277716c89b4 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -609,9 +609,6 @@ static const MCSymbol *getBaseSymbol(const MCAsmLayout &Layout, void ELFObjectWriter::WriteSymbol(SymbolTableWriter &Writer, ELFSymbolData &MSD, const MCAsmLayout &Layout) { MCSymbolData &OrigData = *MSD.SymbolData; - MCSymbolData &Data = - Layout.getAssembler().getSymbolData(OrigData.getSymbol().AliasedSymbol()); - const MCSymbol *Base = getBaseSymbol(Layout, OrigData.getSymbol()); // This has to be in sync with when computeSymbolTable uses SHN_ABS or @@ -621,9 +618,10 @@ void ELFObjectWriter::WriteSymbol(SymbolTableWriter &Writer, ELFSymbolData &MSD, // Binding and Type share the same byte as upper and lower nibbles uint8_t Binding = MCELF::GetBinding(OrigData); uint8_t Type = MCELF::GetType(OrigData); + MCSymbolData *BaseSD = nullptr; if (Base) { - MCSymbolData BaseSD = Layout.getAssembler().getSymbolData(*Base); - Type = mergeTypeForSet(Type, MCELF::GetType(BaseSD)); + BaseSD = &Layout.getAssembler().getSymbolData(*Base); + Type = mergeTypeForSet(Type, MCELF::GetType(*BaseSD)); } if (OrigData.getFlags() & ELF_Other_ThumbFunc) Type = ELF::STT_FUNC; @@ -640,9 +638,10 @@ void ELFObjectWriter::WriteSymbol(SymbolTableWriter &Writer, ELFSymbolData &MSD, Value |= 1; uint64_t Size = 0; - assert(!(Data.isCommon() && !Data.isExternal())); + const MCExpr *ESize = OrigData.getSize(); + if (!ESize && Base) + ESize = BaseSD->getSize(); - const MCExpr *ESize = Data.getSize(); if (ESize) { int64_t Res; if (!ESize->EvaluateAsAbsolute(Res, Layout)) |