249 lines · plain
1# REQUIRES: ppc2 3# RUN: split-file %s %t4 5# RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/asm -o %t.o6# RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/defs -o %t-defs.o7# RUN: ld.lld --shared %t-defs.o --soname=t-defs -o %t-defs.so8# RUN: ld.lld -T %t/lds %t.o %t-defs.so -o %t-ie9# RUN: ld.lld -T %t/lds %t.o %t-defs.o -o %t-le10 11# RUN: llvm-readelf -r %t-ie | FileCheck %s --check-prefix=IE-RELOC12# RUN: llvm-readelf -s %t-ie | FileCheck %s --check-prefix=IE-SYM13# RUN: llvm-readelf -x .got %t-ie | FileCheck %s --check-prefix=IE-GOT14# RUN: llvm-objdump -d --no-show-raw-insn %t-ie | FileCheck %s --check-prefix=IE15 16# RUN: llvm-readelf -r %t-le | FileCheck %s --check-prefix=LE-RELOC17# RUN: llvm-readelf -s %t-le | FileCheck %s --check-prefix=LE-SYM18# RUN: llvm-readelf -x .got %t-le 2>&1 | FileCheck %s --check-prefix=LE-GOT19# RUN: llvm-objdump -d --no-show-raw-insn %t-le | FileCheck %s --check-prefix=LE20 21## This test checks the Initial Exec PC Relative TLS implementation.22## The IE version checks that the relocations are generated correctly.23## The LE version checks that the Initial Exec to Local Exec relaxation is24## done correctly.25 26#--- lds27SECTIONS {28 .text_addr 0x1001000 : { *(.text_addr) }29 .text_val 0x1002000 : { *(.text_val) }30 .text_twoval 0x1003000 : { *(.text_twoval) }31 .text_incrval 0x1004000 : { *(.text_incrval) }32 .text_incrval_half 0x1005000 : { *(.text_incrval_half) }33 .text_incrval_word 0x1006000 : { *(.text_incrval_word) }34 .text_incrval_float 0x1007000 : { *(.text_incrval_float) }35 .text_incrval_double 0x1008000 : { *(.text_incrval_double) }36 .text_incrval_dword 0x1009000 : { *(.text_incrval_dword) }37 .text_incrval_half_zero 0x1010000 : { *(.text_incrval_half_zero) }38}39 40#--- defs41.section .tbss,"awT",@nobits42.globl x43x:44 .long 045.globl y46y:47 .long 048 49#--- asm50# IE-RELOC: Relocation section '.rela.dyn' at offset 0x10090 contains 2 entries:51# IE-RELOC: 00000000010100f0 0000000100000049 R_PPC64_TPREL64 0000000000000000 x + 052# IE-RELOC-NEXT: 00000000010100f8 0000000200000049 R_PPC64_TPREL64 0000000000000000 y + 053 54# IE-SYM: Symbol table '.dynsym' contains 3 entries:55# IE-SYM: 1: 0000000000000000 0 TLS GLOBAL DEFAULT UND x56# IE-SYM: 2: 0000000000000000 0 TLS GLOBAL DEFAULT UND y57 58# IE-GOT: Hex dump of section '.got':59# IE-GOT-NEXT: 0x010100e8 e8800101 00000000 00000000 0000000060 61# LE-RELOC: There are no relocations in this file.62 63# LE-SYM: Symbol table '.symtab' contains 14 entries:64# LE-SYM: 0000000000000000 0 TLS GLOBAL DEFAULT [[#]] x65# LE-SYM: 0000000000000004 0 TLS GLOBAL DEFAULT [[#]] y66 67# LE-GOT: could not find section '.got'68 69# IE-LABEL: <IEAddr>:70# IE-NEXT: pld 3, 61680(0), 171# IE-NEXT: add 3, 3, 1372# IE-NEXT: blr73# LE-LABEL: <IEAddr>:74# LE-NEXT: paddi 3, 13, -28672, 075# LE-NEXT: nop76# LE-NEXT: blr77.section .text_addr, "ax", %progbits78IEAddr:79 pld 3, x@got@tprel@pcrel(0), 180 add 3, 3, x@tls@pcrel81 blr82 83# IE-LABEL: <IEAddrCopy>:84# IE-NEXT: pld 3, 61664(0), 185# IE-NEXT: add 4, 3, 1386# IE-NEXT: blr87# LE-LABEL: <IEAddrCopy>:88# LE-NEXT: paddi 3, 13, -28672, 089# LE-NEXT: mr 4, 390# LE-NEXT: blr91.section .text_addr, "ax", %progbits92IEAddrCopy:93 pld 3, x@got@tprel@pcrel(0), 194 add 4, 3, x@tls@pcrel95 blr96 97# IE-LABEL: <IEVal>:98# IE-NEXT: pld 3, 57584(0), 199# IE-NEXT: lwzx 3, 3, 13100# IE-NEXT: blr101# LE-LABEL: <IEVal>:102# LE-NEXT: paddi 3, 13, -28672, 0103# LE-NEXT: lwz 3, 0(3)104# LE-NEXT: blr105.section .text_val, "ax", %progbits106IEVal:107 pld 3, x@got@tprel@pcrel(0), 1108 lwzx 3, 3, x@tls@pcrel109 blr110 111# IE-LABEL: <IETwoVal>:112# IE-NEXT: pld 3, 53488(0), 1113# IE-NEXT: pld 4, 53488(0), 1114# IE-NEXT: lwzx 3, 3, 13115# IE-NEXT: lwzx 4, 4, 13116# IE-NEXT: blr117# LE-LABEL: <IETwoVal>:118# LE-NEXT: paddi 3, 13, -28672, 0119# LE-NEXT: paddi 4, 13, -28668, 0120# LE-NEXT: lwz 3, 0(3)121# LE-NEXT: lwz 4, 0(4)122# LE-NEXT: blr123.section .text_twoval, "ax", %progbits124IETwoVal:125 pld 3, x@got@tprel@pcrel(0), 1126 pld 4, y@got@tprel@pcrel(0), 1127 lwzx 3, 3, x@tls@pcrel128 lwzx 4, 4, y@tls@pcrel129 blr130 131# IE-LABEL: <IEIncrementVal>:132# IE-NEXT: pld 4, 49400(0), 1133# IE-NEXT: lwzx 3, 4, 13134# IE-NEXT: stwx 3, 4, 13135# IE-NEXT: blr136# LE-LABEL: <IEIncrementVal>:137# LE-NEXT: paddi 4, 13, -28668, 0138# LE-NEXT: lwz 3, 0(4)139# LE-NEXT: stw 3, 0(4)140# LE-NEXT: blr141.section .text_incrval, "ax", %progbits142IEIncrementVal:143 pld 4, y@got@tprel@pcrel(0), 1144 lwzx 3, 4, y@tls@pcrel145 stwx 3, 4, y@tls@pcrel146 blr147 148# IE-LABEL: <IEIncrementValHalf>:149# IE-NEXT: pld 4, 45304(0), 1150# IE-NEXT: lhax 3, 4, 13151# IE-NEXT: sthx 3, 4, 13152# IE-NEXT: blr153# LE-LABEL: <IEIncrementValHalf>:154# LE-NEXT: paddi 4, 13, -28668, 0155# LE-NEXT: lha 3, 0(4)156# LE-NEXT: sth 3, 0(4)157# LE-NEXT: blr158.section .text_incrval_half, "ax", %progbits159IEIncrementValHalf:160 pld 4, y@got@tprel@pcrel(0), 1161 lhax 3, 4, y@tls@pcrel162 sthx 3, 4, y@tls@pcrel163 blr164 165# IE-LABEL: <IEIncrementValWord>:166# IE-NEXT: pld 4, 41208(0), 1167# IE-NEXT: lwax 3, 4, 13168# IE-NEXT: stwx 3, 4, 13169# IE-NEXT: blr170# LE-LABEL: <IEIncrementValWord>:171# LE-NEXT: paddi 4, 13, -28668, 0172# LE-NEXT: lwa 3, 0(4)173# LE-NEXT: stw 3, 0(4)174# LE-NEXT: blr175.section .text_incrval_word, "ax", %progbits176IEIncrementValWord:177 pld 4, y@got@tprel@pcrel(0), 1178 lwax 3, 4, y@tls@pcrel179 stwx 3, 4, y@tls@pcrel180 blr181 182# IE-LABEL: <IEIncrementValFloat>:183# IE-NEXT: pld 4, 37112(0), 1184# IE-NEXT: lfsx 3, 4, 13185# IE-NEXT: stfsx 3, 4, 13186# IE-NEXT: blr187# LE-LABEL: <IEIncrementValFloat>:188# LE-NEXT: paddi 4, 13, -28668, 0189# LE-NEXT: lfs 3, 0(4)190# LE-NEXT: stfs 3, 0(4)191# LE-NEXT: blr192.section .text_incrval_float, "ax", %progbits193IEIncrementValFloat:194 pld 4, y@got@tprel@pcrel(0), 1195 lfsx 3, 4, y@tls@pcrel196 stfsx 3, 4, y@tls@pcrel197 blr198 199# IE-LABEL: <IEIncrementValDouble>:200# IE-NEXT: pld 4, 33016(0), 1201# IE-NEXT: lfdx 3, 4, 13202# IE-NEXT: stfdx 3, 4, 13203# IE-NEXT: blr204# LE-LABEL: <IEIncrementValDouble>:205# LE-NEXT: paddi 4, 13, -28668, 0206# LE-NEXT: lfd 3, 0(4)207# LE-NEXT: stfd 3, 0(4)208# LE-NEXT: blr209.section .text_incrval_double, "ax", %progbits210IEIncrementValDouble:211 pld 4, y@got@tprel@pcrel(0), 1212 lfdx 3, 4, y@tls@pcrel213 stfdx 3, 4, y@tls@pcrel214 blr215 216# IE-LABEL: <IEIncrementValDword>:217# IE-NEXT: pld 4, 28920(0), 1218# IE-NEXT: ldx 3, 4, 13219# IE-NEXT: stdx 3, 4, 13220# IE-NEXT: blr221# LE-LABEL: <IEIncrementValDword>:222# LE-NEXT: paddi 4, 13, -28668, 0223# LE-NEXT: ld 3, 0(4)224# LE-NEXT: std 3, 0(4)225# LE-NEXT: blr226.section .text_incrval_dword, "ax", %progbits227IEIncrementValDword:228 pld 4, y@got@tprel@pcrel(0), 1229 ldx 3, 4, y@tls@pcrel230 stdx 3, 4, y@tls@pcrel231 blr232 233# IE-LABEL: <IEIncrementValHalfZero>:234# IE-NEXT: pld 4, 248(0), 1235# IE-NEXT: lhzx 3, 4, 13236# IE-NEXT: sthx 3, 4, 13237# IE-NEXT: blr238# LE-LABEL: <IEIncrementValHalfZero>:239# LE-NEXT: paddi 4, 13, -28668, 0240# LE-NEXT: lhz 3, 0(4)241# LE-NEXT: sth 3, 0(4)242# LE-NEXT: blr243.section .text_incrval_half_zero, "ax", %progbits244IEIncrementValHalfZero:245 pld 4, y@got@tprel@pcrel(0), 1246 lhzx 3, 4, y@tls@pcrel247 sthx 3, 4, y@tls@pcrel248 blr249