Fixed a bug in getARMFixupKindMachOInfo() where three ARM fixup kinds
authorKevin Enderby <enderby@apple.com>
Fri, 13 Dec 2013 22:46:54 +0000 (22:46 +0000)
committerKevin Enderby <enderby@apple.com>
Fri, 13 Dec 2013 22:46:54 +0000 (22:46 +0000)
were falling into the cases for 24-bit branch kinds which are not 24-bit
branches.  The routine is to return false for fixups are expected to always
be resolvable at assembly time. Which these three fixups are as they have
limited displacement and are for local references within a function.

rdar://15586725

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197282 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
test/MC/MachO/ARM/bad-darwin-ARM-reloc.s [new file with mode: 0644]

index 1f681bac22424ae841aa8d043fddbbc11815a5c4..4ef18b4298b3ccb45e257b45b465826ab4d47517 100644 (file)
@@ -82,10 +82,14 @@ static bool getARMFixupKindMachOInfo(unsigned Kind, unsigned &RelocType,
     Log2Size = llvm::Log2_32(8);
     return true;
 
-    // Handle 24-bit branch kinds.
+    // These fixups are expected to always be resolvable at assembly time and
+    // have no relocations supported.
   case ARM::fixup_arm_ldst_pcrel_12:
   case ARM::fixup_arm_pcrel_10:
   case ARM::fixup_arm_adr_pcrel_12:
+    return false;
+
+    // Handle 24-bit branch kinds.
   case ARM::fixup_arm_condbranch:
   case ARM::fixup_arm_uncondbranch:
   case ARM::fixup_arm_uncondbl:
diff --git a/test/MC/MachO/ARM/bad-darwin-ARM-reloc.s b/test/MC/MachO/ARM/bad-darwin-ARM-reloc.s
new file mode 100644 (file)
index 0000000..7ad91df
--- /dev/null
@@ -0,0 +1,9 @@
+@ RUN: not llvm-mc -n -triple armv7-apple-darwin10 %s -filetype=obj -o - 2> %t.err > %t
+@ RUN: FileCheck --check-prefix=CHECK-ERROR < %t.err %s
+@ rdar://15586725
+.text
+    ldr r3, L___fcommon
+.section myseg, mysect
+L___fcommon: 
+    .word 0
+@ CHECK-ERROR: unsupported relocation on symbol