]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/ELF/mips-tls-64.s
Vendor import of lld trunk r290819:
[FreeBSD/FreeBSD.git] / test / ELF / mips-tls-64.s
1 # Check MIPS TLS 64-bit relocations handling.
2
3 # RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux \
4 # RUN:         %p/Inputs/mips-tls.s -o %t.so.o
5 # RUN: ld.lld -shared %t.so.o -o %t.so
6 # RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %s -o %t.o
7
8 # RUN: ld.lld %t.o %t.so -o %t.exe
9 # RUN: llvm-objdump -d -s -t %t.exe | FileCheck -check-prefix=DIS %s
10 # RUN: llvm-readobj -r -mips-plt-got %t.exe | FileCheck %s
11
12 # RUN: ld.lld -shared %t.o %t.so -o %t-out.so
13 # RUN: llvm-objdump -d -s -t %t-out.so | FileCheck -check-prefix=DIS-SO %s
14 # RUN: llvm-readobj -r -mips-plt-got %t-out.so | FileCheck -check-prefix=SO %s
15
16 # REQUIRES: mips
17
18 # DIS:      __start:
19 # DIS-NEXT:    20000:   24 62 80 20   addiu   $2, $3, -32736
20 # DIS-NEXT:    20004:   24 62 80 30   addiu   $2, $3, -32720
21 # DIS-NEXT:    20008:   24 62 80 38   addiu   $2, $3, -32712
22 # DIS-NEXT:    2000c:   24 62 80 48   addiu   $2, $3, -32696
23 # DIS-NEXT:    20010:   24 62 80 58   addiu   $2, $3, -32680
24
25 # DIS:      Contents of section .got:
26 # DIS-NEXT:  30008 00000000 00000000 80000000 00000000
27 # DIS-NEXT:  30018 00000000 00000000 00000000 00000000
28 # DIS-NEXT:  30028 00000000 00000000 00000000 00000001
29 # DIS-NEXT:  30038 00000000 00000000 00000000 00000001
30 # DIS-NEXT:  30048 ffffffff ffff8004 ffffffff ffff9004
31
32 # DIS: 0000000000030000 l       .tdata          00000000 .tdata
33 # DIS: 0000000000030000 l       .tdata          00000000 loc
34 # DIS: 0000000000000004 g       .tdata          00000000 bar
35 # DIS: 0000000000000000 g       *UND*           00000000 foo
36
37 # CHECK:      Relocations [
38 # CHECK-NEXT:   Section (7) .rela.dyn {
39 # CHECK-NEXT:     0x30018 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE foo 0x0
40 # CHECK-NEXT:     0x30020 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0
41 # CHECK-NEXT:     0x30028 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0
42 # CHECK-NEXT:   }
43 # CHECK-NEXT: ]
44 # CHECK-NEXT: Primary GOT {
45 # CHECK-NEXT:   Canonical gp value: 0x37FF8
46 # CHECK-NEXT:   Reserved entries [
47 # CHECK:        ]
48 # CHECK-NEXT:   Local entries [
49 # CHECK-NEXT:   ]
50 # CHECK-NEXT:   Global entries [
51 # CHECK-NEXT:   ]
52 # CHECK-NEXT:   Number of TLS and multi-GOT entries: 8
53 #               ^-- -32736 R_MIPS_TLS_GD       R_MIPS_TLS_DTPMOD64 foo
54 #               ^-- -32728                     R_MIPS_TLS_DTPREL64 foo
55 #               ^-- -32720 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL64  foo
56 #               ^-- -32712 R_MIPS_TLS_LDM      1 loc
57 #               ^-- -32704                     0 loc
58 #               ^-- -32696 R_MIPS_TLS_GD       1 bar
59 #               ^-- -32688                     VA - 0x8000 bar
60 #               ^-- -32680 R_MIPS_TLS_GOTTPREL VA - 0x7000 bar
61
62 # DIS-SO:      Contents of section .got:
63 # DIS-SO-NEXT:  20008 00000000 00000000 80000000 00000000
64 # DIS-SO-NEXT:  20018 00000000 00000000 00000000 00000000
65 # DIS-SO-NEXT:  20028 00000000 00000000 00000000 00000000
66 # DIS-SO-NEXT:  20038 00000000 00000000 00000000 00000000
67 # DIS-SO-NEXT:  20048 00000000 00000000 00000000 00000000
68
69 # SO:      Relocations [
70 # SO-NEXT:   Section (7) .rela.dyn {
71 # SO-NEXT:     0x20030 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE - 0x0
72 # SO-NEXT:     0x20040 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE bar 0x0
73 # SO-NEXT:     0x20048 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE bar 0x0
74 # SO-NEXT:     0x20050 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE bar 0x0
75 # SO-NEXT:     0x20018 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE foo 0x0
76 # SO-NEXT:     0x20020 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0
77 # SO-NEXT:     0x20028 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE foo 0x0
78 # SO-NEXT:   }
79 # SO-NEXT: ]
80 # SO-NEXT: Primary GOT {
81 # SO-NEXT:   Canonical gp value: 0x27FF8
82 # SO-NEXT:   Reserved entries [
83 # SO:        ]
84 # SO-NEXT:   Local entries [
85 # SO-NEXT:   ]
86 # SO-NEXT:   Global entries [
87 # SO-NEXT:   ]
88 # SO-NEXT:   Number of TLS and multi-GOT entries: 8
89 #            ^-- 0x20018 R_MIPS_TLS_GD       R_MIPS_TLS_DTPMOD64 foo
90 #            ^-- 0x20020                     R_MIPS_TLS_DTPREL64 foo
91 #            ^-- 0x20028 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL64  foo
92 #            ^-- 0x20030 R_MIPS_TLS_LDM      R_MIPS_TLS_DTPMOD64 loc
93 #            ^-- 0x20038                     0 loc
94 #            ^-- 0x20040 R_MIPS_TLS_GD       R_MIPS_TLS_DTPMOD64 bar
95 #            ^-- 0x20048                     R_MIPS_TLS_DTPREL64 bar
96 #            ^-- 0x20050 R_MIPS_TLS_GOTTPREL R_MIPS_TLS_TPREL64  bar
97
98   .text
99   .global  __start
100 __start:
101   addiu $2, $3, %tlsgd(foo)     # R_MIPS_TLS_GD
102   addiu $2, $3, %gottprel(foo)  # R_MIPS_TLS_GOTTPREL
103   addiu $2, $3, %tlsldm(loc)    # R_MIPS_TLS_LDM
104   addiu $2, $3, %tlsgd(bar)     # R_MIPS_TLS_GD
105   addiu $2, $3, %gottprel(bar)  # R_MIPS_TLS_GOTTPREL
106
107  .section .tdata,"awT",%progbits
108  .global bar
109 loc:
110  .word 0
111 bar:
112  .word 0