1# REQUIRES: ppc 2# RUN: split-file %s %t 3 4# RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/asm -o %t.o 5# RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/defs -o %t-defs.o 6# RUN: ld.lld --shared %t-defs.o --soname=t-defs -o %t-defs.so 7# RUN: ld.lld -T %t/lds --shared %t.o -o %t-gd.so 8# RUN: ld.lld -T %t/lds %t.o %t-defs.so -o %t-gdtoie 9# RUN: ld.lld -T %t/lds %t.o %t-defs.o -o %t-gdtole 10 11# RUN: llvm-readelf -r %t-gd.so | FileCheck %s --check-prefix=GD-RELOC 12# RUN: llvm-readelf -s %t-gd.so | FileCheck %s --check-prefix=GD-SYM 13# RUN: llvm-objdump -d --no-show-raw-insn --mcpu=pwr10 %t-gd.so | FileCheck %s --check-prefix=GD 14 15# RUN: llvm-readelf -r %t-gdtoie | FileCheck %s --check-prefix=GDTOIE-RELOC 16# RUN: llvm-readelf -s %t-gdtoie | FileCheck %s --check-prefix=GDTOIE-SYM 17# RUN: llvm-objdump -d --no-show-raw-insn --mcpu=pwr10 %t-gdtoie | FileCheck %s --check-prefix=GDTOIE 18 19# RUN: llvm-readelf -r %t-gdtole | FileCheck %s --check-prefix=GDTOLE-RELOC 20# RUN: llvm-readelf -s %t-gdtole | FileCheck %s --check-prefix=GDTOLE-SYM 21# RUN: llvm-objdump -d --no-show-raw-insn --mcpu=pwr10 %t-gdtole | FileCheck %s --check-prefix=GDTOLE 22 23## This test checks the General Dynamic PC Relative TLS implementation for lld. 24## GD - General Dynamic with no relaxation possible 25## GDTOIE - General Dynamic relaxed to Initial Exec 26## GDTOLE - General Dynamic relaxed to Local Exec 27 28#--- lds 29SECTIONS { 30 .text_addr 0x1001000 : { *(.text_addr) } 31} 32 33#--- defs 34.section .tbss,"awT",@nobits 35.globl x 36x: 37 .long 0 38.globl y 39y: 40 .long 0 41 42#--- asm 43 44# GD-RELOC: Relocation section '.rela.dyn' at offset 0x100b8 contains 4 entries: 45# GD-RELOC: 0000000001001160 0000000200000044 R_PPC64_DTPMOD64 0000000000000000 x + 0 46# GD-RELOC: 0000000001001168 000000020000004e R_PPC64_DTPREL64 0000000000000000 x + 0 47# GD-RELOC: 0000000001001170 0000000300000044 R_PPC64_DTPMOD64 0000000000000000 y + 0 48# GD-RELOC: 0000000001001178 000000030000004e R_PPC64_DTPREL64 0000000000000000 y + 0 49 50# GD-SYM: Symbol table '.dynsym' contains 4 entries: 51# GD-SYM: 2: 0000000000000000 0 TLS GLOBAL DEFAULT UND x 52# GD-SYM: 3: 0000000000000000 0 TLS GLOBAL DEFAULT UND y 53 54 55# GDTOIE-RELOC: Relocation section '.rela.dyn' at offset 0x{{.*}} contains 2 entries: 56# GDTOIE-RELOC: 00000000010010e0 0000000200000049 R_PPC64_TPREL64 0000000000000000 x + 0 57# GDTOIE-RELOC: 00000000010010e8 0000000300000049 R_PPC64_TPREL64 0000000000000000 y + 0 58 59# GDTOIE-SYM: Symbol table '.dynsym' contains 4 entries: 60# GDTOIE-SYM: 2: 0000000000000000 0 TLS GLOBAL DEFAULT UND x 61# GDTOIE-SYM: 3: 0000000000000000 0 TLS GLOBAL DEFAULT UND y 62 63 64# GDTOLE-RELOC: There are no relocations in this file. 65 66# GDTOLE-SYM: Symbol table '.symtab' contains 5 entries: 67# GDTOLE-SYM: 3: 0000000000000000 0 TLS GLOBAL DEFAULT 3 x 68# GDTOLE-SYM: 4: 0000000000000004 0 TLS GLOBAL DEFAULT 3 y 69 70# GD-LABEL: <GDTwoVal>: 71# GD-NEXT: paddi 3, 0, 352, 1 72# GD-NEXT: bl 73# GD-NEXT: paddi 3, 0, 356, 1 74# GD-NEXT: bl 75# GD-NEXT: blr 76# GDTOIE-LABEL: <GDTwoVal>: 77# GDTOIE-NEXT: pld 3, 224(0), 1 78# GDTOIE-NEXT: add 3, 3, 13 79# GDTOIE-NEXT: pld 3, 220(0), 1 80# GDTOIE-NEXT: add 3, 3, 13 81# GDTOIE-NEXT: blr 82# GDTOLE-LABEL: <GDTwoVal>: 83# GDTOLE-NEXT: paddi 3, 13, -28672, 0 84# GDTOLE-NEXT: nop 85# GDTOLE-NEXT: paddi 3, 13, -28668, 0 86# GDTOLE-NEXT: nop 87# GDTOLE-NEXT: blr 88.section .text_addr, "ax", %progbits 89GDTwoVal: 90 paddi 3, 0, x@got@tlsgd@pcrel, 1 91 bl __tls_get_addr@notoc(x@tlsgd) 92 paddi 3, 0, y@got@tlsgd@pcrel, 1 93 bl __tls_get_addr@notoc(y@tlsgd) 94 blr 95