aboutsummaryrefslogtreecommitdiffstats
path: root/test/ExecutionEngine/RuntimeDyld/ARM/MachO_ARM_PIC_relocations.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/ExecutionEngine/RuntimeDyld/ARM/MachO_ARM_PIC_relocations.s')
-rw-r--r--test/ExecutionEngine/RuntimeDyld/ARM/MachO_ARM_PIC_relocations.s51
1 files changed, 51 insertions, 0 deletions
diff --git a/test/ExecutionEngine/RuntimeDyld/ARM/MachO_ARM_PIC_relocations.s b/test/ExecutionEngine/RuntimeDyld/ARM/MachO_ARM_PIC_relocations.s
new file mode 100644
index 0000000..7ff3a89
--- /dev/null
+++ b/test/ExecutionEngine/RuntimeDyld/ARM/MachO_ARM_PIC_relocations.s
@@ -0,0 +1,51 @@
+# RUN: llvm-mc -triple=armv7s-apple-ios7.0.0 -relocation-model=pic -filetype=obj -o %T/foo.o %s
+# RUN: llvm-rtdyld -triple=armv7s-apple-ios7.0.0 -verify -check=%s %/T/foo.o
+
+ .syntax unified
+ .section __TEXT,__text,regular,pure_instructions
+ .globl bar
+ .align 2
+bar:
+# Check lower 16-bits of section difference relocation
+# rtdyld-check: decode_operand(insn1, 1) = (foo$non_lazy_ptr-(nextPC+8))[15:0]
+insn1:
+ movw r0, :lower16:(foo$non_lazy_ptr-(nextPC+8))
+# Check upper 16-bits of section difference relocation
+# rtdyld-check: decode_operand(insn2, 2) = (foo$non_lazy_ptr-(nextPC+8))[31:16]
+insn2:
+ movt r0, :upper16:(foo$non_lazy_ptr-(nextPC+8))
+nextPC:
+ add r1, r0, r0
+
+# Check stub generation for external symbols by referencing a common symbol, 'baz'.
+# Check both the content of the stub, and the reference to the stub.
+# Stub should contain '0xe51ff004' (ldr pc, [pc, #-4]), followed by the target.
+#
+# rtdyld-check: *{4}(stub_addr(foo.o, __text, baz)) = 0xe51ff004
+# rtdyld-check: *{4}(stub_addr(foo.o, __text, baz) + 4) = baz
+#
+# rtdyld-check: decode_operand(insn3, 0) = stub_addr(foo.o, __text, baz) - (insn3 + 8)
+insn3:
+ bl baz
+
+# Check stub generation for internal symbols by referencing 'bar'.
+# rtdyld-check: *{4}(stub_addr(foo.o, __text, bar) + 4) = bar
+insn4:
+ bl bar
+ 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
+ .comm foo, 4, 2
+
+# Check that the symbol pointer section entries are fixed up properly:
+# rtdyld-check: *{4}foo$non_lazy_ptr = foo
+ .section __DATA,__nl_symbol_ptr,non_lazy_symbol_pointers
+ .align 2
+foo$non_lazy_ptr:
+ .indirect_symbol foo
+ .long 0
+
+.subsections_via_symbols