diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-22 16:03:00 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-22 16:03:00 +0000 |
commit | 73c0ae77caeeb6c644b082216ecc3b9e792c405a (patch) | |
tree | c5725184b624ae2daad981326bf795eaa4e794b6 /llvm/lib/MC/ELFObjectWriter.cpp | |
parent | 083132e1313e7bbbeeeeb88d0929bdd689260d8d (diff) | |
download | bcm5719-llvm-73c0ae77caeeb6c644b082216ecc3b9e792c405a.tar.gz bcm5719-llvm-73c0ae77caeeb6c644b082216ecc3b9e792c405a.zip |
Simplify the handling of .size expressions.
llvm-svn: 122404
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index bb523cefedc..b6e1223bc41 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -594,26 +594,15 @@ void ELFObjectWriter::WriteSymbol(MCDataFragment *SymtabF, uint64_t Value = SymbolValue(Data, Layout); uint64_t Size = 0; - const MCExpr *ESize; assert(!(Data.isCommon() && !Data.isExternal())); - ESize = Data.getSize(); - if (Data.getSize()) { - MCValue Res; - if (ESize->getKind() == MCExpr::Binary) { - const MCBinaryExpr *BE = static_cast<const MCBinaryExpr *>(ESize); - - if (BE->EvaluateAsRelocatable(Res, &Layout)) { - assert(!Res.getSymA() || !Res.getSymA()->getSymbol().isDefined()); - assert(!Res.getSymB() || !Res.getSymB()->getSymbol().isDefined()); - Size = Res.getConstant(); - } - } else if (ESize->getKind() == MCExpr::Constant) { - Size = static_cast<const MCConstantExpr *>(ESize)->getValue(); - } else { - assert(0 && "Unsupported size expression"); - } + const MCExpr *ESize = Data.getSize(); + if (ESize) { + int64_t Res; + if (!ESize->EvaluateAsAbsolute(Res, Layout)) + report_fatal_error("Size expression must be absolute."); + Size = Res; } // Write out the symbol table entry |