mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-30 22:18:46 +00:00
Fix a bug in darwin's 32-bit X86 handling of evaluating fixups.
Where it would use a scattered relocation entry but falls back to a normal relocation entry because the FixupOffset is more than 24-bits. The bug is in the X86MachObjectWriter::RecordScatteredRelocation() where it changes reference parameter FixedValue but then returns false to indicate it did not create a scattered relocation entry. The fix is simply to save the original value of the parameter FixedValue at the start of the method and restore it if we are returning false in that case. rdar://15526046 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196432 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -362,6 +362,7 @@ bool X86MachObjectWriter::RecordScatteredRelocation(MachObjectWriter *Writer,
|
||||
MCValue Target,
|
||||
unsigned Log2Size,
|
||||
uint64_t &FixedValue) {
|
||||
uint64_t OriginalFixedValue = FixedValue;
|
||||
uint32_t FixupOffset = Layout.getFragmentOffset(Fragment)+Fixup.getOffset();
|
||||
unsigned IsPCRel = Writer->isFixupKindPCRel(Asm, Fixup.getKind());
|
||||
unsigned Type = MachO::GENERIC_RELOC_VANILLA;
|
||||
@@ -431,8 +432,10 @@ bool X86MachObjectWriter::RecordScatteredRelocation(MachObjectWriter *Writer,
|
||||
// symbol, things can go badly.
|
||||
//
|
||||
// Required for 'as' compatibility.
|
||||
if (FixupOffset > 0xffffff)
|
||||
if (FixupOffset > 0xffffff) {
|
||||
FixedValue = OriginalFixedValue;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
MachO::any_relocation_info MRE;
|
||||
|
Reference in New Issue
Block a user