mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-27 16:17:17 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136905 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -447,18 +447,8 @@ void ELFObjectWriter::RecordRelocation(const MCAssembler &Asm,
|
|||||||
|
|
||||||
uint64_t RelocOffset = Layout.getFragmentOffset(Fragment) +
|
uint64_t RelocOffset = Layout.getFragmentOffset(Fragment) +
|
||||||
Fixup.getOffset();
|
Fixup.getOffset();
|
||||||
#if 0
|
|
||||||
// TODO: This is necessary on PPC32 but it must be implemented
|
adjustFixupOffset(Fixup, RelocOffset);
|
||||||
// in a different way.
|
|
||||||
switch ((unsigned)Fixup.getKind()) {
|
|
||||||
case PPC::fixup_ppc_ha16:
|
|
||||||
case PPC::fixup_ppc_lo16:
|
|
||||||
RelocOffset += 2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!hasRelocationAddend())
|
if (!hasRelocationAddend())
|
||||||
Addend = 0;
|
Addend = 0;
|
||||||
@@ -1583,6 +1573,18 @@ unsigned PPCELFObjectWriter::GetRelocType(const MCValue &Target,
|
|||||||
return Type;
|
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::MBlazeELFObjectWriter(MCELFObjectTargetWriter *MOTW,
|
MBlazeELFObjectWriter::MBlazeELFObjectWriter(MCELFObjectTargetWriter *MOTW,
|
||||||
|
@@ -347,6 +347,7 @@ class ELFObjectWriter : public MCObjectWriter {
|
|||||||
virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
||||||
bool IsPCRel, bool IsRelocWithSymbol,
|
bool IsPCRel, bool IsRelocWithSymbol,
|
||||||
int64_t Addend) = 0;
|
int64_t Addend) = 0;
|
||||||
|
virtual void adjustFixupOffset(const MCFixup &Fixup, uint64_t &RelocOffset) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
//===- X86ELFObjectWriter -------------------------------------------===//
|
//===- X86ELFObjectWriter -------------------------------------------===//
|
||||||
@@ -408,6 +409,7 @@ class ELFObjectWriter : public MCObjectWriter {
|
|||||||
virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
||||||
bool IsPCRel, bool IsRelocWithSymbol,
|
bool IsPCRel, bool IsRelocWithSymbol,
|
||||||
int64_t Addend);
|
int64_t Addend);
|
||||||
|
virtual void adjustFixupOffset(const MCFixup &Fixup, uint64_t &RelocOffset);
|
||||||
};
|
};
|
||||||
|
|
||||||
//===- MBlazeELFObjectWriter -------------------------------------------===//
|
//===- MBlazeELFObjectWriter -------------------------------------------===//
|
||||||
|
Reference in New Issue
Block a user