diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-15 16:33:49 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-15 16:33:49 +0000 |
commit | 94ed5fca3f5ab5acb74e70b8393b837131e7110c (patch) | |
tree | 79053512e8b0511e949ea49b90be108d19f234b1 /lib/MC/MCExpr.cpp | |
parent | d3443e99e43945fdb0742177da06a32fa225740d (diff) |
Change MCExpr::EvaluateAsRelocatableImpl of variables to return the original
variable if recursing fails to simplify it.
Factor AliasedSymbol to be a method of MCSymbol.
Update MCAssembler::EvaluateFixup to match the change in
EvaluateAsRelocatableImpl.
Remove the WeakRefExpr hack, as the object writer now sees the weakref with
no extra effort needed.
Nothing else is using MCTargetExpr, but keep it for now.
Now that the ELF writer sees relocations with aliases, handle
.weak foo2
foo2:
.weak bar2
.set bar2,foo2
.quad bar2
the same way gas does and produce a relocation with bar2.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119152 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCExpr.cpp')
-rw-r--r-- | lib/MC/MCExpr.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/MC/MCExpr.cpp b/lib/MC/MCExpr.cpp index b1617ecc5e..eea736e559 100644 --- a/lib/MC/MCExpr.cpp +++ b/lib/MC/MCExpr.cpp @@ -336,9 +336,14 @@ bool MCExpr::EvaluateAsRelocatableImpl(MCValue &Res, const MCSymbol &Sym = SRE->getSymbol(); // Evaluate recursively if this is a variable. - if (Sym.isVariable() && SRE->getKind() == MCSymbolRefExpr::VK_None) - return Sym.getVariableValue()->EvaluateAsRelocatableImpl(Res, Layout, - true); + if (Sym.isVariable() && SRE->getKind() == MCSymbolRefExpr::VK_None) { + bool Ret = Sym.getVariableValue()->EvaluateAsRelocatableImpl(Res, Layout, + true); + // If we failed to simplify this to a constant, let the target + // handle it. + if (Ret && !Res.getSymA() && !Res.getSymB()) + return true; + } Res = MCValue::get(SRE, 0, 0); return true; |