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.

llvm-svn: 98420
This commit is contained in:
Daniel Dunbar 2010-03-13 02:38:00 +00:00
parent 322fec671b
commit 34b8e553ea
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