1## Check how we dump program headers and print sections to segments 2## mapping (llvm-readelf only) with -l, --program-headers and --segments options. 3 4## Check that -l, --program-headers and --segments are the same option. 5 6## Case A: test llvm-readelf tool. 7# RUN: yaml2obj --docnum=1 -DBITS=32 -DMACHINE=EM_386 %s -o %t32.elf 8# RUN: llvm-readelf -l %t32.elf 2>&1 > %t.readelf-l.txt 9# RUN: llvm-readelf --program-headers %t32.elf 2>&1 > %t.readelf-pheaders.txt 10# RUN: cmp %t.readelf-l.txt %t.readelf-pheaders.txt 11# RUN: llvm-readelf --segments %t32.elf 2>&1 > %t.readelf-segments.txt 12# RUN: cmp %t.readelf-l.txt %t.readelf-segments.txt 13 14## Case B: test llvm-readobj tool. 15# RUN: llvm-readobj -l %t32.elf 2>&1 > %t.readobj-l.txt 16# RUN: llvm-readobj --program-headers %t32.elf 2>&1 > %t.readobj-pheaders.txt 17# RUN: cmp %t.readobj-l.txt %t.readobj-pheaders.txt 18# RUN: llvm-readobj --segments %t32.elf 2>&1 > %t.readobj-segments.txt 19# RUN: cmp %t.readobj-l.txt %t.readobj-segments.txt 20 21## Check we are able to print program headers of different types. 22# RUN: FileCheck %s --check-prefixes=ELF32,MAPPING \ 23# RUN: --match-full-lines --strict-whitespace --input-file=%t.readelf-l.txt 24# RUN: FileCheck %s --check-prefixes=ELF-LLVM,ELF32-LLVM \ 25# RUN: --match-full-lines --input-file=%t.readobj-l.txt 26 27# RUN: yaml2obj --docnum=1 -DBITS=64 -DMACHINE=EM_X86_64 %s -o %t64.elf 28# RUN: llvm-readelf -l %t64.elf | \ 29# RUN: FileCheck %s --check-prefixes=ELF64,MAPPING --strict-whitespace --match-full-lines 30# RUN: llvm-readobj -l %t64.elf | FileCheck %s --check-prefixes=ELF-LLVM,ELF64-LLVM 31 32# ELF32:There are 26 program headers, starting at offset 52 33# ELF32-EMPTY: 34# ELF32-NEXT:Program Headers: 35# ELF32-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 36# ELF32-NEXT: PHDR 0x000374 0x00001000 0x00001000 0x00003 0x00003 W 0x1 37# ELF32-NEXT: PHDR 0x000377 0x00002000 0x00002000 0x00007 0x00007 E 0x1 38# ELF32-NEXT: NULL 0x000377 0x00002000 0x00002000 0x00007 0x00007 E 0x1 39# ELF32-NEXT: DYNAMIC 0x000374 0x00001000 0x00001000 0x00003 0x00003 RWE 0x1 40# ELF32-NEXT: INTERP 0x00037e 0x00003000 0x00003000 0x00004 0x00004 RW 0x1 41# ELF32-NEXT: [Requesting program interpreter: ABC] 42# ELF32-NEXT: NOTE 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 43# ELF32-NEXT: SHLIB 0x000374 0x00001000 0x00001000 0x00001 0x00001 0x1 44# ELF32-NEXT: TLS 0x000382 0x00004000 0x00004000 0x00001 0x00001 0x1 45# ELF32-NEXT: <unknown>: 0x60000000 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 46# ELF32-NEXT: GNU_EH_FRAME 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 47# ELF32-NEXT: SUNW_UNWIND 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 48# ELF32-NEXT: GNU_STACK 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 49# ELF32-NEXT: GNU_RELRO 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 50# ELF32-NEXT: GNU_PROPERTY 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 51# ELF32-NEXT: OPENBSD_MUTABLE 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 52# ELF32-NEXT: OPENBSD_RANDOMIZE 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 53# ELF32-NEXT: OPENBSD_WXNEEDED 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 54# ELF32-NEXT: OPENBSD_NOBTCFI 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 55# ELF32-NEXT: OPENBSD_SYSCALLS 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 56# ELF32-NEXT: OPENBSD_BOOTDATA 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 57# ELF32-NEXT: <unknown>: 0x6fffffff 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 58# ELF32-NEXT: <unknown>: 0x70000000 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 59# ELF32-NEXT: <unknown>: 0x70000001 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 60# ELF32-NEXT: <unknown>: 0x70000002 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 61# ELF32-NEXT: <unknown>: 0x70000003 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 62# ELF32-NEXT: <unknown>: 0x7fffffff 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x1 63# ELF32-EMPTY: 64 65# ELF64:There are 26 program headers, starting at offset 64 66# ELF64-EMPTY: 67# ELF64-NEXT:Program Headers: 68# ELF64-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 69# ELF64-NEXT: PHDR 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 W 0x1 70# ELF64-NEXT: PHDR 0x0005f3 0x0000000000002000 0x0000000000002000 0x000007 0x000007 E 0x1 71# ELF64-NEXT: NULL 0x0005f3 0x0000000000002000 0x0000000000002000 0x000007 0x000007 E 0x1 72# ELF64-NEXT: DYNAMIC 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 RWE 0x1 73# ELF64-NEXT: INTERP 0x0005fa 0x0000000000003000 0x0000000000003000 0x000004 0x000004 RW 0x1 74# ELF64-NEXT: [Requesting program interpreter: ABC] 75# ELF64-NEXT: NOTE 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 76# ELF64-NEXT: SHLIB 0x0005f0 0x0000000000001000 0x0000000000001000 0x000001 0x000001 0x1 77# ELF64-NEXT: TLS 0x0005fe 0x0000000000004000 0x0000000000004000 0x000001 0x000001 0x1 78# ELF64-NEXT: <unknown>: 0x60000000 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 79# ELF64-NEXT: GNU_EH_FRAME 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 80# ELF64-NEXT: SUNW_UNWIND 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 81# ELF64-NEXT: GNU_STACK 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 82# ELF64-NEXT: GNU_RELRO 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 83# ELF64-NEXT: GNU_PROPERTY 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 84# ELF64-NEXT: OPENBSD_MUTABLE 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 85# ELF64-NEXT: OPENBSD_RANDOMIZE 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 86# ELF64-NEXT: OPENBSD_WXNEEDED 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 87# ELF64-NEXT: OPENBSD_NOBTCFI 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 88# ELF64-NEXT: OPENBSD_SYSCALLS 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 89# ELF64-NEXT: OPENBSD_BOOTDATA 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 90# ELF64-NEXT: <unknown>: 0x6fffffff 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 91# ELF64-NEXT: <unknown>: 0x70000000 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 92# ELF64-NEXT: <unknown>: 0x70000001 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 93# ELF64-NEXT: <unknown>: 0x70000002 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 94# ELF64-NEXT: <unknown>: 0x70000003 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 95# ELF64-NEXT: <unknown>: 0x7fffffff 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 96# ELF64-EMPTY: 97 98# MAPPING: Section to Segment mapping: 99# MAPPING-NEXT: Segment Sections... 100# MAPPING-NEXT: 00 .foo.begin .foo.end {{$}} 101# MAPPING-NEXT: 01 .bar.begin .bar.end {{$}} 102# MAPPING-NEXT: 02 .bar.begin .bar.end {{$}} 103# MAPPING-NEXT: 03 .foo.begin .foo.end {{$}} 104# MAPPING-NEXT: 04 .interp {{$}} 105# MAPPING-NEXT: 05 .foo.begin .foo.end {{$}} 106# MAPPING-NEXT: 06 .foo.begin {{$}} 107# MAPPING-NEXT: 07 .tls {{$}} 108# MAPPING-NEXT: 08 .foo.begin .foo.end {{$}} 109# MAPPING-NEXT: 09 .foo.begin .foo.end {{$}} 110# MAPPING-NEXT: 10 .foo.begin .foo.end {{$}} 111# MAPPING-NEXT: 11 .foo.begin .foo.end {{$}} 112# MAPPING-NEXT: 12 .foo.begin .foo.end {{$}} 113# MAPPING-NEXT: 13 .foo.begin .foo.end {{$}} 114# MAPPING-NEXT: 14 .foo.begin .foo.end {{$}} 115# MAPPING-NEXT: 15 .foo.begin .foo.end {{$}} 116# MAPPING-NEXT: 16 .foo.begin .foo.end {{$}} 117# MAPPING-NEXT: 17 .foo.begin .foo.end {{$}} 118# MAPPING-NEXT: 18 .foo.begin .foo.end {{$}} 119# MAPPING-NEXT: 19 .foo.begin .foo.end {{$}} 120# MAPPING-NEXT: 20 .foo.begin .foo.end {{$}} 121# MAPPING-NEXT: 21 .foo.begin .foo.end {{$}} 122# MAPPING-NEXT: 22 .foo.begin .foo.end {{$}} 123# MAPPING-NEXT: 23 .foo.begin .foo.end {{$}} 124# MAPPING-NEXT: 24 .foo.begin .foo.end {{$}} 125# MAPPING-NEXT: 25 .foo.begin .foo.end {{$}} 126# MAPPING-NEXT: None .unused .strtab .shstrtab {{$}} 127 128# ELF-LLVM: ProgramHeaders [ 129# ELF-LLVM-NEXT: ProgramHeader { 130# ELF-LLVM-NEXT: Type: PT_PHDR (0x6) 131# ELF32-LLVM-NEXT: Offset: 0x374 132# ELF64-LLVM-NEXT: Offset: 0x5F0 133# ELF-LLVM-NEXT: VirtualAddress: 0x1000 134# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 135# ELF-LLVM-NEXT: FileSize: 3 136# ELF-LLVM-NEXT: MemSize: 3 137# ELF-LLVM-NEXT: Flags [ (0x2) 138# ELF-LLVM-NEXT: PF_W (0x2) 139# ELF-LLVM-NEXT: ] 140# ELF-LLVM-NEXT: Alignment: 1 141# ELF-LLVM-NEXT: } 142# ELF-LLVM-NEXT: ProgramHeader { 143# ELF-LLVM-NEXT: Type: PT_PHDR (0x6) 144# ELF32-LLVM-NEXT: Offset: 0x377 145# ELF64-LLVM-NEXT: Offset: 0x5F3 146# ELF-LLVM-NEXT: VirtualAddress: 0x2000 147# ELF-LLVM-NEXT: PhysicalAddress: 0x2000 148# ELF-LLVM-NEXT: FileSize: 7 149# ELF-LLVM-NEXT: MemSize: 7 150# ELF-LLVM-NEXT: Flags [ (0x1) 151# ELF-LLVM-NEXT: PF_X (0x1) 152# ELF-LLVM-NEXT: ] 153# ELF-LLVM-NEXT: Alignment: 1 154# ELF-LLVM-NEXT: } 155# ELF-LLVM-NEXT: ProgramHeader { 156# ELF-LLVM-NEXT: Type: PT_NULL (0x0) 157# ELF32-LLVM-NEXT: Offset: 0x377 158# ELF64-LLVM-NEXT: Offset: 0x5F3 159# ELF-LLVM-NEXT: VirtualAddress: 0x2000 160# ELF-LLVM-NEXT: PhysicalAddress: 0x2000 161# ELF-LLVM-NEXT: FileSize: 7 162# ELF-LLVM-NEXT: MemSize: 7 163# ELF-LLVM-NEXT: Flags [ (0x1) 164# ELF-LLVM-NEXT: PF_X (0x1) 165# ELF-LLVM-NEXT: ] 166# ELF-LLVM-NEXT: Alignment: 1 167# ELF-LLVM-NEXT: } 168# ELF-LLVM-NEXT: ProgramHeader { 169# ELF-LLVM-NEXT: Type: PT_DYNAMIC (0x2) 170# ELF32-LLVM-NEXT: Offset: 0x374 171# ELF64-LLVM-NEXT: Offset: 0x5F0 172# ELF-LLVM-NEXT: VirtualAddress: 0x1000 173# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 174# ELF-LLVM-NEXT: FileSize: 3 175# ELF-LLVM-NEXT: MemSize: 3 176# ELF-LLVM-NEXT: Flags [ (0x7) 177# ELF-LLVM-NEXT: PF_R (0x4) 178# ELF-LLVM-NEXT: PF_W (0x2) 179# ELF-LLVM-NEXT: PF_X (0x1) 180# ELF-LLVM-NEXT: ] 181# ELF-LLVM-NEXT: Alignment: 1 182# ELF-LLVM-NEXT: } 183# ELF-LLVM-NEXT: ProgramHeader { 184# ELF-LLVM-NEXT: Type: PT_INTERP (0x3) 185# ELF32-LLVM-NEXT: Offset: 0x37E 186# ELF64-LLVM-NEXT: Offset: 0x5FA 187# ELF-LLVM-NEXT: VirtualAddress: 0x3000 188# ELF-LLVM-NEXT: PhysicalAddress: 0x3000 189# ELF-LLVM-NEXT: FileSize: 4 190# ELF-LLVM-NEXT: MemSize: 4 191# ELF-LLVM-NEXT: Flags [ (0x6) 192# ELF-LLVM-NEXT: PF_R (0x4) 193# ELF-LLVM-NEXT: PF_W (0x2) 194# ELF-LLVM-NEXT: ] 195# ELF-LLVM-NEXT: Alignment: 1 196# ELF-LLVM-NEXT: } 197# ELF-LLVM-NEXT: ProgramHeader { 198# ELF-LLVM-NEXT: Type: PT_NOTE (0x4) 199# ELF32-LLVM-NEXT: Offset: 0x374 200# ELF64-LLVM-NEXT: Offset: 0x5F0 201# ELF-LLVM-NEXT: VirtualAddress: 0x1000 202# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 203# ELF-LLVM-NEXT: FileSize: 3 204# ELF-LLVM-NEXT: MemSize: 3 205# ELF-LLVM-NEXT: Flags [ (0x0) 206# ELF-LLVM-NEXT: ] 207# ELF-LLVM-NEXT: Alignment: 1 208# ELF-LLVM-NEXT: } 209# ELF-LLVM-NEXT: ProgramHeader { 210# ELF-LLVM-NEXT: Type: PT_SHLIB (0x5) 211# ELF32-LLVM-NEXT: Offset: 0x374 212# ELF64-LLVM-NEXT: Offset: 0x5F0 213# ELF-LLVM-NEXT: VirtualAddress: 0x1000 214# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 215# ELF-LLVM-NEXT: FileSize: 1 216# ELF-LLVM-NEXT: MemSize: 1 217# ELF-LLVM-NEXT: Flags [ (0x0) 218# ELF-LLVM-NEXT: ] 219# ELF-LLVM-NEXT: Alignment: 1 220# ELF-LLVM-NEXT: } 221# ELF-LLVM-NEXT: ProgramHeader { 222# ELF-LLVM-NEXT: Type: PT_TLS (0x7) 223# ELF32-LLVM-NEXT: Offset: 0x382 224# ELF64-LLVM-NEXT: Offset: 0x5FE 225# ELF-LLVM-NEXT: VirtualAddress: 0x4000 226# ELF-LLVM-NEXT: PhysicalAddress: 0x4000 227# ELF-LLVM-NEXT: FileSize: 1 228# ELF-LLVM-NEXT: MemSize: 1 229# ELF-LLVM-NEXT: Flags [ (0x0) 230# ELF-LLVM-NEXT: ] 231# ELF-LLVM-NEXT: Alignment: 1 232# ELF-LLVM-NEXT: } 233# ELF-LLVM-NEXT: ProgramHeader { 234# ELF-LLVM-NEXT: Type: Unknown (0x60000000) 235# ELF32-LLVM-NEXT: Offset: 0x374 236# ELF64-LLVM-NEXT: Offset: 0x5F0 237# ELF-LLVM-NEXT: VirtualAddress: 0x1000 238# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 239# ELF-LLVM-NEXT: FileSize: 3 240# ELF-LLVM-NEXT: MemSize: 3 241# ELF-LLVM-NEXT: Flags [ (0x0) 242# ELF-LLVM-NEXT: ] 243# ELF-LLVM-NEXT: Alignment: 1 244# ELF-LLVM-NEXT: } 245# ELF-LLVM-NEXT: ProgramHeader { 246# ELF-LLVM-NEXT: Type: PT_GNU_EH_FRAME (0x6474E550) 247# ELF32-LLVM-NEXT: Offset: 0x374 248# ELF64-LLVM-NEXT: Offset: 0x5F0 249# ELF-LLVM-NEXT: VirtualAddress: 0x1000 250# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 251# ELF-LLVM-NEXT: FileSize: 3 252# ELF-LLVM-NEXT: MemSize: 3 253# ELF-LLVM-NEXT: Flags [ (0x0) 254# ELF-LLVM-NEXT: ] 255# ELF-LLVM-NEXT: Alignment: 1 256# ELF-LLVM-NEXT: } 257# ELF-LLVM-NEXT: ProgramHeader { 258# ELF-LLVM-NEXT: Type: PT_SUNW_UNWIND (0x6464E550) 259# ELF32-LLVM-NEXT: Offset: 0x374 260# ELF64-LLVM-NEXT: Offset: 0x5F0 261# ELF-LLVM-NEXT: VirtualAddress: 0x1000 262# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 263# ELF-LLVM-NEXT: FileSize: 3 264# ELF-LLVM-NEXT: MemSize: 3 265# ELF-LLVM-NEXT: Flags [ (0x0) 266# ELF-LLVM-NEXT: ] 267# ELF-LLVM-NEXT: Alignment: 1 268# ELF-LLVM-NEXT: } 269# ELF-LLVM-NEXT: ProgramHeader { 270# ELF-LLVM-NEXT: Type: PT_GNU_STACK (0x6474E551) 271# ELF32-LLVM-NEXT: Offset: 0x374 272# ELF64-LLVM-NEXT: Offset: 0x5F0 273# ELF-LLVM-NEXT: VirtualAddress: 0x1000 274# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 275# ELF-LLVM-NEXT: FileSize: 3 276# ELF-LLVM-NEXT: MemSize: 3 277# ELF-LLVM-NEXT: Flags [ (0x0) 278# ELF-LLVM-NEXT: ] 279# ELF-LLVM-NEXT: Alignment: 1 280# ELF-LLVM-NEXT: } 281# ELF-LLVM-NEXT: ProgramHeader { 282# ELF-LLVM-NEXT: Type: PT_GNU_RELRO (0x6474E552) 283# ELF32-LLVM-NEXT: Offset: 0x374 284# ELF64-LLVM-NEXT: Offset: 0x5F0 285# ELF-LLVM-NEXT: VirtualAddress: 0x1000 286# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 287# ELF-LLVM-NEXT: FileSize: 3 288# ELF-LLVM-NEXT: MemSize: 3 289# ELF-LLVM-NEXT: Flags [ (0x0) 290# ELF-LLVM-NEXT: ] 291# ELF-LLVM-NEXT: Alignment: 1 292# ELF-LLVM-NEXT: } 293# ELF-LLVM-NEXT: ProgramHeader { 294# ELF-LLVM-NEXT: Type: PT_GNU_PROPERTY (0x6474E553) 295# ELF32-LLVM-NEXT: Offset: 0x374 296# ELF64-LLVM-NEXT: Offset: 0x5F0 297# ELF-LLVM-NEXT: VirtualAddress: 0x1000 298# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 299# ELF-LLVM-NEXT: FileSize: 3 300# ELF-LLVM-NEXT: MemSize: 3 301# ELF-LLVM-NEXT: Flags [ (0x0) 302# ELF-LLVM-NEXT: ] 303# ELF-LLVM-NEXT: Alignment: 1 304# ELF-LLVM-NEXT: } 305# ELF-LLVM-NEXT: ProgramHeader { 306# ELF-LLVM-NEXT: Type: PT_OPENBSD_MUTABLE (0x65A3DBE5) 307# ELF32-LLVM-NEXT: Offset: 0x374 308# ELF64-LLVM-NEXT: Offset: 0x5F0 309# ELF-LLVM-NEXT: VirtualAddress: 0x1000 310# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 311# ELF-LLVM-NEXT: FileSize: 3 312# ELF-LLVM-NEXT: MemSize: 3 313# ELF-LLVM-NEXT: Flags [ (0x0) 314# ELF-LLVM-NEXT: ] 315# ELF-LLVM-NEXT: Alignment: 1 316# ELF-LLVM-NEXT: } 317# ELF-LLVM-NEXT: ProgramHeader { 318# ELF-LLVM-NEXT: Type: PT_OPENBSD_RANDOMIZE (0x65A3DBE6) 319# ELF32-LLVM-NEXT: Offset: 0x374 320# ELF64-LLVM-NEXT: Offset: 0x5F0 321# ELF-LLVM-NEXT: VirtualAddress: 0x1000 322# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 323# ELF-LLVM-NEXT: FileSize: 3 324# ELF-LLVM-NEXT: MemSize: 3 325# ELF-LLVM-NEXT: Flags [ (0x0) 326# ELF-LLVM-NEXT: ] 327# ELF-LLVM-NEXT: Alignment: 1 328# ELF-LLVM-NEXT: } 329# ELF-LLVM-NEXT: ProgramHeader { 330# ELF-LLVM-NEXT: Type: PT_OPENBSD_WXNEEDED (0x65A3DBE7) 331# ELF32-LLVM-NEXT: Offset: 0x374 332# ELF64-LLVM-NEXT: Offset: 0x5F0 333# ELF-LLVM-NEXT: VirtualAddress: 0x1000 334# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 335# ELF-LLVM-NEXT: FileSize: 3 336# ELF-LLVM-NEXT: MemSize: 3 337# ELF-LLVM-NEXT: Flags [ (0x0) 338# ELF-LLVM-NEXT: ] 339# ELF-LLVM-NEXT: Alignment: 1 340# ELF-LLVM-NEXT: } 341# ELF-LLVM-NEXT: ProgramHeader { 342# ELF-LLVM-NEXT: Type: PT_OPENBSD_NOBTCFI (0x65A3DBE8) 343# ELF32-LLVM-NEXT: Offset: 0x374 344# ELF64-LLVM-NEXT: Offset: 0x5F0 345# ELF-LLVM-NEXT: VirtualAddress: 0x1000 346# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 347# ELF-LLVM-NEXT: FileSize: 3 348# ELF-LLVM-NEXT: MemSize: 3 349# ELF-LLVM-NEXT: Flags [ (0x0) 350# ELF-LLVM-NEXT: ] 351# ELF-LLVM-NEXT: Alignment: 1 352# ELF-LLVM-NEXT: } 353# ELF-LLVM-NEXT: ProgramHeader { 354# ELF-LLVM-NEXT: Type: PT_OPENBSD_SYSCALLS (0x65A3DBE9) 355# ELF32-LLVM-NEXT: Offset: 0x374 356# ELF64-LLVM-NEXT: Offset: 0x5F0 357# ELF-LLVM-NEXT: VirtualAddress: 0x1000 358# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 359# ELF-LLVM-NEXT: FileSize: 3 360# ELF-LLVM-NEXT: MemSize: 3 361# ELF-LLVM-NEXT: Flags [ (0x0) 362# ELF-LLVM-NEXT: ] 363# ELF-LLVM-NEXT: Alignment: 1 364# ELF-LLVM-NEXT: } 365# ELF-LLVM-NEXT: ProgramHeader { 366# ELF-LLVM-NEXT: Type: PT_OPENBSD_BOOTDATA (0x65A41BE6) 367# ELF32-LLVM-NEXT: Offset: 0x374 368# ELF64-LLVM-NEXT: Offset: 0x5F0 369# ELF-LLVM-NEXT: VirtualAddress: 0x1000 370# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 371# ELF-LLVM-NEXT: FileSize: 3 372# ELF-LLVM-NEXT: MemSize: 3 373# ELF-LLVM-NEXT: Flags [ (0x0) 374# ELF-LLVM-NEXT: ] 375# ELF-LLVM-NEXT: Alignment: 1 376# ELF-LLVM-NEXT: } 377# ELF-LLVM-NEXT: ProgramHeader { 378# ELF-LLVM-NEXT: Type: Unknown (0x6FFFFFFF) 379# ELF32-LLVM-NEXT: Offset: 0x374 380# ELF64-LLVM-NEXT: Offset: 0x5F0 381# ELF-LLVM-NEXT: VirtualAddress: 0x1000 382# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 383# ELF-LLVM-NEXT: FileSize: 3 384# ELF-LLVM-NEXT: MemSize: 3 385# ELF-LLVM-NEXT: Flags [ (0x0) 386# ELF-LLVM-NEXT: ] 387# ELF-LLVM-NEXT: Alignment: 1 388# ELF-LLVM-NEXT: } 389# ELF-LLVM-NEXT: ProgramHeader { 390# ELF-LLVM-NEXT: Type: Unknown (0x70000000) 391# ELF32-LLVM-NEXT: Offset: 0x374 392# ELF64-LLVM-NEXT: Offset: 0x5F0 393# ELF-LLVM-NEXT: VirtualAddress: 0x1000 394# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 395# ELF-LLVM-NEXT: FileSize: 3 396# ELF-LLVM-NEXT: MemSize: 3 397# ELF-LLVM-NEXT: Flags [ (0x0) 398# ELF-LLVM-NEXT: ] 399# ELF-LLVM-NEXT: Alignment: 1 400# ELF-LLVM-NEXT: } 401# ELF-LLVM-NEXT: ProgramHeader { 402# ELF-LLVM-NEXT: Type: Unknown (0x70000001) 403# ELF32-LLVM-NEXT: Offset: 0x374 404# ELF64-LLVM-NEXT: Offset: 0x5F0 405# ELF-LLVM-NEXT: VirtualAddress: 0x1000 406# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 407# ELF-LLVM-NEXT: FileSize: 3 408# ELF-LLVM-NEXT: MemSize: 3 409# ELF-LLVM-NEXT: Flags [ (0x0) 410# ELF-LLVM-NEXT: ] 411# ELF-LLVM-NEXT: Alignment: 1 412# ELF-LLVM-NEXT: } 413# ELF-LLVM-NEXT: ProgramHeader { 414# ELF-LLVM-NEXT: Type: Unknown (0x70000002) 415# ELF32-LLVM-NEXT: Offset: 0x374 416# ELF64-LLVM-NEXT: Offset: 0x5F0 417# ELF-LLVM-NEXT: VirtualAddress: 0x1000 418# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 419# ELF-LLVM-NEXT: FileSize: 3 420# ELF-LLVM-NEXT: MemSize: 3 421# ELF-LLVM-NEXT: Flags [ (0x0) 422# ELF-LLVM-NEXT: ] 423# ELF-LLVM-NEXT: Alignment: 1 424# ELF-LLVM-NEXT: } 425# ELF-LLVM-NEXT: ProgramHeader { 426# ELF-LLVM-NEXT: Type: Unknown (0x70000003) 427# ELF32-LLVM-NEXT: Offset: 0x374 428# ELF64-LLVM-NEXT: Offset: 0x5F0 429# ELF-LLVM-NEXT: VirtualAddress: 0x1000 430# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 431# ELF-LLVM-NEXT: FileSize: 3 432# ELF-LLVM-NEXT: MemSize: 3 433# ELF-LLVM-NEXT: Flags [ (0x0) 434# ELF-LLVM-NEXT: ] 435# ELF-LLVM-NEXT: Alignment: 1 436# ELF-LLVM-NEXT: } 437# ELF-LLVM-NEXT: ProgramHeader { 438# ELF-LLVM-NEXT: Type: Unknown (0x7FFFFFFF) 439# ELF32-LLVM-NEXT: Offset: 0x374 440# ELF64-LLVM-NEXT: Offset: 0x5F0 441# ELF-LLVM-NEXT: VirtualAddress: 0x1000 442# ELF-LLVM-NEXT: PhysicalAddress: 0x1000 443# ELF-LLVM-NEXT: FileSize: 3 444# ELF-LLVM-NEXT: MemSize: 3 445# ELF-LLVM-NEXT: Flags [ (0x0) 446# ELF-LLVM-NEXT: ] 447# ELF-LLVM-NEXT: Alignment: 1 448# ELF-LLVM-NEXT: } 449# ELF-LLVM-NEXT: ] 450 451--- !ELF 452FileHeader: 453 Class: ELFCLASS[[BITS]] 454 Data: ELFDATA2LSB 455 Type: ET_EXEC 456 Machine: [[MACHINE]] 457Sections: 458 - Name: .foo.begin 459 Type: SHT_PROGBITS 460 Flags: [ SHF_ALLOC ] 461 Address: 0x1000 462 Size: 0x1 463 - Name: .foo.end 464 Type: SHT_PROGBITS 465 Flags: [ SHF_ALLOC ] 466 Size: 0x2 467 - Name: .bar.begin 468 Type: SHT_PROGBITS 469 Flags: [ SHF_ALLOC ] 470 Address: 0x2000 471 Size: 0x3 472 - Name: .bar.end 473 Type: SHT_PROGBITS 474 Flags: [ SHF_ALLOC ] 475 Size: 0x4 476 - Name: .interp 477 Type: SHT_PROGBITS 478 Flags: [ SHF_ALLOC ] 479 Address: 0x3000 480 Content: "41424300" ## "ABC" 481 - Name: .tls 482 Type: SHT_PROGBITS 483 Flags: [ SHF_ALLOC, SHF_TLS ] 484 Address: 0x4000 485 Size: 0x1 486 - Name: .unused 487 Type: SHT_PROGBITS 488 Flags: [ SHF_ALLOC, SHF_TLS ] 489 Address: 0x5000 490 Size: 0x1 491ProgramHeaders: 492## Case 1: an arbitrary segment with sections. 493 - Type: PT_PHDR 494 Flags: [ PF_W ] 495 VAddr: 0x1000 496 FirstSec: .foo.begin 497 LastSec: .foo.end 498## Case 2: another segment with different sections. 499 - Type: PT_PHDR 500 Flags: [ PF_X ] 501 VAddr: 0x2000 502 FirstSec: .bar.begin 503 LastSec: .bar.end 504## Case 3: the PT_NULL segment. 505 - Type: PT_NULL 506 Flags: [ PF_X ] 507 VAddr: 0x2000 508 FirstSec: .bar.begin 509 LastSec: .bar.end 510## Case 4: the PT_DYNAMIC segment. 511 - Type: PT_DYNAMIC 512 Flags: [ PF_R, PF_W, PF_X ] 513 VAddr: 0x1000 514 FirstSec: .foo.begin 515 LastSec: .foo.end 516## Case 5: the PT_INTERP segment. 517 - Type: PT_INTERP 518 Flags: [ PF_R, PF_W ] 519 VAddr: 0x3000 520 FirstSec: .interp 521 LastSec: .interp 522## Case 6: the PT_NOTE segment. 523 - Type: PT_NOTE 524 VAddr: 0x1000 525 FirstSec: .foo.begin 526 LastSec: .foo.end 527## Case 7: the PT_SHLIB segment. 528 - Type: PT_SHLIB 529 VAddr: 0x1000 530 FirstSec: .foo.begin 531 LastSec: .foo.begin 532## Case 8: the PT_TLS segment. 533 - Type: PT_TLS 534 VAddr: 0x4000 535 FirstSec: .tls 536 LastSec: .tls 537## Case 9: the PT_LOOS segment. 538 - Type: 0x60000000 ## PT_LOOS 539 VAddr: 0x1000 540 FirstSec: .foo.begin 541 LastSec: .foo.end 542## Case 10: the PT_GNU_EH_FRAME segment. 543 - Type: PT_GNU_EH_FRAME 544 VAddr: 0x1000 545 FirstSec: .foo.begin 546 LastSec: .foo.end 547## Case 11: the PT_SUNW_UNWIND segment. 548 - Type: 0x6464e550 ## PT_SUNW_UNWIND 549 VAddr: 0x1000 550 FirstSec: .foo.begin 551 LastSec: .foo.end 552## Case 12: the PT_GNU_STACK segment. 553 - Type: PT_GNU_STACK 554 VAddr: 0x1000 555 FirstSec: .foo.begin 556 LastSec: .foo.end 557## Case 13: the PT_GNU_RELRO segment. 558 - Type: PT_GNU_RELRO 559 VAddr: 0x1000 560 FirstSec: .foo.begin 561 LastSec: .foo.end 562## Case 14: the PT_GNU_PROPERTY segment. 563 - Type: PT_GNU_PROPERTY 564 VAddr: 0x1000 565 FirstSec: .foo.begin 566 LastSec: .foo.end 567## Case 15: the PT_OPENBSD_MUTABLE segment. 568 - Type: 0x65a3dbe5 ## PT_OPENBSD_MUTABLE 569 VAddr: 0x1000 570 FirstSec: .foo.begin 571 LastSec: .foo.end 572## Case 16: the PT_OPENBSD_RANDOMIZE segment. 573 - Type: 0x65a3dbe6 ## PT_OPENBSD_RANDOMIZE 574 VAddr: 0x1000 575 FirstSec: .foo.begin 576 LastSec: .foo.end 577## Case 17: the PT_OPENBSD_WXNEEDED segment. 578 - Type: 0x65a3dbe7 ## PT_OPENBSD_WXNEEDED 579 VAddr: 0x1000 580 FirstSec: .foo.begin 581 LastSec: .foo.end 582## Case 18: the PT_OPENBSD_NOBTCFI segment. 583 - Type: 0x65a3dbe8 ## PT_OPENBSD_NOBTCFI 584 VAddr: 0x1000 585 FirstSec: .foo.begin 586 LastSec: .foo.end 587## Case 19: the PT_OPENBSD_SYSCALLS segment. 588 - Type: 0x65a3dbe9 ## PT_OPENBSD_SYSCALLS 589 VAddr: 0x1000 590 FirstSec: .foo.begin 591 LastSec: .foo.end 592## Case 20: the PT_OPENBSD_BOOTDATA segment. 593 - Type: 0x65a41be6 ## PT_OPENBSD_BOOTDATA 594 VAddr: 0x1000 595 FirstSec: .foo.begin 596 LastSec: .foo.end 597## Case 21: the PT_HIOS segment. 598 - Type: 0x6fffffff ## PT_HIOS 599 VAddr: 0x1000 600 FirstSec: .foo.begin 601 LastSec: .foo.end 602## Case 22: the PT_LOPROC/PT_ARM_ARCHEXT/PT_MIPS_REGINFO segment. 603 - Type: 0x70000000 ## PT_LOPROC/PT_ARM_ARCHEXT/PT_MIPS_REGINFO 604 VAddr: 0x1000 605 FirstSec: .foo.begin 606 LastSec: .foo.end 607## Case 23: the PT_ARM_EXIDX/PT_MIPS_RTPROC segment. 608 - Type: 0x70000001 ## PT_ARM_EXIDX, PT_MIPS_RTPROC 609 VAddr: 0x1000 610 FirstSec: .foo.begin 611 LastSec: .foo.end 612## Case 24: the PT_MIPS_OPTIONS segment. 613 - Type: 0x70000002 ## PT_MIPS_OPTIONS 614 VAddr: 0x1000 615 FirstSec: .foo.begin 616 LastSec: .foo.end 617## Case 25: the PT_MIPS_ABIFLAGS/PT_RISCV_ATTRIBUTES segment. 618 - Type: 0x70000003 ## PT_MIPS_ABIFLAGS/PT_RISCV_ATTRIBUTES 619 VAddr: 0x1000 620 FirstSec: .foo.begin 621 LastSec: .foo.end 622## Case 26: the PT_HIPROC segment. 623 - Type: 0x7fffffff ## PT_HIPROC 624 VAddr: 0x1000 625 FirstSec: .foo.begin 626 LastSec: .foo.end 627 628## Check how we dump ARM specific program headers. 629# RUN: yaml2obj --docnum=1 -DBITS=64 -DMACHINE=EM_ARM %s -o %tarm.elf 630# RUN: llvm-readelf --program-headers %tarm.elf | FileCheck %s --check-prefix=ARM-GNU 631# RUN: llvm-readobj --program-headers %tarm.elf | FileCheck %s --check-prefix=ARM-LLVM 632 633# ARM-GNU: <unknown>: 0x70000000 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 634# ARM-GNU-NEXT: EXIDX 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 635# ARM-GNU-NEXT: <unknown>: 0x70000002 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 636 637# ARM-LLVM: ProgramHeader { 638# ARM-LLVM: Type: Unknown (0x70000000) 639# ARM-LLVM: ProgramHeader { 640# ARM-LLVM-NEXT: Type: PT_ARM_EXIDX (0x70000001) 641# ARM-LLVM: ProgramHeader { 642# ARM-LLVM-NEXT: Type: Unknown (0x70000002) 643 644## Check how we dump MIPS specific program headers. 645# RUN: yaml2obj --docnum=1 -DBITS=64 -DMACHINE=EM_MIPS %s -o %tmips.elf 646# RUN: llvm-readelf --program-headers %tmips.elf | FileCheck %s --check-prefix=MIPS-GNU 647# RUN: llvm-readobj --program-headers %tmips.elf | FileCheck %s --check-prefix=MIPS-LLVM 648 649# MIPS-GNU: REGINFO 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 650# MIPS-GNU-NEXT: RTPROC 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 651# MIPS-GNU-NEXT: OPTIONS 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 652# MIPS-GNU-NEXT: ABIFLAGS 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 653 654# MIPS-LLVM: ProgramHeader { 655# MIPS-LLVM: Type: PT_MIPS_REGINFO (0x70000000) 656# MIPS-LLVM: ProgramHeader { 657# MIPS-LLVM-NEXT: Type: PT_MIPS_RTPROC (0x70000001) 658# MIPS-LLVM: ProgramHeader { 659# MIPS-LLVM-NEXT: Type: PT_MIPS_OPTIONS (0x70000002) 660# MIPS-LLVM: ProgramHeader { 661# MIPS-LLVM-NEXT: Type: PT_MIPS_ABIFLAGS (0x70000003) 662 663## CHECK how we dump RISCV specific program headers. 664# RUN: yaml2obj --docnum=1 -DBITS=64 -DMACHINE=EM_RISCV %s -o %triscv.elf 665# RUN: llvm-readelf --program-headers %triscv.elf | FileCheck %s --check-prefix=RISCV-GNU 666# RUN: llvm-readobj --program-headers %triscv.elf | FileCheck %s --check-prefix=RISCV-LLVM 667 668# RISCV-GNU: ATTRIBUTES 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1 669# RISCV-LLVM: ProgramHeader { 670# RISCV-LLVM: Type: PT_RISCV_ATTRIBUTES (0x70000003) 671 672## Check that llvm-readelf reports a warning when a program interpreter 673## name is non-null-terminated or when PT_INTERP has an offset that 674## goes past the end of the file. 675# RUN: yaml2obj --docnum=2 %s -o %t.err 676 677## Show the size of the output produced. It is used in the YAML below. 678# RUN: wc -c < %t.err | FileCheck %s --check-prefix=SIZE 679# SIZE: 616 680 681## Write the additional 'C', '\0, 'C' bytes to the end. 682# RUN: echo -n -e "C\x00C" >> %t.err 683 684# RUN: llvm-readelf --program-headers %t.err 2>&1 | \ 685# RUN: FileCheck %s -DFILE=%t.err --check-prefix=ERROR-INTERP --implicit-check-not=warning: 686 687# ERROR-INTERP: Type Offset 688# ERROR-INTERP-NEXT: INTERP 0x000[[#%x,OFFSET:0x268]] 689# ERROR-INTERP-NEXT: [Requesting program interpreter: C] 690# ERROR-INTERP-NEXT: INTERP 0x000[[#OFFSET + 1]] 691# ERROR-INTERP-NEXT: [Requesting program interpreter: ] 692# ERROR-INTERP-NEXT: INTERP 0x000[[#OFFSET + 2]] 693# ERROR-INTERP-NEXT: warning: '[[FILE]]': unable to read program interpreter name at offset 0x[[#OFFSET+2]]: it is not null-terminated 694# ERROR-INTERP-NEXT: INTERP 0x000[[#OFFSET + 3]] 695# ERROR-INTERP-NEXT: warning: '[[FILE]]': unable to read program interpreter name at offset 0x[[#OFFSET+3]]: it goes past the end of the file (0x[[#OFFSET + 3]]) 696# ERROR-INTERP-NEXT: INTERP 0xaabbccddeeff1122 697# ERROR-INTERP-NEXT: warning: '[[FILE]]': unable to read program interpreter name at offset 0xaabbccddeeff1122: it goes past the end of the file (0x[[#OFFSET + 3]]) 698# ERROR-INTERP-NEXT: INTERP 0xaabbccddeeff1122 699 700--- !ELF 701FileHeader: 702 Class: ELFCLASS64 703 Data: ELFDATA2LSB 704 Type: ET_EXEC 705ProgramHeaders: 706## Case 1: the offset points to the first additional byte. 707 - Type: PT_INTERP 708 Offset: 616 709## Case 1: the offset points to the second additional byte, 710## which is a null byte. 711 - Type: PT_INTERP 712 Offset: 617 713## Case 3: the offset points to the third additional 714## byte, which is the last byte in the file. 715 - Type: PT_INTERP 716 Offset: 618 717## Case 4: the offset goes 1 byte past the end of the file. 718 - Type: PT_INTERP 719 Offset: 619 720## Case 5: an arbitrary large offset that goes past the end of the file. 721 - Type: PT_INTERP 722 Offset: 0xAABBCCDDEEFF1122 723## Case 6: the same as case 5. Used to demonstrate that we don't report 724## the same warning twice. 725 - Type: PT_INTERP 726 Offset: 0xAABBCCDDEEFF1122 727 728## Check we report a warning when we are unable to read program headers. 729## Case A: the e_phentsize field is invalid. 730# RUN: yaml2obj --docnum=3 -DPHENTSIZE=1 %s -o %t.phdr.err 731# RUN: llvm-readelf --program-headers %t.phdr.err 2>&1 | \ 732# RUN: FileCheck %s -DFILE=%t.phdr.err --check-prefix=WARN-PHENTSIZE-GNU 733# RUN: llvm-readobj --program-headers %t.phdr.err 2>&1 | \ 734# RUN: FileCheck %s -DFILE=%t.phdr.err --check-prefix=WARN-PHENTSIZE-LLVM 735 736# WARN-PHENTSIZE-GNU: Program Headers: 737# WARN-PHENTSIZE-GNU-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 738# WARN-PHENTSIZE-GNU-NEXT: warning: '[[FILE]]': unable to dump program headers: invalid e_phentsize: 1 739# WARN-PHENTSIZE-GNU: Section to Segment mapping: 740# WARN-PHENTSIZE-GNU-NEXT: Segment Sections... 741# WARN-PHENTSIZE-GNU-NEXT: warning: '[[FILE]]': can't read program headers to build section to segment mapping: invalid e_phentsize: 1 742 743# WARN-PHENTSIZE-LLVM: ProgramHeaders [ 744# WARN-PHENTSIZE-LLVM-NEXT: warning: '[[FILE]]': unable to dump program headers: invalid e_phentsize: 1 745# WARN-PHENTSIZE-LLVM-NEXT: ] 746 747--- !ELF 748FileHeader: 749 Class: ELFCLASS64 750 Data: ELFDATA2LSB 751 Type: ET_EXEC 752 EPhEntSize: [[PHENTSIZE=<none>]] 753 EPhOff: [[PHOFF=<none>]] 754Sections: 755 - Name: .foo 756 Type: SHT_PROGBITS 757ProgramHeaders: 758 - Type: PT_PHDR 759 FirstSec: .foo 760 LastSec: .foo 761 762## Case B: the value of the e_phoff field is invalid. 763 764## Check that we do not report a warning when the program header table ends right before the end of the file. 765## 0x160 + size of headers (56) == file size. 766# RUN: yaml2obj --docnum=3 -DPHOFF=0x160 %s -o %t.phdr.no.err2 767# RUN: llvm-readelf %t.phdr.no.err2 --program-headers 2>&1 | FileCheck %s --implicit-check-not=warning: 768# RUN: llvm-readobj %t.phdr.no.err2 --program-headers 2>&1 | FileCheck %s --implicit-check-not=warning: 769 770## Check we report a warning when e_phoff goes 1 byte past the end of the file. 771# RUN: yaml2obj --docnum=3 -DPHOFF=0x161 %s -o %t.phdr.err2 772# RUN: llvm-readelf --program-headers %t.phdr.err2 2>&1 | \ 773# RUN: FileCheck %s -DFILE=%t.phdr.err2 --check-prefix=WARN-PHOFF-GNU -DOFF=0x161 774# RUN: llvm-readobj --program-headers %t.phdr.err2 2>&1 | \ 775# RUN: FileCheck %s -DFILE=%t.phdr.err2 --check-prefix=WARN-PHOFF-LLVM -DOFF=0x161 776 777# WARN-PHOFF-GNU: Program Headers: 778# WARN-PHOFF-GNU-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 779# WARN-PHOFF-GNU-NEXT: warning: '[[FILE]]': unable to dump program headers: program headers are longer than binary of size 408: e_phoff = [[OFF]], e_phnum = 1, e_phentsize = 56 780# WARN-PHOFF-GNU: Section to Segment mapping: 781# WARN-PHOFF-GNU-NEXT: Segment Sections... 782# WARN-PHOFF-GNU-NEXT: warning: '[[FILE]]': can't read program headers to build section to segment mapping: program headers are longer than binary of size 408: e_phoff = [[OFF]], e_phnum = 1, e_phentsize = 56 783 784# WARN-PHOFF-LLVM: ProgramHeaders [ 785# WARN-PHOFF-LLVM-NEXT: warning: '[[FILE]]': unable to dump program headers: program headers are longer than binary of size 408: e_phoff = [[OFF]], e_phnum = 1, e_phentsize = 56 786# WARN-PHOFF-LLVM-NEXT: ] 787 788## Check we report a warning when the value of e_phoff is so large that 789## e_phoff + e_phnum * e_phentsize > UINT64_MAX. 790# RUN: yaml2obj --docnum=3 -DPHOFF=0xffffffffffffffff %s -o %t.phdr.err3 791# RUN: llvm-readelf --program-headers %t.phdr.err3 2>&1 | \ 792# RUN: FileCheck %s -DFILE=%t.phdr.err3 --check-prefix=WARN-PHOFF-GNU -DOFF=0xffffffffffffffff 793# RUN: llvm-readobj --program-headers %t.phdr.err3 2>&1 | \ 794# RUN: FileCheck %s -DFILE=%t.phdr.err3 --check-prefix=WARN-PHOFF-LLVM -DOFF=0xffffffffffffffff 795