96 lines · plain
1# REQUIRES: hexagon2# RUN: rm -rf %t && split-file %s %t && cd %t3# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf main.s -o main.o4# RUN: ld.lld -shared main.o -o test.so5# RUN: llvm-objdump -d --no-show-raw-insn test.so | FileCheck %s6 7## Test thunk range scenarios for Hexagon R_HEX_GD_PLT_B22_PCREL relocations.8## Same ±8MB range as regular calls.9 10#--- main.s11.globl _start12.type _start, @function13_start:14 ## Setup for TLS Global Dynamic calls15 r2 = add(pc,##_GLOBAL_OFFSET_TABLE_@PCREL)16 17 ## Test TLS GD PLT calls18 r0 = add(r2,##tls_var_close@GDGOT)19 call tls_var_close@GDPLT20 21 r0 = add(r2,##tls_var_far@GDGOT)22 call tls_var_far@GDPLT23 24 jumpr r3125 26.skip 0x40000027 28more_code:29 r0 = add(r2,##tls_var_distant@GDGOT)30 call tls_var_distant@GDPLT31 jumpr r3132 33## TLS variables in .tdata section34.section .tdata,"awT",@progbits35.globl tls_var_close, tls_var_far, tls_var_distant36.type tls_var_close, @object37.type tls_var_far, @object38.type tls_var_distant, @object39 40tls_var_close:41 .word 0x123442 43tls_var_far:44 .word 0x567845 46tls_var_distant:47 .word 0x9abc48 49# CHECK: Disassembly of section .text:50# CHECK: <_start>:51# CHECK-NEXT: 102d4: { immext(#0x420100)52# CHECK-NEXT: r2 = add(pc,##0x420130) }53# CHECK-NEXT: { immext(#0xfffeffc0)54# CHECK-NEXT: r0 = add(r2,##-0x10018) }55# CHECK-NEXT: { call 0x410360 <__tls_get_addr@plt> }56# CHECK-NEXT: { immext(#0xfffeffc0)57# CHECK-NEXT: r0 = add(r2,##-0x10010) }58# CHECK-NEXT: { call 0x410360 <__tls_get_addr@plt> }59# CHECK-NEXT: { jumpr r31 }60 61# CHECK: <more_code>:62# CHECK-NEXT: 4102f8: { immext(#0xfffeffc0)63# CHECK-NEXT: r0 = add(r2,##-0x10008) }64# CHECK-NEXT: { call 0x410360 <__tls_get_addr@plt> }65# CHECK-NEXT: { jumpr r31 }66 67## Verify PLT entries are created for TLS68# CHECK: Disassembly of section .plt:69# CHECK: <.plt>:70# CHECK-NEXT: 410310: { immext(#0x200c0)71# CHECK-NEXT: r28 = add(pc,##0x200f4) }72# CHECK-NEXT: { r14 -= add(r28,#0x10)73# CHECK-NEXT: r15 = memw(r28+#0x8)74# CHECK-NEXT: r28 = memw(r28+#0x4) }75# CHECK-NEXT: { r14 = asr(r14,#0x2)76# CHECK-NEXT: jumpr r28 }77# CHECK-NEXT: { trap0(#0xdb) }78 79# CHECK: <tls_var_far@plt>:80# CHECK-NEXT: 410340: { immext(#0x200c0)81# CHECK-NEXT: r14 = add(pc,##0x200d8) }82# CHECK-NEXT: { r28 = memw(r14+#0x0) }83# CHECK-NEXT: { jumpr r28 }84 85# CHECK: <tls_var_distant@plt>:86# CHECK-NEXT: 410350: { immext(#0x200c0)87# CHECK-NEXT: r14 = add(pc,##0x200cc) }88# CHECK-NEXT: { r28 = memw(r14+#0x0) }89# CHECK-NEXT: { jumpr r28 }90 91# CHECK: <__tls_get_addr@plt>:92# CHECK-NEXT: 410360: { immext(#0x200c0)93# CHECK-NEXT: r14 = add(pc,##0x200c0) }94# CHECK-NEXT: { r28 = memw(r14+#0x0) }95# CHECK-NEXT: { jumpr r28 }96