MachOWriter: Don't crash on fixups with arithmetic, emit a relocation instead. This matches what as does.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137414 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2011-08-12 01:51:29 +00:00
parent b43b09eef5
commit 0d46ccfc5c
2 changed files with 27 additions and 2 deletions

View File

@ -595,9 +595,13 @@ IsSymbolRefDifferenceFullyResolvedImpl(const MCAssembler &Asm,
return false;
}
const MCFragment &FA = *Asm.getSymbolData(SA).getFragment();
const MCFragment *FA = Asm.getSymbolData(SA).getFragment();
A_Base = FA.getAtom();
// Bail if the symbol has no fragment.
if (!FA)
return false;
A_Base = FA->getAtom();
if (!A_Base)
return false;

View File

@ -0,0 +1,21 @@
// RUN: llvm-mc -triple x86_64-apple-darwin10 %s -filetype=obj -o - | macho-dump | FileCheck %s
// rdar://9906375
.org 0x100
_foo:
_bar = _foo + 2
_baz:
leaq _bar(%rip), %rcx
// CHECK: ('_relocations', [
// CHECK-NEXT: # Relocation 0
// CHECK-NEXT: (('word-0', 0x103),
// CHECK-NEXT: ('word-1', 0x1d000001))
// CHECK: # Symbol 1
// CHECK-NEXT: (('n_strx', 6)
// CHECK-NEXT: ('n_type', 0xe)
// CHECK-NEXT: ('n_sect', 1)
// CHECK-NEXT: ('n_desc', 0)
// CHECK-NEXT: ('n_value', 258)
// CHECK-NEXT: ('_string', '_bar')