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 | f01212489be07e261a0302744f878a54a39f05a5 (patch) | |
tree | 3d88d356839182fddbbc47e33609273adfb12108 | |
parent | 4d74305a1f55f458d401a79db4deeed726567195 (diff) | |
download | external_llvm-f01212489be07e261a0302744f878a54a39f05a5.zip external_llvm-f01212489be07e261a0302744f878a54a39f05a5.tar.gz external_llvm-f01212489be07e261a0302744f878a54a39f05a5.tar.bz2 |
Simplify the handling of .size expressions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122404 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/MC/ELFObjectWriter.cpp | 23 | ||||
-rw-r--r-- | test/MC/ELF/size.s | 10 |
2 files changed, 6 insertions, 27 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index bb523ce..b6e1223 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/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 diff --git a/test/MC/ELF/size.s b/test/MC/ELF/size.s deleted file mode 100644 index ceb9486..0000000 --- a/test/MC/ELF/size.s +++ /dev/null @@ -1,10 +0,0 @@ -// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | elf-dump | FileCheck %s - -// Mostly a test that this doesn't crash anymore. - -// CHECK: # Symbol 0x00000004 -// CHECK-NEXT: (('st_name', 0x00000001) # 'foo' -// CHECK-NEXT: ('st_bind', 0x00000001) - - .size foo, .Lbar-foo - .long foo |