diff options
| author | Roman Divacky <rdivacky@freebsd.org> | 2011-08-04 19:08:19 +0000 |
|---|---|---|
| committer | Roman Divacky <rdivacky@freebsd.org> | 2011-08-04 19:08:19 +0000 |
| commit | dfbecd1eb7602c509fb906d486c042600ac2a249 (patch) | |
| tree | 347a50606e8b96fd9c97512e6d2d60c1ae3fb7a3 /llvm/lib/MC/ELFObjectWriter.cpp | |
| parent | fddf530c5d42712643281f2a9032aa00d8fda081 (diff) | |
| download | bcm5719-llvm-dfbecd1eb7602c509fb906d486c042600ac2a249.tar.gz bcm5719-llvm-dfbecd1eb7602c509fb906d486c042600ac2a249.zip | |
Introduce adjustFixupOffset that adjusts the fixup offset of a relocation.
This is meant to be overriden by backends. Implement an override on PowerPC
which adjusts the offset by 2 for ha16/lo16 relocation kinds. This removes
a commented out hack and enables hello world to be compiled on PowerPC.
llvm-svn: 136905
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
| -rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index 18fed21afc6..99a675d392f 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -447,18 +447,8 @@ void ELFObjectWriter::RecordRelocation(const MCAssembler &Asm, uint64_t RelocOffset = Layout.getFragmentOffset(Fragment) + Fixup.getOffset(); -#if 0 - // TODO: This is necessary on PPC32 but it must be implemented - // in a different way. - switch ((unsigned)Fixup.getKind()) { - case PPC::fixup_ppc_ha16: - case PPC::fixup_ppc_lo16: - RelocOffset += 2; - break; - default: - break; - } -#endif + + adjustFixupOffset(Fixup, RelocOffset); if (!hasRelocationAddend()) Addend = 0; @@ -1583,6 +1573,18 @@ unsigned PPCELFObjectWriter::GetRelocType(const MCValue &Target, return Type; } +void +PPCELFObjectWriter::adjustFixupOffset(const MCFixup &Fixup, uint64_t &RelocOffset) { + switch ((unsigned)Fixup.getKind()) { + case PPC::fixup_ppc_ha16: + case PPC::fixup_ppc_lo16: + RelocOffset += 2; + break; + default: + break; + } +} + //===- MBlazeELFObjectWriter -------------------------------------------===// MBlazeELFObjectWriter::MBlazeELFObjectWriter(MCELFObjectTargetWriter *MOTW, |

