[MCJIT] Take the relocation addend into account when applying ARM MachO VANILLA
authorLang Hames <lhames@gmail.com>
Thu, 11 Sep 2014 17:27:01 +0000 (17:27 +0000)
committerLang Hames <lhames@gmail.com>
Thu, 11 Sep 2014 17:27:01 +0000 (17:27 +0000)
and BR24 relocations.

<rdar://problem/18296496>

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

lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOARM.h
test/ExecutionEngine/RuntimeDyld/ARM/MachO_ARM_PIC_relocations.s

index e29b8dc5091496675cb8090d2ad669daa08f7663..dc8acfef5b7dc666b4b5f44f629f371895a495fc 100644 (file)
@@ -101,12 +101,13 @@ public:
     default:
       llvm_unreachable("Invalid relocation type!");
     case MachO::ARM_RELOC_VANILLA:
-      writeBytesUnaligned(Value, LocalAddress, 1 << RE.Size);
+      writeBytesUnaligned(Value + RE.Addend, LocalAddress, 1 << RE.Size);
       break;
     case MachO::ARM_RELOC_BR24: {
       // Mask the value into the target address. We know instructions are
       // 32-bit aligned, so we can do it all at once.
       uint32_t *p = (uint32_t *)LocalAddress;
+      Value += RE.Addend;
       // The low two bits of the value are not encoded.
       Value >>= 2;
       // Mask the value to 24 bits.
index d0d30271f0d85d59c59d312e398aca7e6109f2fa..2dc776cd4479dcefb71dc343c443a67bc2b43db6 100644 (file)
@@ -34,6 +34,9 @@ insn3:
 foo:
        bx      lr
 
+# Add 'aaa' to the common symbols to make sure 'baz' isn't at the start of the
+# section. This ensures that we test VANILLA relocation addends correctly.
+        .comm   aaa, 4, 2
         .comm   baz, 4, 2
 
 .subsections_via_symbols