aboutsummaryrefslogtreecommitdiff
path: root/lld/test/ELF/hexagon-tls-allocateaux-multiple.s
diff options
context:
space:
mode:
Diffstat (limited to 'lld/test/ELF/hexagon-tls-allocateaux-multiple.s')
-rw-r--r--lld/test/ELF/hexagon-tls-allocateaux-multiple.s36
1 files changed, 36 insertions, 0 deletions
diff --git a/lld/test/ELF/hexagon-tls-allocateaux-multiple.s b/lld/test/ELF/hexagon-tls-allocateaux-multiple.s
new file mode 100644
index 0000000..a77cc82
--- /dev/null
+++ b/lld/test/ELF/hexagon-tls-allocateaux-multiple.s
@@ -0,0 +1,36 @@
+# REQUIRES: hexagon
+# RUN: rm -rf %t && split-file %s %t && cd %t
+# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf a.s -o a.o
+# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf b.s -o b.o
+# RUN: ld.lld -shared a.o b.o -o out.so
+# RUN: llvm-readobj -r out.so | FileCheck --check-prefix=RELOC %s
+
+#--- a.s
+.globl _start
+.type _start, @function
+
+_start:
+ r2 = add(pc,##_GLOBAL_OFFSET_TABLE_@PCREL)
+ r0 = add(r2,##tls_var@GDGOT)
+ call tls_var@GDPLT
+ jumpr r31
+
+.section .tdata,"awT",@progbits
+.globl tls_var
+.type tls_var, @object
+tls_var:
+ .word 0x1234
+
+#--- b.s
+.globl other_func
+.type other_func, @function
+
+other_func:
+ ## Direct call to __tls_get_addr - this creates another path that may
+ ## try to allocate auxiliary data for the same symbol
+ call __tls_get_addr
+ jumpr r31
+
+# RELOC: Section ({{.*}}) .rela.plt {
+# RELOC: R_HEX_JMP_SLOT __tls_get_addr 0x0
+# RELOC: }