178 lines · plain
1// RUN: llvm-mc -triple=powerpc64le-pc-linux -filetype=obj %s -o - | \2// RUN: llvm-readobj -r - | FileCheck %s3 4// RUN: llvm-mc -triple=powerpc64-pc-linux -filetype=obj %s -o - | \5// RUN: llvm-readobj -r - | FileCheck %s6 7// Verify we can handle all the dtprel symbol modifiers for local-dynamic tls.8// Tests a 16 bit offset on both DS-form and D-form instructions, 32 bit9// adjusted and non-adjusted offsets, and 64 bit adjusted and non-adjusted10// offsets.11 .text12 .abiversion 213 14 .globl short_offset15 .p2align 416 .type short_offset,@function17short_offset:18.Lfunc_gep0:19 addis 2, 12, .TOC.-.Lfunc_gep0@ha20 addi 2, 2, .TOC.-.Lfunc_gep0@l21.Lfunc_lep0:22.localentry short_offset, .Lfunc_lep0-.Lfunc_gep023 mflr 024 std 0, 16(1)25 stdu 1, -32(1)26 addis 3, 2, i@got@tlsld@ha27 addi 3, 3, i@got@tlsld@l28 bl __tls_get_addr(i@tlsld)29 nop30 lwa 4, i@dtprel(3)31 addi 5, 3, i@dtprel32 lwa 3, 0(5)33 add 3, 4, 334 addi 1, 1, 3235 ld 0, 16(1)36 mtlr 037 blr38 39 .globl medium_offset40 .p2align 441 .type medium_offset,@function42medium_offset:43.Lfunc_gep1:44 addis 2, 12, .TOC.-.Lfunc_gep1@ha45 addi 2, 2, .TOC.-.Lfunc_gep1@l46.Lfunc_lep1:47 .localentry medium_offset, .Lfunc_lep1-.Lfunc_gep148 mflr 049 std 0, 16(1)50 stdu 1, -32(1)51 addis 3, 2, i@got@tlsld@ha52 addi 3, 3, i@got@tlsld@l53 bl __tls_get_addr(i@tlsld)54 nop55 addis 3, 3, i@dtprel@ha56 lwa 3, i@dtprel@l(3)57 addi 1, 1, 3258 ld 0, 16(1)59 mtlr 060 blr61 62 .globl medium_not_adjusted63 .p2align 464 .type medium_not_adjusted,@function65medium_not_adjusted:66.Lfunc_gep2:67 addis 2, 12, .TOC.-.Lfunc_gep2@ha68 addi 2, 2, .TOC.-.Lfunc_gep2@l69.Lfunc_lep2:70 .localentry medium_not_adjusted, .Lfunc_lep2-.Lfunc_gep271 mflr 072 std 0, 16(1)73 stdu 1, -32(1)74 addis 3, 2, i@got@tlsld@ha75 addi 3, 3, i@got@tlsld@l76 bl __tls_get_addr(i@tlsld)77 nop78 lis 4, i@dtprel@h79 ori 4, 4, i@dtprel@l80 add 3, 3, 481 addi 1, 1, 3282 ld 0, 16(1)83 mtlr 084 blr85 86 .globl large_offset87 .p2align 488 .type large_offset,@function89large_offset:90.Lfunc_gep3:91 addis 2, 12, .TOC.-.Lfunc_gep3@ha92 addi 2, 2, .TOC.-.Lfunc_gep3@l93.Lfunc_lep3:94 .localentry large_offset, .Lfunc_lep3-.Lfunc_gep395 mflr 096 std 0, 16(1)97 stdu 1, -32(1)98 addis 3, 2, i@got@tlsld@ha99 addi 3, 3, i@got@tlsld@l100 bl __tls_get_addr(i@tlsld)101 nop102 lis 4, i@dtprel@highesta103 ori 4, 4, i@dtprel@highera104 sldi 4, 4, 32105 addis 4, 4, i@dtprel@higha106 addi 4, 4, i@dtprel@l107 lwax 3, 4, 3108 addi 1, 1, 32109 ld 0, 16(1)110 mtlr 0111 blr112 113 .globl not_adjusted114 .p2align 4115 .type not_adjusted,@function116not_adjusted:117.Lfunc_gep4:118 addis 2, 12, .TOC.-.Lfunc_gep4@ha119 addi 2, 2, .TOC.-.Lfunc_gep4@l120.Lfunc_lep4:121 .localentry not_adjusted, .Lfunc_lep4-.Lfunc_gep4122 mflr 0123 std 0, 16(1)124 stdu 1, -32(1)125 addis 3, 2, i@got@tlsld@ha126 addi 3, 3, i@got@tlsld@l127 bl __tls_get_addr(i@tlsld)128 nop129 lis 4, i@dtprel@highest130 ori 4, 4, i@dtprel@higher131 sldi 4, 4, 32132 oris 4, 4, i@dtprel@high133 ori 4, 4, i@dtprel@l134 lwax 3, 4, 3135 addi 1, 1, 32136 ld 0, 16(1)137 mtlr 0138 blr139 140 .type i,@object141 .section .tdata,"awT",@progbits142 .p2align 2143i:144 .long 55145 .size i, 4146 147 .type j,@object148 .data149 .p2align 3150j:151 .quad i@dtprel152 .size j, 8153 154# CHECK: Relocations [155# CHECK: Section {{.*}} .rela.text {156# CHECK: 0x{{[0-9A-F]+}} R_PPC64_GOT_TLSLD16_HA i157# CHECK: 0x{{[0-9A-F]+}} R_PPC64_GOT_TLSLD16_LO i158# CHECK: 0x{{[0-9A-F]+}} R_PPC64_TLSLD i159# CHECK: 0x{{[0-9A-F]+}} R_PPC64_REL24 __tls_get_addr160# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_DS i161# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16 i162# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_HA i163# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_LO_DS i164# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_HI i165# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_HIGHESTA i166# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_HIGHERA i167# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_HIGHA i168# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_LO i169# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_HIGHEST i170# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_HIGHER i171# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_HIGH i172# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL16_LO i173# CHECK: }174# CHECK: Section {{.*}} .rela.data {175# CHECK: 0x{{[0-9A-F]+}} R_PPC64_DTPREL64 i176# CHECK: }177# CHECK: ]178