summaryrefslogtreecommitdiffstats
path: root/llvm/test/ExecutionEngine/RuntimeDyld
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2018-06-22 23:53:22 +0000
committerReid Kleckner <rnk@google.com>2018-06-22 23:53:22 +0000
commit330f65b3e8eb308c2501c381de37f9bd715d99eb (patch)
tree892282af7d73d9012481b910334d5c68c662fdd7 /llvm/test/ExecutionEngine/RuntimeDyld
parentef115de6290d10922f5f82d2e004532a337f2ec6 (diff)
downloadbcm5719-llvm-330f65b3e8eb308c2501c381de37f9bd715d99eb.tar.gz
bcm5719-llvm-330f65b3e8eb308c2501c381de37f9bd715d99eb.zip
[RuntimeDyld] Implement the ELF PIC large code model relocations
Prerequisite for https://reviews.llvm.org/D47211 which improves our ELF large PIC codegen. llvm-svn: 335402
Diffstat (limited to 'llvm/test/ExecutionEngine/RuntimeDyld')
-rw-r--r--llvm/test/ExecutionEngine/RuntimeDyld/X86/ELF-large-pic-relocations.s104
1 files changed, 104 insertions, 0 deletions
diff --git a/llvm/test/ExecutionEngine/RuntimeDyld/X86/ELF-large-pic-relocations.s b/llvm/test/ExecutionEngine/RuntimeDyld/X86/ELF-large-pic-relocations.s
new file mode 100644
index 00000000000..3cf244d8263
--- /dev/null
+++ b/llvm/test/ExecutionEngine/RuntimeDyld/X86/ELF-large-pic-relocations.s
@@ -0,0 +1,104 @@
+# RUN: rm -rf %t && mkdir -p %t && cd %t
+# RUN: llvm-mc -triple=x86_64-unknown-freebsd -filetype=obj -o t.o %s
+# RUN: llvm-rtdyld -triple=x86_64-unknown-linux -verify -check=%s t.o -dummy-extern=extern_data=0x4200000000
+
+# Generated from this C source:
+#
+# static int static_data[10];
+# int global_data[10] = {1, 2};
+# extern int extern_data[10];
+#
+# int *lea_static_data() { return &static_data[0]; }
+# int *lea_global_data() { return &global_data[0]; }
+# int *lea_extern_data() { return &extern_data[0]; }
+
+ .text
+ .file "model.c"
+ .globl lea_static_data # -- Begin function lea_static_data
+ .p2align 4, 0x90
+ .type lea_static_data,@function
+lea_static_data: # @lea_static_data
+ .cfi_startproc
+# %bb.0:
+.Ltmp0:
+ leaq .Ltmp0(%rip), %rcx
+# rtdyld-check: decode_operand(lea_static_got, 1) = section_addr(t.o, .got) - lea_static_data
+lea_static_got:
+ movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp0, %rax
+ addq %rax, %rcx
+# rtdyld-check: decode_operand(lea_static_gotoff, 1) = static_data - section_addr(t.o, .got)
+lea_static_gotoff:
+ movabsq $static_data@GOTOFF, %rax
+ addq %rcx, %rax
+ retq
+.Lfunc_end0:
+ .size lea_static_data, .Lfunc_end0-lea_static_data
+ .cfi_endproc
+
+
+ .globl lea_global_data # -- Begin function lea_global_data
+ .p2align 4, 0x90
+ .type lea_global_data,@function
+lea_global_data: # @lea_global_data
+ .cfi_startproc
+# %bb.0:
+.Ltmp1:
+ leaq .Ltmp1(%rip), %rcx
+# rtdyld-check: decode_operand(lea_global_got, 1) = section_addr(t.o, .got) - lea_global_data
+lea_global_got:
+ movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp1, %rax
+ addq %rax, %rcx
+# rtdyld-check: decode_operand(lea_global_gotoff, 1) = global_data - section_addr(t.o, .got)
+lea_global_gotoff:
+ movabsq $global_data@GOTOFF, %rax
+ addq %rcx, %rax
+ retq
+.Lfunc_end1:
+ .size lea_global_data, .Lfunc_end1-lea_global_data
+ .cfi_endproc
+
+
+ .globl lea_extern_data # -- Begin function lea_extern_data
+ .p2align 4, 0x90
+ .type lea_extern_data,@function
+lea_extern_data: # @lea_extern_data
+ .cfi_startproc
+# %bb.0:
+.Ltmp2:
+ leaq .Ltmp2(%rip), %rax
+# rtdyld-check: decode_operand(lea_extern_got, 1) = section_addr(t.o, .got) - lea_extern_data
+lea_extern_got:
+ movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp2, %rcx
+ addq %rcx, %rax
+# extern_data is the only thing in the GOT, so it'll be slot 0.
+# rtdyld-check: decode_operand(lea_extern_gotslot, 1) = 0
+lea_extern_gotslot:
+ movabsq $extern_data@GOT, %rcx
+ movq (%rax,%rcx), %rax
+ retq
+.Lfunc_end2:
+ .size lea_extern_data, .Lfunc_end2-lea_extern_data
+ .cfi_endproc
+
+
+ .type global_data,@object # @global_data
+ .data
+ .globl global_data
+ .p2align 4
+global_data:
+ .long 1 # 0x1
+ .long 2 # 0x2
+ .long 0 # 0x0
+ .long 0 # 0x0
+ .long 0 # 0x0
+ .long 0 # 0x0
+ .long 0 # 0x0
+ .long 0 # 0x0
+ .long 0 # 0x0
+ .long 0 # 0x0
+ .size global_data, 40
+
+ .type static_data,@object # @static_data
+ .local static_data
+ .comm static_data,40,16
+
OpenPOWER on IntegriCloud