Skip to content

Commit 91ea511

Browse files
committed
MachOWriter: Don't crash on fixups with arithmetic, emit a relocation instead. This matches what as does.
llvm-svn: 137414
1 parent 69c158f commit 91ea511

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

llvm/lib/MC/MachObjectWriter.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -595,9 +595,13 @@ IsSymbolRefDifferenceFullyResolvedImpl(const MCAssembler &Asm,
595595
return false;
596596
}
597597

598-
const MCFragment &FA = *Asm.getSymbolData(SA).getFragment();
598+
const MCFragment *FA = Asm.getSymbolData(SA).getFragment();
599599

600-
A_Base = FA.getAtom();
600+
// Bail if the symbol has no fragment.
601+
if (!FA)
602+
return false;
603+
604+
A_Base = FA->getAtom();
601605
if (!A_Base)
602606
return false;
603607

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// RUN: llvm-mc -triple x86_64-apple-darwin10 %s -filetype=obj -o - | macho-dump | FileCheck %s
2+
3+
// rdar://9906375
4+
.org 0x100
5+
_foo:
6+
_bar = _foo + 2
7+
_baz:
8+
leaq _bar(%rip), %rcx
9+
10+
// CHECK: ('_relocations', [
11+
// CHECK-NEXT: # Relocation 0
12+
// CHECK-NEXT: (('word-0', 0x103),
13+
// CHECK-NEXT: ('word-1', 0x1d000001))
14+
15+
// CHECK: # Symbol 1
16+
// CHECK-NEXT: (('n_strx', 6)
17+
// CHECK-NEXT: ('n_type', 0xe)
18+
// CHECK-NEXT: ('n_sect', 1)
19+
// CHECK-NEXT: ('n_desc', 0)
20+
// CHECK-NEXT: ('n_value', 258)
21+
// CHECK-NEXT: ('_string', '_bar')

0 commit comments

Comments
 (0)