brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 77fd0e5 Raw
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