]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/elf/Mips/rel-dynamic-07.test
Vendor import of lld trunk r233088:
[FreeBSD/FreeBSD.git] / test / elf / Mips / rel-dynamic-07.test
1 # Conditions:
2 #   a) Linking a shared library.
3 #   b) There ars multiple R_MIPS_32 relocations with various targets.
4 # Check:
5 #   a) Emitting of R_MIPS_REL32 relocations.
6 #   b) There should be no R_MIPS_REL32 relocations for the _gp_disp symbol.
7 #
8 # RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
9 # RUN: lld -flavor gnu -target mipsel -shared -o %t1.so %t-so.o
10 # RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
11 # RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec \
12 # RUN:     -o %t2.so %t-o.o %t1.so
13 # RUN: llvm-readobj -dt -r -sections %t2.so | FileCheck %s
14
15 # CHECK:   Sections [
16 # CHECK:     Section {
17 # CHECK-NOT:   Name: .plt ({{[0-9]+}})
18
19 # CHECK:      Relocations [
20 # CHECK-NEXT:   Section (4) .rel.dyn {
21 # CHECK-NEXT:     0x2000 R_MIPS_REL32 T0 0x0
22 # CHECK-NEXT:     0x2000 R_MIPS_REL32 T4 0x0
23 # CHECK-NEXT:     0x2000 R_MIPS_REL32 D2 0x0
24 # CHECK-NEXT:     0x2004 R_MIPS_REL32 T1 0x0
25 # CHECK-NEXT:     0x2008 R_MIPS_REL32 T2 0x0
26 # CHECK-NEXT:     0x2004 R_MIPS_REL32 D0 0x0
27 # CHECK-NEXT:     0x2008 R_MIPS_REL32 D1 0x0
28 # CHECK-NEXT:     0x2004 R_MIPS_REL32 D4 0x0
29 # CHECK-NEXT:     0x2008 R_MIPS_REL32 U1 0x0
30 # CHECK-NEXT:   }
31 # CHECK-NEXT: ]
32
33 # CHECK:      DynamicSymbols [
34 # CHECK-NEXT:   Symbol {
35 # CHECK-NEXT:     Name: @ (0)
36 # CHECK-NEXT:     Value: 0x0
37 # CHECK-NEXT:     Size: 0
38 # CHECK-NEXT:     Binding: Local (0x0)
39 # CHECK-NEXT:     Type: None (0x0)
40 # CHECK-NEXT:     Other: 0
41 # CHECK-NEXT:     Section: Undefined (0x0)
42 # CHECK-NEXT:   }
43 # CHECK-NEXT:   Symbol {
44 # CHECK-NEXT:     Name: T0@ (1)
45 # CHECK-NEXT:     Value: 0x214
46 # CHECK-NEXT:     Size: 8
47 # CHECK-NEXT:     Binding: Global (0x1)
48 # CHECK-NEXT:     Type: Function (0x2)
49 # CHECK-NEXT:     Other: 0
50 # CHECK-NEXT:     Section: .text (0x5)
51 # CHECK-NEXT:   }
52 # CHECK-NEXT:   Symbol {
53 # CHECK-NEXT:     Name: T4@ (7)
54 # CHECK-NEXT:     Value: 0x0
55 # CHECK-NEXT:     Size: 0
56 # CHECK-NEXT:     Binding: Global (0x1)
57 # CHECK-NEXT:     Type: None (0x0)
58 # CHECK-NEXT:     Other: 0
59 # CHECK-NEXT:     Section: Undefined (0x0)
60 # CHECK-NEXT:   }
61 # CHECK-NEXT:   Symbol {
62 # CHECK-NEXT:     Name: D2@ (25)
63 # CHECK-NEXT:     Value: 0x0
64 # CHECK-NEXT:     Size: 4
65 # CHECK-NEXT:     Binding: Global (0x1)
66 # CHECK-NEXT:     Type: Object (0x1)
67 # CHECK-NEXT:     Other: 0
68 # CHECK-NEXT:     Section: Undefined (0x0)
69 # CHECK-NEXT:   }
70 # CHECK-NEXT:   Symbol {
71 # CHECK-NEXT:     Name: T1@ (16)
72 # CHECK-NEXT:     Value: 0x0
73 # CHECK-NEXT:     Size: 0
74 # CHECK-NEXT:     Binding: Global (0x1)
75 # CHECK-NEXT:     Type: Function (0x2)
76 # CHECK-NEXT:     Other: 0
77 # CHECK-NEXT:     Section: Undefined (0x0)
78 # CHECK-NEXT:   }
79 # CHECK-NEXT:   Symbol {
80 # CHECK-NEXT:     Name: T2@ (19)
81 # CHECK-NEXT:     Value: 0x0
82 # CHECK-NEXT:     Size: 0
83 # CHECK-NEXT:     Binding: Global (0x1)
84 # CHECK-NEXT:     Type: Function (0x2)
85 # CHECK-NEXT:     Other: 0
86 # CHECK-NEXT:     Section: Undefined (0x0)
87 # CHECK-NEXT:   }
88 # CHECK-NEXT:   Symbol {
89 # CHECK-NEXT:     Name: D0@ (4)
90 # CHECK-NEXT:     Value: 0x2004
91 # CHECK-NEXT:     Size: 8
92 # CHECK-NEXT:     Binding: Global (0x1)
93 # CHECK-NEXT:     Type: Object (0x1)
94 # CHECK-NEXT:     Other: 0
95 # CHECK-NEXT:     Section: .data (0x8)
96 # CHECK-NEXT:   }
97 # CHECK-NEXT:   Symbol {
98 # CHECK-NEXT:     Name: D1@ (22)
99 # CHECK-NEXT:     Value: 0x0
100 # CHECK-NEXT:     Size: 4
101 # CHECK-NEXT:     Binding: Global (0x1)
102 # CHECK-NEXT:     Type: Object (0x1)
103 # CHECK-NEXT:     Other: 0
104 # CHECK-NEXT:     Section: Undefined (0x0)
105 # CHECK-NEXT:   }
106 # CHECK-NEXT:   Symbol {
107 # CHECK-NEXT:     Name: D4@ (10)
108 # CHECK-NEXT:     Value: 0x0
109 # CHECK-NEXT:     Size: 0
110 # CHECK-NEXT:     Binding: Global (0x1)
111 # CHECK-NEXT:     Type: None (0x0)
112 # CHECK-NEXT:     Other: 0
113 # CHECK-NEXT:     Section: Undefined (0x0)
114 # CHECK-NEXT:   }
115 # CHECK-NEXT:   Symbol {
116 # CHECK-NEXT:     Name: U1@ (13)
117 # CHECK-NEXT:     Value: 0x0
118 # CHECK-NEXT:     Size: 0
119 # CHECK-NEXT:     Binding: Global (0x1)
120 # CHECK-NEXT:     Type: None (0x0)
121 # CHECK-NEXT:     Other: 0
122 # CHECK-NEXT:     Section: Undefined (0x0)
123 # CHECK-NEXT:   }
124 # CHECK-NEXT: ]
125
126 # so.o
127 ---
128 FileHeader:
129   Class:   ELFCLASS32
130   Data:    ELFDATA2LSB
131   Type:    ET_REL
132   Machine: EM_MIPS
133   Flags:   [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
134
135 Sections:
136 - Name:         .text
137   Type:         SHT_PROGBITS
138   Size:         0x0C
139   AddressAlign: 16
140   Flags:        [SHF_EXECINSTR, SHF_ALLOC]
141
142 - Name:         .data
143   Type:         SHT_PROGBITS
144   Size:         0x08
145   AddressAlign: 16
146   Flags:        [SHF_WRITE, SHF_ALLOC]
147
148 Symbols:
149   Global:
150     - Name: T1
151       Section: .text
152       Type: STT_FUNC
153       Value: 0x0
154       Size: 4
155     - Name: T2
156       Section: .text
157       Type: STT_FUNC
158       Value: 0x4
159       Size: 4
160     - Name: D1
161       Section: .data
162       Type: STT_OBJECT
163       Value: 0x0
164       Size: 4
165     - Name: D2
166       Section: .data
167       Type: STT_OBJECT
168       Value: 0x4
169       Size: 4
170
171 # o.o
172 ---
173 FileHeader:
174   Class: ELFCLASS32
175   Data: ELFDATA2LSB
176   Type: ET_REL
177   Machine: EM_MIPS
178   Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
179
180 Sections:
181 - Name: .text
182   Type: SHT_PROGBITS
183   Size: 0x0C
184   AddressAlign: 16
185   Flags: [SHF_EXECINSTR, SHF_ALLOC]
186
187 - Name: .data
188   Type: SHT_PROGBITS
189   Size: 0x0C
190   AddressAlign: 16
191   Flags: [SHF_WRITE, SHF_ALLOC]
192
193 - Name: .rel.text
194   Type: SHT_REL
195   Info: .text
196   AddressAlign: 4
197   Relocations:
198     - Offset: 0x00
199       Symbol: _gp_disp
200       Type: R_MIPS_HI16
201     - Offset: 0x00
202       Symbol: _gp_disp
203       Type: R_MIPS_LO16
204
205 - Name: .rel.data
206   Type: SHT_REL
207   Info: .data
208   AddressAlign: 4
209   Relocations:
210     - Offset: 0x00      # T0 is a defined function
211       Symbol: T0
212       Type: R_MIPS_32
213     - Offset: 0x04      # T1 is a function from shared lib
214       Symbol: T1
215       Type: R_MIPS_32
216     - Offset: 0x08      # T2 has unknown type and defined in shared lib
217       Symbol: T2
218       Type: R_MIPS_32
219     - Offset: 0x00      # T4 is an undefined function
220       Symbol: T4
221       Type: R_MIPS_32
222     - Offset: 0x04      # D0 is a defined data object
223       Symbol: D0
224       Type: R_MIPS_32
225     - Offset: 0x08      # D1 is a data object from shared lib
226       Symbol: D1
227       Type: R_MIPS_32
228     - Offset: 0x00      # D2 has unknown type and defined in shared lib
229       Symbol: D2
230       Type: R_MIPS_32
231     - Offset: 0x04      # D4 is an undefined data object
232       Symbol: D4
233       Type: R_MIPS_32
234     - Offset: 0x08      # U1 is undefined and has unknown type
235       Symbol: U1
236       Type: R_MIPS_32
237
238 Symbols:
239   Local:
240     - Name: LT0
241       Section: .text
242       Type: STT_FUNC
243       Value: 0x0
244       Size: 4
245     - Name: LD0
246       Section: .data
247       Type: STT_OBJECT
248       Value: 0x0
249       Size: 4
250
251   Global:
252     - Name: _gp_disp
253       Type: STT_OBJECT
254
255     - Name: T0
256       Section: .text
257       Type: STT_FUNC
258       Value: 0x4
259       Size: 8
260     - Name: T1
261       Type: STT_FUNC
262     - Name: T2
263     - Name: T4
264       Type: STT_FUNC
265
266     - Name: D0
267       Section: .data
268       Type: STT_OBJECT
269       Value: 0x4
270       Size: 8
271     - Name: D1
272       Type: STT_OBJECT
273     - Name: D2
274     - Name: D4
275       Type: STT_OBJECT
276     - Name: U1