1# RUN: llvm-readobj --program-headers %p/../../../Object/Inputs/program-headers.elf-i386 \
2# RUN:     | FileCheck %s -check-prefix ELF-I386
3# RUN: llvm-readobj -l %p/../../../Object/Inputs/program-headers.elf-i386 \
4# RUN:     | FileCheck %s -check-prefix ELF-I386
5
6# ELF-I386:      ProgramHeaders [
7# ELF-I386-NEXT:   ProgramHeader {
8# ELF-I386-NEXT:     Type: PT_LOAD (0x1)
9# ELF-I386-NEXT:     Offset: 0x0
10# ELF-I386-NEXT:     VirtualAddress: 0x8048000
11# ELF-I386-NEXT:     PhysicalAddress: 0x8048000
12# ELF-I386-NEXT:     FileSize: 308
13# ELF-I386-NEXT:     MemSize: 308
14# ELF-I386-NEXT:     Flags [ (0x5)
15# ELF-I386-NEXT:       PF_R (0x4)
16# ELF-I386-NEXT:       PF_X (0x1)
17# ELF-I386-NEXT:     ]
18# ELF-I386-NEXT:     Alignment: 4096
19# ELF-I386-NEXT:   }
20# ELF-I386-NEXT:   ProgramHeader {
21# ELF-I386-NEXT:     Type: PT_GNU_STACK (0x6474E551)
22# ELF-I386-NEXT:     Offset: 0x0
23# ELF-I386-NEXT:     VirtualAddress: 0x0
24# ELF-I386-NEXT:     PhysicalAddress: 0x0
25# ELF-I386-NEXT:     FileSize: 0
26# ELF-I386-NEXT:     MemSize: 0
27# ELF-I386-NEXT:     Flags [ (0x6)
28# ELF-I386-NEXT:       PF_R (0x4)
29# ELF-I386-NEXT:       PF_W (0x2)
30# ELF-I386-NEXT:     ]
31# ELF-I386-NEXT:     Alignment: 4
32# ELF-I386-NEXT:   }
33# ELF-I386-NEXT: ]
34
35# RUN: llvm-readobj -l %p/../../../Object/Inputs/program-headers.elf-x86-64 \
36# RUN:     | FileCheck %s -check-prefix ELF-X86-64
37
38# ELF-X86-64:      ProgramHeaders [
39# ELF-X86-64-NEXT:   ProgramHeader {
40# ELF-X86-64-NEXT:     Type: PT_LOAD (0x1)
41# ELF-X86-64-NEXT:     Offset: 0x0
42# ELF-X86-64-NEXT:     VirtualAddress: 0x400000
43# ELF-X86-64-NEXT:     PhysicalAddress: 0x400000
44# ELF-X86-64-NEXT:     FileSize: 312
45# ELF-X86-64-NEXT:     MemSize: 312
46# ELF-X86-64-NEXT:     Flags [ (0x5)
47# ELF-X86-64-NEXT:       PF_R (0x4)
48# ELF-X86-64-NEXT:       PF_X (0x1)
49# ELF-X86-64-NEXT:     ]
50# ELF-X86-64-NEXT:     Alignment: 2097152
51# ELF-X86-64-NEXT:   }
52# ELF-X86-64-NEXT:   ProgramHeader {
53# ELF-X86-64-NEXT:     Type: PT_GNU_EH_FRAME (0x6474E550)
54# ELF-X86-64-NEXT:     Offset: 0xF4
55# ELF-X86-64-NEXT:     VirtualAddress: 0x4000F4
56# ELF-X86-64-NEXT:     PhysicalAddress: 0x4000F4
57# ELF-X86-64-NEXT:     FileSize: 20
58# ELF-X86-64-NEXT:     MemSize: 20
59# ELF-X86-64-NEXT:     Flags [ (0x4)
60# ELF-X86-64-NEXT:       PF_R (0x4)
61# ELF-X86-64-NEXT:     ]
62# ELF-X86-64-NEXT:     Alignment: 4
63# ELF-X86-64-NEXT:   }
64# ELF-X86-64-NEXT:   ProgramHeader {
65# ELF-X86-64-NEXT:     Type: PT_GNU_STACK (0x6474E551)
66# ELF-X86-64-NEXT:     Offset: 0x0
67# ELF-X86-64-NEXT:     VirtualAddress: 0x0
68# ELF-X86-64-NEXT:     PhysicalAddress: 0x0
69# ELF-X86-64-NEXT:     FileSize: 0
70# ELF-X86-64-NEXT:     MemSize: 0
71# ELF-X86-64-NEXT:     Flags [ (0x6)
72# ELF-X86-64-NEXT:       PF_R (0x4)
73# ELF-X86-64-NEXT:       PF_W (0x2)
74# ELF-X86-64-NEXT:     ]
75# ELF-X86-64-NEXT:     Alignment: 8
76# ELF-X86-64-NEXT:   }
77# ELF-X86-64-NEXT: ]
78
79# RUN: llvm-readobj -l %p/../../../Object/Inputs/program-headers.mips \
80# RUN:     | FileCheck %s -check-prefix ELF-MIPS
81
82# ELF-MIPS:      Format: elf32-mips
83# ELF-MIPS-NEXT: Arch: mips
84# ELF-MIPS-NEXT: AddressSize: 32bit
85# ELF-MIPS-NEXT: LoadName:
86# ELF-MIPS-NEXT: ProgramHeaders [
87# ELF-MIPS-NEXT:   ProgramHeader {
88# ELF-MIPS-NEXT:     Type: PT_MIPS_ABIFLAGS (0x70000003)
89# ELF-MIPS-NEXT:     Offset: 0x98
90# ELF-MIPS-NEXT:     VirtualAddress: 0x400098
91# ELF-MIPS-NEXT:     PhysicalAddress: 0x400098
92# ELF-MIPS-NEXT:     FileSize: 24
93# ELF-MIPS-NEXT:     MemSize: 24
94# ELF-MIPS-NEXT:     Flags [ (0x4)
95# ELF-MIPS-NEXT:       PF_R (0x4)
96# ELF-MIPS-NEXT:     ]
97# ELF-MIPS-NEXT:     Alignment: 8
98# ELF-MIPS-NEXT:   }
99# ELF-MIPS-NEXT:   ProgramHeader {
100# ELF-MIPS-NEXT:     Type: PT_MIPS_REGINFO (0x70000000)
101# ELF-MIPS-NEXT:     Offset: 0xB0
102# ELF-MIPS-NEXT:     VirtualAddress: 0x4000B0
103# ELF-MIPS-NEXT:     PhysicalAddress: 0x4000B0
104# ELF-MIPS-NEXT:     FileSize: 24
105# ELF-MIPS-NEXT:     MemSize: 24
106# ELF-MIPS-NEXT:     Flags [ (0x4)
107# ELF-MIPS-NEXT:       PF_R (0x4)
108# ELF-MIPS-NEXT:     ]
109# ELF-MIPS-NEXT:     Alignment: 4
110# ELF-MIPS-NEXT:   }
111# ELF-MIPS-NEXT:   ProgramHeader {
112# ELF-MIPS-NEXT:     Type: PT_LOAD (0x1)
113# ELF-MIPS-NEXT:     Offset: 0x0
114# ELF-MIPS-NEXT:     VirtualAddress: 0x400000
115# ELF-MIPS-NEXT:     PhysicalAddress: 0x400000
116# ELF-MIPS-NEXT:     FileSize: 224
117# ELF-MIPS-NEXT:     MemSize: 224
118# ELF-MIPS-NEXT:     Flags [ (0x5)
119# ELF-MIPS-NEXT:       PF_R (0x4)
120# ELF-MIPS-NEXT:       PF_X (0x1)
121# ELF-MIPS-NEXT:     ]
122# ELF-MIPS-NEXT:     Alignment: 65536
123# ELF-MIPS-NEXT:   }
124# ELF-MIPS-NEXT: ]
125
126# RUN: llvm-readobj -l %p/../../../Object/Inputs/program-headers.mips64 \
127# RUN:     | FileCheck %s -check-prefix ELF-MIPS64
128
129# ELF-MIPS64:      Format: elf64-mips
130# ELF-MIPS64-NEXT: Arch: mips64
131# ELF-MIPS64-NEXT: AddressSize: 64bit
132# ELF-MIPS64-NEXT: LoadName:
133# ELF-MIPS64-NEXT: ProgramHeaders [
134# ELF-MIPS64-NEXT:   ProgramHeader {
135# ELF-MIPS64-NEXT:     Type: PT_LOAD (0x1)
136# ELF-MIPS64-NEXT:     Offset: 0x0
137# ELF-MIPS64-NEXT:     VirtualAddress: 0x120000000
138# ELF-MIPS64-NEXT:     PhysicalAddress: 0x120000000
139# ELF-MIPS64-NEXT:     FileSize: 136
140# ELF-MIPS64-NEXT:     MemSize: 136
141# ELF-MIPS64-NEXT:     Flags [ (0x5)
142# ELF-MIPS64-NEXT:       PF_R (0x4)
143# ELF-MIPS64-NEXT:       PF_X (0x1)
144# ELF-MIPS64-NEXT:     ]
145# ELF-MIPS64-NEXT:     Alignment: 65536
146# ELF-MIPS64-NEXT:   }
147# ELF-MIPS64-NEXT: ]
148
149## Test that llvm-readobj dumps OpenBSD specific program headers.
150
151# RUN: yaml2obj %s -o %t
152# RUN: llvm-readobj -l %t | FileCheck %s --check-prefix=OPENBSD-X86-64
153
154# OPENBSD-X86-64:      ProgramHeader {
155# OPENBSD-X86-64-NEXT:  Type:  PT_OPENBSD_RANDOMIZE
156# OPENBSD-X86-64:      ProgramHeader {
157# OPENBSD-X86-64-NEXT:  Type:  PT_OPENBSD_WXNEEDED
158# OPENBSD-X86-64:      ProgramHeader {
159# OPENBSD-X86-64-NEXT:  Type:  PT_OPENBSD_BOOTDATA
160
161--- !ELF
162FileHeader:
163  Class:   ELFCLASS64
164  Data:    ELFDATA2LSB
165  Type:    ET_EXEC
166  Machine: EM_X86_64
167ProgramHeaders:
168  - Type: 0x65a3dbe6 ## PT_OPENBSD_RANDOMIZE
169  - Type: 0x65a3dbe7 ## PT_OPENBSD_WXNEEDED
170  - Type: 0x65a41be6 ## PT_OPENBSD_BOOTDATA
171
172## Check we report a warning when we are unable to read program headers.
173# RUN: yaml2obj --docnum=2 %s -o %t.err
174# RUN: llvm-readobj --program-headers %t.err 2>&1 | \
175# RUN:   FileCheck %s -DFILE=%t.err --check-prefix=WARN-PHENTSIZE
176
177# WARN-PHENTSIZE:      ProgramHeaders [
178# WARN-PHENTSIZE-NEXT: warning: '[[FILE]]': unable to dump program headers: invalid e_phentsize: 1
179# WARN-PHENTSIZE-NEXT: ]
180
181--- !ELF
182FileHeader:
183  Class:      ELFCLASS64
184  Data:       ELFDATA2LSB
185  Type:       ET_EXEC
186  Machine:    EM_X86_64
187  EPhEntSize: 1
188Sections:
189  - Name: .foo
190    Type: SHT_PROGBITS
191ProgramHeaders:
192  - Type: PT_PHDR
193    Sections:
194      - Section: .foo
195