[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