MC/Mach-O: PCrel relocations weren't using the right base address, they are

relative to the fragment address, not its offset. This was masked by the text
section normally being at address 0.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98420 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2010-03-13 02:38:00 +00:00
parent 5e6a7a248b
commit da3e9f760c
2 changed files with 15 additions and 1 deletions

View File

@ -1024,7 +1024,7 @@ bool MCAssembler::EvaluateFixup(const MCAsmLayout &Layout, MCAsmFixup &Fixup,
}
if (IsPCRel)
Value -= DF->getOffset() + Fixup.Offset;
Value -= DF->getAddress() + Fixup.Offset;
return IsResolved;
}

View File

@ -0,0 +1,14 @@
// RUN: llvm-mc -n -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump --dump-section-data | FileCheck %s
// CHECK: # Relocation 0
// CHECK: (('word-0', 0x1),
// CHECK: ('word-1', 0x5000002)),
// CHECK-NEXT: ])
// CHECK: ('_section_data', '\xe8\xfb\xff\xff\xff')
.data
.long 0
.text
_a:
call _a