1# REQUIRES: ppc
2# # RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t
3# RUN: ld.lld --hash-style=sysv -discard-all -shared %t -o %t2
4# RUN: llvm-readobj -file-headers -sections -section-data -program-headers %t2 | FileCheck %s
5.abiversion 2
6# Exits with return code 55 on linux.
7.text
8  li 0,1
9  li 3,55
10  sc
11
12// CHECK:Format: ELF64-ppc64
13// CHECK-NEXT:Arch: powerpc64le
14// CHECK-NEXT:AddressSize: 64bit
15// CHECK-NEXT:LoadName:
16// CHECK-NEXT:ElfHeader {
17// CHECK-NEXT:  Ident {
18// CHECK-NEXT:    Magic: (7F 45 4C 46)
19// CHECK-NEXT:    Class: 64-bit (0x2)
20// CHECK-NEXT:    DataEncoding: LittleEndian (0x1)
21// CHECK-NEXT:    FileVersion: 1
22// CHECK-NEXT:    OS/ABI: SystemV (0x0)
23// CHECK-NEXT:    ABIVersion: 0
24// CHECK-NEXT:    Unused: (00 00 00 00 00 00 00)
25// CHECK-NEXT:  }
26// CHECK-NEXT:  Type: SharedObject (0x3)
27// CHECK-NEXT:  Machine: EM_PPC64 (0x15)
28// CHECK-NEXT:  Version: 1
29// CHECK-NEXT:  Entry: 0x10000
30// CHECK-NEXT:  ProgramHeaderOffset: 0x40
31// CHECK-NEXT:  SectionHeaderOffset: 0x200F8
32// CHECK-NEXT:  Flags [ (0x2)
33// CHECK-NEXT:    0x2
34// CHECK-NEXT:  ]
35// CHECK-NEXT:  HeaderSize: 64
36// CHECK-NEXT:  ProgramHeaderEntrySize: 56
37// CHECK-NEXT:  ProgramHeaderCount: 7
38// CHECK-NEXT:  SectionHeaderEntrySize: 64
39// CHECK-NEXT:  SectionHeaderCount: 11
40// CHECK-NEXT:  StringTableSectionIndex: 9
41// CHECK-NEXT:}
42// CHECK-NEXT:Sections [
43// CHECK-NEXT:  Section {
44// CHECK-NEXT:    Index: 0
45// CHECK-NEXT:    Name:  (0)
46// CHECK-NEXT:    Type: SHT_NULL (0x0)
47// CHECK-NEXT:    Flags [ (0x0)
48// CHECK-NEXT:    ]
49// CHECK-NEXT:    Address: 0x0
50// CHECK-NEXT:    Offset: 0x0
51// CHECK-NEXT:    Size: 0
52// CHECK-NEXT:    Link: 0
53// CHECK-NEXT:    Info: 0
54// CHECK-NEXT:    AddressAlignment: 0
55// CHECK-NEXT:    EntrySize: 0
56// CHECK-NEXT:    SectionData (
57// CHECK-NEXT:    )
58// CHECK-NEXT:  }
59// CHECK-NEXT:  Section {
60// CHECK-NEXT:    Index: 1
61// CHECK-NEXT:    Name: .dynsym (1)
62// CHECK-NEXT:    Type: SHT_DYNSYM (0xB)
63// CHECK-NEXT:    Flags [ (0x2)
64// CHECK-NEXT:      SHF_ALLOC (0x2)
65// CHECK-NEXT:    ]
66// CHECK-NEXT:    Address: 0x1C8
67// CHECK-NEXT:    Offset: 0x1C8
68// CHECK-NEXT:    Size: 24
69// CHECK-NEXT:    Link: 3
70// CHECK-NEXT:    Info: 1
71// CHECK-NEXT:    AddressAlignment: 8
72// CHECK-NEXT:    EntrySize: 24
73// CHECK-NEXT:    SectionData (
74// CHECK-NEXT:      0000: 00000000 00000000 00000000 00000000  |................|
75// CHECK-NEXT:      0010: 00000000 00000000                    |........|
76// CHECK-NEXT:    )
77// CHECK-NEXT:  }
78// CHECK-NEXT:  Section {
79// CHECK-NEXT:    Index: 2
80// CHECK-NEXT:    Name: .hash (9)
81// CHECK-NEXT:    Type: SHT_HASH (0x5)
82// CHECK-NEXT:    Flags [ (0x2)
83// CHECK-NEXT:      SHF_ALLOC (0x2)
84// CHECK-NEXT:    ]
85// CHECK-NEXT:    Address: 0x1E0
86// CHECK-NEXT:    Offset: 0x1E0
87// CHECK-NEXT:    Size: 16
88// CHECK-NEXT:    Link: 1
89// CHECK-NEXT:    Info: 0
90// CHECK-NEXT:    AddressAlignment: 4
91// CHECK-NEXT:    EntrySize: 4
92// CHECK-NEXT:    SectionData (
93// CHECK-NEXT:      0000: 01000000 01000000 00000000 00000000  |................|
94// CHECK-NEXT:    )
95// CHECK-NEXT:  }
96// CHECK-NEXT:  Section {
97// CHECK-NEXT:    Index: 3
98// CHECK-NEXT:    Name: .dynstr (15)
99// CHECK-NEXT:    Type: SHT_STRTAB (0x3)
100// CHECK-NEXT:    Flags [ (0x2)
101// CHECK-NEXT:      SHF_ALLOC (0x2)
102// CHECK-NEXT:    ]
103// CHECK-NEXT:    Address: 0x1F0
104// CHECK-NEXT:    Offset: 0x1F0
105// CHECK-NEXT:    Size: 1
106// CHECK-NEXT:    Link: 0
107// CHECK-NEXT:    Info: 0
108// CHECK-NEXT:    AddressAlignment: 1
109// CHECK-NEXT:    EntrySize: 0
110// CHECK-NEXT:    SectionData (
111// CHECK-NEXT:      0000: 00                                   |.|
112// CHECK-NEXT:    )
113// CHECK-NEXT:  }
114// CHECK-NEXT:  Section {
115// CHECK-NEXT:    Index: 4
116// CHECK-NEXT:    Name: .text (23)
117// CHECK-NEXT:    Type: SHT_PROGBITS (0x1)
118// CHECK-NEXT:    Flags [ (0x6)
119// CHECK-NEXT:      SHF_ALLOC (0x2)
120// CHECK-NEXT:      SHF_EXECINSTR (0x4)
121// CHECK-NEXT:    ]
122// CHECK-NEXT:    Address: 0x10000
123// CHECK-NEXT:    Offset: 0x10000
124// CHECK-NEXT:    Size: 12
125// CHECK-NEXT:    Link: 0
126// CHECK-NEXT:    Info: 0
127// CHECK-NEXT:    AddressAlignment: 4
128// CHECK-NEXT:    EntrySize: 0
129// CHECK-NEXT:    SectionData (
130// CHECK-NEXT:      0000: 01000038 37006038 02000044           |...87.`8...D|
131// CHECK-NEXT:    )
132// CHECK-NEXT:  }
133// CHECK-NEXT:  Section {
134// CHECK-NEXT:    Index: 5
135// CHECK-NEXT:    Name: .dynamic (29)
136// CHECK-NEXT:    Type: SHT_DYNAMIC (0x6)
137// CHECK-NEXT:    Flags [ (0x3)
138// CHECK-NEXT:      SHF_ALLOC (0x2)
139// CHECK-NEXT:      SHF_WRITE (0x1)
140// CHECK-NEXT:    ]
141// CHECK-NEXT:    Address: 0x20000
142// CHECK-NEXT:    Offset: 0x20000
143// CHECK-NEXT:    Size: 96
144// CHECK-NEXT:    Link: 3
145// CHECK-NEXT:    Info: 0
146// CHECK-NEXT:    AddressAlignment: 8
147// CHECK-NEXT:    EntrySize: 16
148// CHECK-NEXT:    SectionData (
149// CHECK-NEXT:      0000: 06000000 00000000 C8010000 00000000  |................|
150// CHECK-NEXT:      0010: 0B000000 00000000 18000000 00000000  |................|
151// CHECK-NEXT:      0020: 05000000 00000000 F0010000 00000000  |................|
152// CHECK-NEXT:      0030: 0A000000 00000000 01000000 00000000  |................|
153// CHECK-NEXT:      0040: 04000000 00000000 E0010000 00000000  |................|
154// CHECK-NEXT:      0050: 00000000 00000000 00000000 00000000  |................|
155// CHECK-NEXT:    )
156// CHECK-NEXT:  }
157// CHECK-NEXT:  Section {
158// CHECK-NEXT:    Index: 6
159// CHECK-NEXT:    Name: .branch_lt (38)
160// CHECK-NEXT:    Type: SHT_NOBITS (0x8)
161// CHECK-NEXT:    Flags [ (0x3)
162// CHECK-NEXT:      SHF_ALLOC (0x2)
163// CHECK-NEXT:      SHF_WRITE (0x1)
164// CHECK-NEXT:    ]
165// CHECK-NEXT:    Address: 0x30000
166// CHECK-NEXT:    Offset: 0x20060
167// CHECK-NEXT:    Size: 0
168// CHECK-NEXT:    Link: 0
169// CHECK-NEXT:    Info: 0
170// CHECK-NEXT:    AddressAlignment: 8
171// CHECK-NEXT:    EntrySize: 0
172// CHECK-NEXT:  }
173// CHECK-NEXT:  Section {
174// CHECK-NEXT:    Index: 7
175// CHECK-NEXT:    Name: .comment (49)
176// CHECK-NEXT:    Type: SHT_PROGBITS (0x1)
177// CHECK-NEXT:    Flags [ (0x30)
178// CHECK-NEXT:      SHF_MERGE (0x10)
179// CHECK-NEXT:      SHF_STRINGS (0x20)
180// CHECK-NEXT:    ]
181// CHECK-NEXT:    Address: 0x0
182// CHECK-NEXT:    Offset: 0x20060
183// CHECK-NEXT:    Size: 8
184// CHECK-NEXT:    Link: 0
185// CHECK-NEXT:    Info: 0
186// CHECK-NEXT:    AddressAlignment: 1
187// CHECK-NEXT:    EntrySize: 1
188// CHECK-NEXT:    SectionData (
189// CHECK-NEXT:      0000: 4C4C4420 312E3000                    |LLD 1.0.|
190// CHECK-NEXT:    )
191// CHECK-NEXT:  }
192// CHECK-NEXT:  Section {
193// CHECK-NEXT:    Index: 8
194// CHECK-NEXT:    Name: .symtab (58)
195// CHECK-NEXT:    Type: SHT_SYMTAB (0x2)
196// CHECK-NEXT:    Flags [ (0x0)
197// CHECK-NEXT:    ]
198// CHECK-NEXT:    Address: 0x0
199// CHECK-NEXT:    Offset: 0x20068
200// CHECK-NEXT:    Size: 48
201// CHECK-NEXT:    Link: 10
202// CHECK-NEXT:    Info: 2
203// CHECK-NEXT:    AddressAlignment: 8
204// CHECK-NEXT:    EntrySize: 24
205// CHECK-NEXT:    SectionData (
206// CHECK-NEXT:      0000: 00000000 00000000 00000000 00000000  |................|
207// CHECK-NEXT:      0010: 00000000 00000000 01000000 00020500  |................|
208// CHECK-NEXT:      0020: 00000200 00000000 00000000 00000000  |................|
209// CHECK-NEXT:    )
210// CHECK-NEXT:  }
211// CHECK-NEXT:  Section {
212// CHECK-NEXT:    Index: 9
213// CHECK-NEXT:    Name: .shstrtab (66)
214// CHECK-NEXT:    Type: SHT_STRTAB (0x3)
215// CHECK-NEXT:    Flags [ (0x0)
216// CHECK-NEXT:    ]
217// CHECK-NEXT:    Address: 0x0
218// CHECK-NEXT:    Offset: 0x20098
219// CHECK-NEXT:    Size: 84
220// CHECK-NEXT:    Link: 0
221// CHECK-NEXT:    Info: 0
222// CHECK-NEXT:    AddressAlignment: 1
223// CHECK-NEXT:    EntrySize: 0
224// CHECK-NEXT:    SectionData (
225// CHECK-NEXT:      0000: 002E6479 6E73796D 002E6861 7368002E  |..dynsym..hash..|
226// CHECK-NEXT:      0010: 64796E73 7472002E 74657874 002E6479  |dynstr..text..dy|
227// CHECK-NEXT:      0020: 6E616D69 63002E62 72616E63 685F6C74  |namic..branch_lt|
228// CHECK-NEXT:      0030: 002E636F 6D6D656E 74002E73 796D7461  |..comment..symta|
229// CHECK-NEXT:      0040: 62002E73 68737472 74616200 2E737472  |b..shstrtab..str|
230// CHECK-NEXT:      0050: 74616200                             |tab.|
231// CHECK-NEXT:    )
232// CHECK-NEXT:  }
233// CHECK-NEXT:  Section {
234// CHECK-NEXT:    Index: 10
235// CHECK-NEXT:    Name: .strtab (76)
236// CHECK-NEXT:    Type: SHT_STRTAB (0x3)
237// CHECK-NEXT:    Flags [ (0x0)
238// CHECK-NEXT:    ]
239// CHECK-NEXT:    Address: 0x0
240// CHECK-NEXT:    Offset: 0x200EC
241// CHECK-NEXT:    Size: 10
242// CHECK-NEXT:    Link: 0
243// CHECK-NEXT:    Info: 0
244// CHECK-NEXT:    AddressAlignment: 1
245// CHECK-NEXT:    EntrySize: 0
246// CHECK-NEXT:    SectionData (
247// CHECK-NEXT:      0000: 005F4459 4E414D49 4300               |._DYNAMIC.|
248// CHECK-NEXT:    )
249// CHECK-NEXT:  }
250// CHECK-NEXT:]
251// CHECK-NEXT:ProgramHeaders [
252// CHECK-NEXT:  ProgramHeader {
253// CHECK-NEXT:    Type: PT_PHDR (0x6)
254// CHECK-NEXT:    Offset: 0x40
255// CHECK-NEXT:    VirtualAddress: 0x40
256// CHECK-NEXT:    PhysicalAddress: 0x40
257// CHECK-NEXT:    FileSize: 392
258// CHECK-NEXT:    MemSize: 392
259// CHECK-NEXT:    Flags [ (0x4)
260// CHECK-NEXT:      PF_R (0x4)
261// CHECK-NEXT:    ]
262// CHECK-NEXT:    Alignment: 8
263// CHECK-NEXT:  }
264// CHECK-NEXT:  ProgramHeader {
265// CHECK-NEXT:    Type: PT_LOAD (0x1)
266// CHECK-NEXT:    Offset: 0x0
267// CHECK-NEXT:    VirtualAddress: 0x0
268// CHECK-NEXT:    PhysicalAddress: 0x0
269// CHECK-NEXT:    FileSize: 497
270// CHECK-NEXT:    MemSize: 497
271// CHECK-NEXT:    Flags [ (0x4)
272// CHECK-NEXT:      PF_R (0x4)
273// CHECK-NEXT:    ]
274// CHECK-NEXT:    Alignment: 65536
275// CHECK-NEXT:  }
276// CHECK-NEXT:  ProgramHeader {
277// CHECK-NEXT:    Type: PT_LOAD (0x1)
278// CHECK-NEXT:    Offset: 0x10000
279// CHECK-NEXT:    VirtualAddress: 0x10000
280// CHECK-NEXT:    PhysicalAddress: 0x10000
281// CHECK-NEXT:    FileSize: 12
282// CHECK-NEXT:    MemSize: 12
283// CHECK-NEXT:    Flags [ (0x5)
284// CHECK-NEXT:      PF_R (0x4)
285// CHECK-NEXT:      PF_X (0x1)
286// CHECK-NEXT:    ]
287// CHECK-NEXT:    Alignment: 65536
288// CHECK-NEXT:  }
289// CHECK-NEXT:  ProgramHeader {
290// CHECK-NEXT:    Type: PT_LOAD (0x1)
291// CHECK-NEXT:    Offset: 0x20000
292// CHECK-NEXT:    VirtualAddress: 0x20000
293// CHECK-NEXT:    PhysicalAddress: 0x20000
294// CHECK-NEXT:    FileSize: 96
295// CHECK-NEXT:    MemSize: 65536
296// CHECK-NEXT:    Flags [ (0x6)
297// CHECK-NEXT:      PF_R (0x4)
298// CHECK-NEXT:      PF_W (0x2)
299// CHECK-NEXT:    ]
300// CHECK-NEXT:    Alignment: 65536
301// CHECK-NEXT:  }
302// CHECK-NEXT:  ProgramHeader {
303// CHECK-NEXT:    Type: PT_DYNAMIC (0x2)
304// CHECK-NEXT:    Offset: 0x20000
305// CHECK-NEXT:    VirtualAddress: 0x20000
306// CHECK-NEXT:    PhysicalAddress: 0x20000
307// CHECK-NEXT:    FileSize: 96
308// CHECK-NEXT:    MemSize: 96
309// CHECK-NEXT:    Flags [ (0x6)
310// CHECK-NEXT:      PF_R (0x4)
311// CHECK-NEXT:      PF_W (0x2)
312// CHECK-NEXT:    ]
313// CHECK-NEXT:    Alignment: 8
314// CHECK-NEXT:  }
315// CHECK-NEXT:  ProgramHeader {
316// CHECK-NEXT:    Type: PT_GNU_RELRO (0x6474E552)
317// CHECK-NEXT:    Offset: 0x20000
318// CHECK-NEXT:    VirtualAddress: 0x20000
319// CHECK-NEXT:    PhysicalAddress: 0x20000
320// CHECK-NEXT:    FileSize: 96
321// CHECK-NEXT:    MemSize: 4096
322// CHECK-NEXT:    Flags [ (0x4)
323// CHECK-NEXT:      PF_R (0x4)
324// CHECK-NEXT:    ]
325// CHECK-NEXT:    Alignment: 1
326// CHECK-NEXT:  }
327// CHECK-NEXT:  ProgramHeader {
328// CHECK-NEXT:    Type: PT_GNU_STACK (0x6474E551)
329// CHECK-NEXT:    Offset: 0x0
330// CHECK-NEXT:    VirtualAddress: 0x0
331// CHECK-NEXT:    PhysicalAddress: 0x0
332// CHECK-NEXT:    FileSize: 0
333// CHECK-NEXT:    MemSize: 0
334// CHECK-NEXT:    Flags [ (0x6)
335// CHECK-NEXT:      PF_R (0x4)
336// CHECK-NEXT:      PF_W (0x2)
337// CHECK-NEXT:    ]
338// CHECK-NEXT:    Alignment: 0
339// CHECK-NEXT:  }
340// CHECK-NEXT:]
341