diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-10-16 18:23:53 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-10-16 18:23:53 +0000 |
commit | f230df9af4012f9510de664b6d62b128e26a5861 (patch) | |
tree | 459a596099278874a963dabafad21e27da5046eb /lib/MC/ELFObjectWriter.cpp | |
parent | cb2caf738023c0a03f5df1b909431129a16e2c54 (diff) |
Add a MCObjectFormat class so that code common to all targets that use a
single object format can be shared.
This also adds support for
mov zed+(bar-foo), %eax
on ELF and COFF targets.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116675 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | lib/MC/ELFObjectWriter.cpp | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index d249c92dad..5a4f89d8d7 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -472,22 +472,11 @@ void ELFObjectWriterImpl::WriteSymbol(MCDataFragment *F, ELFSymbolData &MSD, const MCBinaryExpr *BE = static_cast<const MCBinaryExpr *>(ESize); if (BE->EvaluateAsRelocatable(Res, &Layout)) { - uint64_t AddressA = 0; - uint64_t AddressB = 0; - const MCSymbol &SymA = Res.getSymA()->getSymbol(); - const MCSymbol &SymB = Res.getSymB()->getSymbol(); - - if (SymA.isDefined()) { - MCSymbolData &A = Layout.getAssembler().getSymbolData(SymA); - AddressA = Layout.getSymbolAddress(&A); - } - - if (SymB.isDefined()) { - MCSymbolData &B = Layout.getAssembler().getSymbolData(SymB); - AddressB = Layout.getSymbolAddress(&B); - } - - Size = AddressA - AddressB; + const llvm::MCSymbolRefExpr *A = Res.getSymA(); + const llvm::MCSymbolRefExpr *B = Res.getSymA(); + assert(!A || !A->getSymbol().isDefined()); + assert(!B || !B->getSymbol().isDefined()); + Size = Res.getConstant(); } } else if (ESize->getKind() == MCExpr::Constant) { Size = static_cast<const MCConstantExpr *>(ESize)->getValue(); |