1# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t.o
2# RUN: ld.lld %t.o -o %t.exe
3# RUN: llvm-readobj -file-headers -sections -program-headers -symbols %t.exe \
4# RUN:   | FileCheck %s
5
6# REQUIRES: mips
7
8# Exits with return code 1 on Linux.
9        .globl  __start
10__start:
11        li      $a0,1
12        li      $v0,4001
13        syscall
14
15# CHECK:      ElfHeader {
16# CHECK-NEXT:   Ident {
17# CHECK-NEXT:     Magic: (7F 45 4C 46)
18# CHECK-NEXT:     Class: 32-bit (0x1)
19# CHECK-NEXT:     DataEncoding: LittleEndian (0x1)
20# CHECK-NEXT:     FileVersion: 1
21# CHECK-NEXT:     OS/ABI: SystemV (0x0)
22# CHECK-NEXT:     ABIVersion: 0
23# CHECK-NEXT:     Unused: (00 00 00 00 00 00 00)
24# CHECK-NEXT:   }
25# CHECK-NEXT:   Type: Executable (0x2)
26# CHECK-NEXT:   Machine: EM_MIPS (0x8)
27# CHECK-NEXT:   Version: 1
28# CHECK-NEXT:   Entry: 0x20000
29# CHECK-NEXT:   ProgramHeaderOffset: 0x34
30# CHECK-NEXT:   SectionHeaderOffset: 0x30088
31# CHECK-NEXT:   Flags [
32# CHECK-NEXT:     EF_MIPS_ABI_O32
33# CHECK-NEXT:     EF_MIPS_ARCH_32R2
34# CHECK-NEXT:     EF_MIPS_CPIC
35# CHECK-NEXT:   ]
36# CHECK-NEXT:   HeaderSize: 52
37# CHECK-NEXT:   ProgramHeaderEntrySize: 32
38# CHECK-NEXT:   ProgramHeaderCount: 6
39# CHECK-NEXT:   SectionHeaderEntrySize: 40
40# CHECK-NEXT:   SectionHeaderCount: 10
41# CHECK-NEXT:   StringTableSectionIndex: 8
42# CHECK-NEXT: }
43# CHECK-NEXT: Sections [
44# CHECK-NEXT:   Section {
45# CHECK-NEXT:     Index: 0
46# CHECK-NEXT:     Name:  (0)
47# CHECK-NEXT:     Type: SHT_NULL (0x0)
48# CHECK-NEXT:     Flags [ (0x0)
49# CHECK-NEXT:     ]
50# CHECK-NEXT:     Address: 0x0
51# CHECK-NEXT:     Offset: 0x0
52# CHECK-NEXT:     Size: 0
53# CHECK-NEXT:     Link: 0
54# CHECK-NEXT:     Info: 0
55# CHECK-NEXT:     AddressAlignment: 0
56# CHECK-NEXT:     EntrySize: 0
57# CHECK-NEXT:   }
58# CHECK-NEXT:   Section {
59# CHECK-NEXT:     Index: 1
60# CHECK-NEXT:     Name: .reginfo
61# CHECK-NEXT:     Type: SHT_MIPS_REGINFO (0x70000006)
62# CHECK-NEXT:     Flags [ (0x2)
63# CHECK-NEXT:       SHF_ALLOC (0x2)
64# CHECK-NEXT:     ]
65# CHECK-NEXT:     Address: 0x100F4
66# CHECK-NEXT:     Offset: 0xF4
67# CHECK-NEXT:     Size: 24
68# CHECK-NEXT:     Link: 0
69# CHECK-NEXT:     Info: 0
70# CHECK-NEXT:     AddressAlignment: 4
71# CHECK-NEXT:     EntrySize: 24
72# CHECK-NEXT:   }
73# CHECK-NEXT:   Section {
74# CHECK-NEXT:     Index: 2
75# CHECK-NEXT:     Name: .MIPS.abiflags
76# CHECK-NEXT:     Type: SHT_MIPS_ABIFLAGS (0x7000002A)
77# CHECK-NEXT:     Flags [ (0x2)
78# CHECK-NEXT:       SHF_ALLOC (0x2)
79# CHECK-NEXT:     ]
80# CHECK-NEXT:     Address: 0x10110
81# CHECK-NEXT:     Offset: 0x110
82# CHECK-NEXT:     Size: 24
83# CHECK-NEXT:     Link: 0
84# CHECK-NEXT:     Info: 0
85# CHECK-NEXT:     AddressAlignment: 8
86# CHECK-NEXT:     EntrySize: 0
87# CHECK-NEXT:   }
88# CHECK-NEXT:   Section {
89# CHECK-NEXT:     Index: 3
90# CHECK-NEXT:     Name: .text (25)
91# CHECK-NEXT:     Type: SHT_PROGBITS (0x1)
92# CHECK-NEXT:     Flags [ (0x6)
93# CHECK-NEXT:       SHF_ALLOC (0x2)
94# CHECK-NEXT:       SHF_EXECINSTR (0x4)
95# CHECK-NEXT:     ]
96# CHECK-NEXT:     Address: 0x20000
97# CHECK-NEXT:     Offset: 0x10000
98# CHECK-NEXT:     Size: 12
99# CHECK-NEXT:     Link: 0
100# CHECK-NEXT:     Info: 0
101# CHECK-NEXT:     AddressAlignment: 16
102# CHECK-NEXT:     EntrySize: 0
103# CHECK-NEXT:   }
104# CHECK-NEXT:   Section {
105# CHECK-NEXT:     Index: 4
106# CHECK-NEXT:     Name: .got (31)
107# CHECK-NEXT:     Type: SHT_PROGBITS (0x1)
108# CHECK-NEXT:     Flags [ (0x10000003)
109# CHECK-NEXT:       SHF_ALLOC (0x2)
110# CHECK-NEXT:       SHF_MIPS_GPREL (0x10000000)
111# CHECK-NEXT:       SHF_WRITE (0x1)
112# CHECK-NEXT:     ]
113# CHECK-NEXT:     Address: 0x30000
114# CHECK-NEXT:     Offset: 0x20000
115# CHECK-NEXT:     Size: 8
116# CHECK-NEXT:     Link: 0
117# CHECK-NEXT:     Info: 0
118# CHECK-NEXT:     AddressAlignment: 4
119# CHECK-NEXT:     EntrySize: 0
120# CHECK-NEXT:   }
121# CHECK-NEXT:   Section {
122# CHECK-NEXT:     Index: 5
123# CHECK-NEXT:     Name: .data
124# CHECK-NEXT:     Type: SHT_PROGBITS (0x1)
125# CHECK-NEXT:     Flags [ (0x3)
126# CHECK-NEXT:       SHF_ALLOC (0x2)
127# CHECK-NEXT:       SHF_WRITE (0x1)
128# CHECK-NEXT:     ]
129# CHECK-NEXT:     Address: 0x40000
130# CHECK-NEXT:     Offset: 0x30000
131# CHECK-NEXT:     Size: 0
132# CHECK-NEXT:     Link: 0
133# CHECK-NEXT:     Info: 0
134# CHECK-NEXT:     AddressAlignment: 16
135# CHECK-NEXT:     EntrySize: 0
136# CHECK-NEXT:   }
137# CHECK-NEXT:   Section {
138# CHECK-NEXT:     Index: 6
139# CHECK-NEXT:     Name: .bss
140# CHECK-NEXT:     Type: SHT_NOBITS (0x8)
141# CHECK-NEXT:     Flags [ (0x3)
142# CHECK-NEXT:       SHF_ALLOC (0x2)
143# CHECK-NEXT:       SHF_WRITE (0x1)
144# CHECK-NEXT:     ]
145# CHECK-NEXT:     Address: 0x40000
146# CHECK-NEXT:     Offset: 0x30000
147# CHECK-NEXT:     Size: 0
148# CHECK-NEXT:     Link: 0
149# CHECK-NEXT:     Info: 0
150# CHECK-NEXT:     AddressAlignment: 16
151# CHECK-NEXT:     EntrySize: 0
152# CHECK-NEXT:   }
153# CHECK-NEXT:   Section {
154# CHECK-NEXT:     Index: 7
155# CHECK-NEXT:     Name: .symtab
156# CHECK-NEXT:     Type: SHT_SYMTAB (0x2)
157# CHECK-NEXT:     Flags [ (0x0)
158# CHECK-NEXT:     ]
159# CHECK-NEXT:     Address: 0x0
160# CHECK-NEXT:     Offset: 0x30000
161# CHECK-NEXT:     Size: 48
162# CHECK-NEXT:     Link: 9
163# CHECK-NEXT:     Info: 1
164# CHECK-NEXT:     AddressAlignment: 4
165# CHECK-NEXT:     EntrySize: 16
166# CHECK-NEXT:   }
167# CHECK-NEXT:   Section {
168# CHECK-NEXT:     Index: 8
169# CHECK-NEXT:     Name: .shstrtab
170# CHECK-NEXT:     Type: SHT_STRTAB (0x3)
171# CHECK-NEXT:     Flags [ (0x0)
172# CHECK-NEXT:     ]
173# CHECK-NEXT:     Address: 0x0
174# CHECK-NEXT:     Offset: 0x30030
175# CHECK-NEXT:     Size: 73
176# CHECK-NEXT:     Link: 0
177# CHECK-NEXT:     Info: 0
178# CHECK-NEXT:     AddressAlignment: 1
179# CHECK-NEXT:     EntrySize: 0
180# CHECK-NEXT:   }
181# CHECK-NEXT:   Section {
182# CHECK-NEXT:     Index: 9
183# CHECK-NEXT:     Name: .strtab
184# CHECK-NEXT:     Type: SHT_STRTAB (0x3)
185# CHECK-NEXT:     Flags [ (0x0)
186# CHECK-NEXT:     ]
187# CHECK-NEXT:     Address: 0x0
188# CHECK-NEXT:     Offset: 0x30079
189# CHECK-NEXT:     Size: 13
190# CHECK-NEXT:     Link: 0
191# CHECK-NEXT:     Info: 0
192# CHECK-NEXT:     AddressAlignment: 1
193# CHECK-NEXT:     EntrySize: 0
194# CHECK-NEXT:   }
195# CHECK-NEXT: ]
196# CHECK-NEXT: Symbols [
197# CHECK-NEXT:   Symbol {
198# CHECK-NEXT:     Name:  (0)
199# CHECK-NEXT:     Value: 0x0
200# CHECK-NEXT:     Size: 0
201# CHECK-NEXT:     Binding: Local (0x0)
202# CHECK-NEXT:     Type: None (0x0)
203# CHECK-NEXT:     Other: 0
204# CHECK-NEXT:     Section: Undefined (0x0)
205# CHECK-NEXT:   }
206# CHECK-NEXT:   Symbol {
207# CHECK-NEXT:     Name: _gp
208# CHECK-NEXT:     Value: 0x37FF0
209# CHECK-NEXT:     Size: 0
210# CHECK-NEXT:     Binding: Local
211# CHECK-NEXT:     Type: None (0x0)
212# CHECK-NEXT:     Other [ (0x2)
213# CHECK-NEXT:       STV_HIDDEN (0x2)
214# CHECK-NEXT:     ]
215# CHECK-NEXT:     Section: .got
216# CHECK-NEXT:   }
217# CHECK-NEXT:   Symbol {
218# CHECK-NEXT:     Name: __start
219# CHECK-NEXT:     Value: 0x20000
220# CHECK-NEXT:     Size: 0
221# CHECK-NEXT:     Binding: Global (0x1)
222# CHECK-NEXT:     Type: None (0x0)
223# CHECK-NEXT:     Other: 0
224# CHECK-NEXT:     Section: .text
225# CHECK-NEXT:   }
226# CHECK-NEXT: ]
227# CHECK-NEXT: ProgramHeaders [
228# CHECK-NEXT:   ProgramHeader {
229# CHECK-NEXT:     Type: PT_PHDR (0x6)
230# CHECK-NEXT:     Offset: 0x34
231# CHECK-NEXT:     VirtualAddress: 0x10034
232# CHECK-NEXT:     PhysicalAddress: 0x10034
233# CHECK-NEXT:     FileSize: 192
234# CHECK-NEXT:     MemSize: 192
235# CHECK-NEXT:     Flags [ (0x4)
236# CHECK-NEXT:       PF_R (0x4)
237# CHECK-NEXT:     ]
238# CHECK-NEXT:     Alignment: 4
239# CHECK-NEXT:   }
240# CHECK-NEXT:   ProgramHeader {
241# CHECK-NEXT:     Type: PT_LOAD (0x1)
242# CHECK-NEXT:     Offset: 0x0
243# CHECK-NEXT:     VirtualAddress: 0x10000
244# CHECK-NEXT:     PhysicalAddress: 0x10000
245# CHECK-NEXT:     FileSize: 296
246# CHECK-NEXT:     MemSize: 296
247# CHECK-NEXT:     Flags [ (0x4)
248# CHECK-NEXT:       PF_R (0x4)
249# CHECK-NEXT:     ]
250# CHECK-NEXT:     Alignment: 65536
251# CHECK-NEXT:   }
252# CHECK-NEXT:   ProgramHeader {
253# CHECK-NEXT:     Type: PT_LOAD (0x1)
254# CHECK-NEXT:     Offset: 0x10000
255# CHECK-NEXT:     VirtualAddress: 0x20000
256# CHECK-NEXT:     PhysicalAddress: 0x20000
257# CHECK-NEXT:     FileSize: 12
258# CHECK-NEXT:     MemSize: 12
259# CHECK-NEXT:     Flags [ (0x5)
260# CHECK-NEXT:       PF_R (0x4)
261# CHECK-NEXT:       PF_X (0x1)
262# CHECK-NEXT:     ]
263# CHECK-NEXT:     Alignment: 65536
264# CHECK-NEXT:   }
265# CHECK-NEXT:   ProgramHeader {
266# CHECK-NEXT:     Type: PT_LOAD (0x1)
267# CHECK-NEXT:     Offset: 0x20000
268# CHECK-NEXT:     VirtualAddress: 0x30000
269# CHECK-NEXT:     PhysicalAddress: 0x30000
270# CHECK-NEXT:     FileSize: 65536
271# CHECK-NEXT:     MemSize: 65536
272# CHECK-NEXT:     Flags [
273# CHECK-NEXT:       PF_R
274# CHECK-NEXT:       PF_W
275# CHECK-NEXT:     ]
276# CHECK-NEXT:     Alignment: 65536
277# CHECK-NEXT:   }
278# CHECK-NEXT:   ProgramHeader {
279# CHECK-NEXT:     Type: PT_GNU_RELRO (0x6474E552)
280# CHECK-NEXT:     Offset: 0x20000
281# CHECK-NEXT:     VirtualAddress: 0x30000
282# CHECK-NEXT:     PhysicalAddress: 0x30000
283# CHECK-NEXT:     FileSize: 8
284# CHECK-NEXT:     MemSize: 8
285# CHECK-NEXT:     Flags [ (0x4)
286# CHECK-NEXT:       PF_R (0x4)
287# CHECK-NEXT:     ]
288# CHECK-NEXT:     Alignment: 1
289# CHECK-NEXT:   }
290# CHECK-NEXT:   ProgramHeader {
291# CHECK-NEXT:    Type: PT_GNU_STACK
292# CHECK-NEXT:    Offset: 0x0
293# CHECK-NEXT:    VirtualAddress: 0x0
294# CHECK-NEXT:    PhysicalAddress: 0x0
295# CHECK-NEXT:    FileSize: 0
296# CHECK-NEXT:    MemSize: 0
297# CHECK-NEXT:    Flags [
298# CHECK-NEXT:      PF_R
299# CHECK-NEXT:      PF_W
300# CHECK-NEXT:    ]
301# CHECK-NEXT:    Alignment: 0
302# CHECK-NEXT:  }
303# CHECK-NEXT:]
304