mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-18 13:34:04 +00:00
MC/Mach-O: Don't generate relocations for PCrel fixups to local labels.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98080 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7b730425f
commit
e180fa962c
@ -440,7 +440,7 @@ public:
|
||||
DenseMap<const MCSymbol*,MCSymbolData*> &SymbolMap,
|
||||
std::vector<MachRelocationEntry> &Relocs) {
|
||||
uint32_t Address = Fragment.getOffset() + Fixup.Offset;
|
||||
unsigned IsPCRel = 0;
|
||||
unsigned IsPCRel = isFixupKindPCRel(Fixup.Kind);
|
||||
unsigned Log2Size = getFixupKindLog2Size(Fixup.Kind);
|
||||
unsigned Type = RIT_Vanilla;
|
||||
|
||||
@ -468,10 +468,16 @@ public:
|
||||
|
||||
// The value which goes in the fixup is current value of the expression.
|
||||
Fixup.FixedValue = Value - Value2 + Target.getConstant();
|
||||
if (isFixupKindPCRel(Fixup.Kind)) {
|
||||
if (IsPCRel)
|
||||
Fixup.FixedValue -= Address;
|
||||
IsPCRel = 1;
|
||||
}
|
||||
|
||||
// If this fixup is a vanilla PC relative relocation for a local label, we
|
||||
// don't need a relocation.
|
||||
//
|
||||
// FIXME: Implement proper atom support.
|
||||
if (IsPCRel && Target.getSymA() && Target.getSymA()->isTemporary() &&
|
||||
!Target.getSymB())
|
||||
return;
|
||||
|
||||
MachRelocationEntry MRE;
|
||||
MRE.Word0 = ((Address << 0) |
|
||||
@ -516,7 +522,7 @@ public:
|
||||
uint32_t Address = Fragment.getOffset() + Fixup.Offset;
|
||||
uint32_t Value = 0;
|
||||
unsigned Index = 0;
|
||||
unsigned IsPCRel = 0;
|
||||
unsigned IsPCRel = isFixupKindPCRel(Fixup.Kind);
|
||||
unsigned Log2Size = getFixupKindLog2Size(Fixup.Kind);
|
||||
unsigned IsExtern = 0;
|
||||
unsigned Type = 0;
|
||||
@ -554,11 +560,15 @@ public:
|
||||
|
||||
// The value which goes in the fixup is current value of the expression.
|
||||
Fixup.FixedValue = Value + Target.getConstant();
|
||||
|
||||
if (isFixupKindPCRel(Fixup.Kind)) {
|
||||
if (IsPCRel)
|
||||
Fixup.FixedValue -= Address;
|
||||
IsPCRel = 1;
|
||||
}
|
||||
|
||||
// If this fixup is a vanilla PC relative relocation for a local label, we
|
||||
// don't need a relocation.
|
||||
//
|
||||
// FIXME: Implement proper atom support.
|
||||
if (IsPCRel && Target.getSymA() && Target.getSymA()->isTemporary())
|
||||
return;
|
||||
|
||||
// struct relocation_info (8 bytes)
|
||||
MachRelocationEntry MRE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user