[llvm] r339007 - ARM-MachO: don't add Thumb bit for addend to non-external relocation.

Tim Northover via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 6 04:32:44 PDT 2018


Author: tnorthover
Date: Mon Aug  6 04:32:44 2018
New Revision: 339007

URL: http://llvm.org/viewvc/llvm-project?rev=339007&view=rev
Log:
ARM-MachO: don't add Thumb bit for addend to non-external relocation.

ld64 supplies its own Thumb bit for Thumb functions, and intentionally zeroes
out that part of any addend in an object file. But it only does that for
symbols marked N_EXT -- i.e. external symbols. So LLVM should avoid setting
that extra bit in other cases.

Added:
    llvm/trunk/test/MC/ARM/macho-reloc-thumb-local.s
Modified:
    llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
    llvm/trunk/test/MC/ARM/macho-word-reloc-thumb.s

Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp?rev=339007&r1=339006&r2=339007&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp (original)
+++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp Mon Aug  6 04:32:44 2018
@@ -373,6 +373,7 @@ unsigned ARMAsmBackend::adjustFixupValue
   // interfere with checking valid expressions.
   if (const MCSymbolRefExpr *A = Target.getSymA()) {
     if (A->hasSubsectionsViaSymbols() && Asm.isThumbFunc(&A->getSymbol()) &&
+        A->getSymbol().isExternal() &&
         (Kind == FK_Data_4 || Kind == ARM::fixup_arm_movw_lo16 ||
          Kind == ARM::fixup_arm_movt_hi16 || Kind == ARM::fixup_t2_movw_lo16 ||
          Kind == ARM::fixup_t2_movt_hi16))

Added: llvm/trunk/test/MC/ARM/macho-reloc-thumb-local.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/macho-reloc-thumb-local.s?rev=339007&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/macho-reloc-thumb-local.s (added)
+++ llvm/trunk/test/MC/ARM/macho-reloc-thumb-local.s Mon Aug  6 04:32:44 2018
@@ -0,0 +1,21 @@
+@ RUN: llvm-mc -triple thumbv6m-apple-macho %s -filetype=obj -o %t
+@ RUN: llvm-objdump -macho -section=__DATA,__data %t | FileCheck %s
+
+@ CHECK: 00000000 00000003
+        .data
+        .align 2
+        .global _foo
+_foo:
+        .long _bar
+        .long _baz
+
+        .text
+        .thumb_func _bar
+        .weak_definition _bar
+_bar:
+        bx lr
+
+        .thumb_func _baz
+        .global _baz
+ _baz:
+        bx lr

Modified: llvm/trunk/test/MC/ARM/macho-word-reloc-thumb.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/macho-word-reloc-thumb.s?rev=339007&r1=339006&r2=339007&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/macho-word-reloc-thumb.s (original)
+++ llvm/trunk/test/MC/ARM/macho-word-reloc-thumb.s Mon Aug  6 04:32:44 2018
@@ -23,6 +23,7 @@ Lconstpool:
         .end_data_region
 
         .thumb_func _bar
+        .global _bar
 _bar:
         bx lr
 




More information about the llvm-commits mailing list