• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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