[llvm-commits] [llvm] r137414 - in /llvm/trunk: lib/MC/MachObjectWriter.cpp test/MC/MachO/x86_64-reloc-arithmetic.s
Benjamin Kramer
benny.kra at googlemail.com
Thu Aug 11 18:51:29 PDT 2011
Author: d0k
Date: Thu Aug 11 20:51:29 2011
New Revision: 137414
URL: http://llvm.org/viewvc/llvm-project?rev=137414&view=rev
Log:
MachOWriter: Don't crash on fixups with arithmetic, emit a relocation instead. This matches what as does.
Added:
llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s
Modified:
llvm/trunk/lib/MC/MachObjectWriter.cpp
Modified: llvm/trunk/lib/MC/MachObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MachObjectWriter.cpp?rev=137414&r1=137413&r2=137414&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MachObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/MachObjectWriter.cpp Thu Aug 11 20:51:29 2011
@@ -595,9 +595,13 @@
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;
Added: llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s?rev=137414&view=auto
==============================================================================
--- llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s (added)
+++ llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s Thu Aug 11 20:51:29 2011
@@ -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')
More information about the llvm-commits
mailing list