aboutsummaryrefslogtreecommitdiff
path: root/lib/MC/ELFObjectWriter.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-10-28 19:08:03 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-10-28 19:08:03 +0000
commit29129728f1d4febe44792d1481077cc47fe83a08 (patch)
tree438d58c99ea41adb171887f6ef0d9415173f23b2 /lib/MC/ELFObjectWriter.cpp
parent57ca3ccd455160e30e727ef53122c82edf3c6b50 (diff)
Fix relocations with renamed symbols.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117575 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/ELFObjectWriter.cpp')
-rw-r--r--lib/MC/ELFObjectWriter.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp
index ef2901d749..813e4ac259 100644
--- a/lib/MC/ELFObjectWriter.cpp
+++ b/lib/MC/ELFObjectWriter.cpp
@@ -644,13 +644,14 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
int Index = 0;
int64_t Value = Target.getConstant();
const MCSymbol *Symbol = 0;
+ const MCSymbol *Renamed = 0;
bool IsPCRel = isFixupKindX86PCRel(Fixup.getKind());
if (!Target.isAbsolute()) {
Symbol = &AliasedSymbol(Target.getSymA()->getSymbol());
- const MCSymbol *Renamed = Renames.lookup(Symbol);
- if (Renamed)
- Symbol = Renamed;
+ Renamed = Renames.lookup(Symbol);
+ if (!Renamed)
+ Renamed = Symbol;
MCSymbolData &SD = Asm.getSymbolData(*Symbol);
MCFragment *F = SD.getFragment();
@@ -685,7 +686,7 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
// Offset of the symbol in the section
Value += Layout.getSymbolAddress(&SD) - Layout.getSectionAddress(FSD);
} else {
- UsedInReloc.insert(Symbol);
+ UsedInReloc.insert(Renamed);
Index = -1;
}
Addend = Value;
@@ -833,7 +834,7 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
ERE.Index = Index;
ERE.Type = Type;
- ERE.Symbol = Symbol;
+ ERE.Symbol = Renamed;
ERE.r_offset = Layout.getFragmentOffset(Fragment) + Fixup.getOffset();