795 lines · plain
1## Check how we dump program headers and print sections to segments2## 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.elf8# RUN: llvm-readelf -l %t32.elf 2>&1 > %t.readelf-l.txt9# RUN: llvm-readelf --program-headers %t32.elf 2>&1 > %t.readelf-pheaders.txt10# RUN: cmp %t.readelf-l.txt %t.readelf-pheaders.txt11# RUN: llvm-readelf --segments %t32.elf 2>&1 > %t.readelf-segments.txt12# RUN: cmp %t.readelf-l.txt %t.readelf-segments.txt13 14## Case B: test llvm-readobj tool.15# RUN: llvm-readobj -l %t32.elf 2>&1 > %t.readobj-l.txt16# RUN: llvm-readobj --program-headers %t32.elf 2>&1 > %t.readobj-pheaders.txt17# RUN: cmp %t.readobj-l.txt %t.readobj-pheaders.txt18# RUN: llvm-readobj --segments %t32.elf 2>&1 > %t.readobj-segments.txt19# RUN: cmp %t.readobj-l.txt %t.readobj-segments.txt20 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.txt24# RUN: FileCheck %s --check-prefixes=ELF-LLVM,ELF32-LLVM \25# RUN: --match-full-lines --input-file=%t.readobj-l.txt26 27# RUN: yaml2obj --docnum=1 -DBITS=64 -DMACHINE=EM_X86_64 %s -o %t64.elf28# RUN: llvm-readelf -l %t64.elf | \29# RUN: FileCheck %s --check-prefixes=ELF64,MAPPING --strict-whitespace --match-full-lines30# RUN: llvm-readobj -l %t64.elf | FileCheck %s --check-prefixes=ELF-LLVM,ELF64-LLVM31 32# ELF32:There are 26 program headers, starting at offset 5233# ELF32-EMPTY:34# ELF32-NEXT:Program Headers:35# ELF32-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align36# ELF32-NEXT: PHDR 0x000374 0x00001000 0x00001000 0x00003 0x00003 W 0x137# ELF32-NEXT: PHDR 0x000377 0x00002000 0x00002000 0x00007 0x00007 E 0x138# ELF32-NEXT: NULL 0x000377 0x00002000 0x00002000 0x00007 0x00007 E 0x139# ELF32-NEXT: DYNAMIC 0x000374 0x00001000 0x00001000 0x00003 0x00003 RWE 0x140# ELF32-NEXT: INTERP 0x00037e 0x00003000 0x00003000 0x00004 0x00004 RW 0x141# ELF32-NEXT: [Requesting program interpreter: ABC]42# ELF32-NEXT: NOTE 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x143# ELF32-NEXT: SHLIB 0x000374 0x00001000 0x00001000 0x00001 0x00001 0x144# ELF32-NEXT: TLS 0x000382 0x00004000 0x00004000 0x00001 0x00001 0x145# ELF32-NEXT: <unknown>: 0x60000000 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x146# ELF32-NEXT: GNU_EH_FRAME 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x147# ELF32-NEXT: SUNW_UNWIND 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x148# ELF32-NEXT: GNU_STACK 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x149# ELF32-NEXT: GNU_RELRO 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x150# ELF32-NEXT: GNU_PROPERTY 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x151# ELF32-NEXT: OPENBSD_MUTABLE 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x152# ELF32-NEXT: OPENBSD_RANDOMIZE 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x153# ELF32-NEXT: OPENBSD_WXNEEDED 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x154# ELF32-NEXT: OPENBSD_NOBTCFI 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x155# ELF32-NEXT: OPENBSD_SYSCALLS 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x156# ELF32-NEXT: OPENBSD_BOOTDATA 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x157# ELF32-NEXT: <unknown>: 0x6fffffff 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x158# ELF32-NEXT: <unknown>: 0x70000000 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x159# ELF32-NEXT: <unknown>: 0x70000001 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x160# ELF32-NEXT: <unknown>: 0x70000002 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x161# ELF32-NEXT: <unknown>: 0x70000003 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x162# ELF32-NEXT: <unknown>: 0x7fffffff 0x000374 0x00001000 0x00001000 0x00003 0x00003 0x163# ELF32-EMPTY:64 65# ELF64:There are 26 program headers, starting at offset 6466# ELF64-EMPTY:67# ELF64-NEXT:Program Headers:68# ELF64-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align69# ELF64-NEXT: PHDR 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 W 0x170# ELF64-NEXT: PHDR 0x0005f3 0x0000000000002000 0x0000000000002000 0x000007 0x000007 E 0x171# ELF64-NEXT: NULL 0x0005f3 0x0000000000002000 0x0000000000002000 0x000007 0x000007 E 0x172# ELF64-NEXT: DYNAMIC 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 RWE 0x173# ELF64-NEXT: INTERP 0x0005fa 0x0000000000003000 0x0000000000003000 0x000004 0x000004 RW 0x174# ELF64-NEXT: [Requesting program interpreter: ABC]75# ELF64-NEXT: NOTE 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x176# ELF64-NEXT: SHLIB 0x0005f0 0x0000000000001000 0x0000000000001000 0x000001 0x000001 0x177# ELF64-NEXT: TLS 0x0005fe 0x0000000000004000 0x0000000000004000 0x000001 0x000001 0x178# ELF64-NEXT: <unknown>: 0x60000000 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x179# ELF64-NEXT: GNU_EH_FRAME 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x180# ELF64-NEXT: SUNW_UNWIND 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x181# ELF64-NEXT: GNU_STACK 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x182# ELF64-NEXT: GNU_RELRO 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x183# ELF64-NEXT: GNU_PROPERTY 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x184# ELF64-NEXT: OPENBSD_MUTABLE 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x185# ELF64-NEXT: OPENBSD_RANDOMIZE 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x186# ELF64-NEXT: OPENBSD_WXNEEDED 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x187# ELF64-NEXT: OPENBSD_NOBTCFI 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x188# ELF64-NEXT: OPENBSD_SYSCALLS 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x189# ELF64-NEXT: OPENBSD_BOOTDATA 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x190# ELF64-NEXT: <unknown>: 0x6fffffff 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x191# ELF64-NEXT: <unknown>: 0x70000000 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x192# ELF64-NEXT: <unknown>: 0x70000001 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x193# ELF64-NEXT: <unknown>: 0x70000002 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x194# ELF64-NEXT: <unknown>: 0x70000003 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x195# ELF64-NEXT: <unknown>: 0x7fffffff 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x196# 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: 0x374132# ELF64-LLVM-NEXT: Offset: 0x5F0133# ELF-LLVM-NEXT: VirtualAddress: 0x1000134# ELF-LLVM-NEXT: PhysicalAddress: 0x1000135# ELF-LLVM-NEXT: FileSize: 3136# ELF-LLVM-NEXT: MemSize: 3137# ELF-LLVM-NEXT: Flags [ (0x2)138# ELF-LLVM-NEXT: PF_W (0x2)139# ELF-LLVM-NEXT: ]140# ELF-LLVM-NEXT: Alignment: 1141# ELF-LLVM-NEXT: }142# ELF-LLVM-NEXT: ProgramHeader {143# ELF-LLVM-NEXT: Type: PT_PHDR (0x6)144# ELF32-LLVM-NEXT: Offset: 0x377145# ELF64-LLVM-NEXT: Offset: 0x5F3146# ELF-LLVM-NEXT: VirtualAddress: 0x2000147# ELF-LLVM-NEXT: PhysicalAddress: 0x2000148# ELF-LLVM-NEXT: FileSize: 7149# ELF-LLVM-NEXT: MemSize: 7150# ELF-LLVM-NEXT: Flags [ (0x1)151# ELF-LLVM-NEXT: PF_X (0x1)152# ELF-LLVM-NEXT: ]153# ELF-LLVM-NEXT: Alignment: 1154# ELF-LLVM-NEXT: }155# ELF-LLVM-NEXT: ProgramHeader {156# ELF-LLVM-NEXT: Type: PT_NULL (0x0)157# ELF32-LLVM-NEXT: Offset: 0x377158# ELF64-LLVM-NEXT: Offset: 0x5F3159# ELF-LLVM-NEXT: VirtualAddress: 0x2000160# ELF-LLVM-NEXT: PhysicalAddress: 0x2000161# ELF-LLVM-NEXT: FileSize: 7162# ELF-LLVM-NEXT: MemSize: 7163# ELF-LLVM-NEXT: Flags [ (0x1)164# ELF-LLVM-NEXT: PF_X (0x1)165# ELF-LLVM-NEXT: ]166# ELF-LLVM-NEXT: Alignment: 1167# ELF-LLVM-NEXT: }168# ELF-LLVM-NEXT: ProgramHeader {169# ELF-LLVM-NEXT: Type: PT_DYNAMIC (0x2)170# ELF32-LLVM-NEXT: Offset: 0x374171# ELF64-LLVM-NEXT: Offset: 0x5F0172# ELF-LLVM-NEXT: VirtualAddress: 0x1000173# ELF-LLVM-NEXT: PhysicalAddress: 0x1000174# ELF-LLVM-NEXT: FileSize: 3175# ELF-LLVM-NEXT: MemSize: 3176# 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: 1182# ELF-LLVM-NEXT: }183# ELF-LLVM-NEXT: ProgramHeader {184# ELF-LLVM-NEXT: Type: PT_INTERP (0x3)185# ELF32-LLVM-NEXT: Offset: 0x37E186# ELF64-LLVM-NEXT: Offset: 0x5FA187# ELF-LLVM-NEXT: VirtualAddress: 0x3000188# ELF-LLVM-NEXT: PhysicalAddress: 0x3000189# ELF-LLVM-NEXT: FileSize: 4190# ELF-LLVM-NEXT: MemSize: 4191# 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: 1196# ELF-LLVM-NEXT: }197# ELF-LLVM-NEXT: ProgramHeader {198# ELF-LLVM-NEXT: Type: PT_NOTE (0x4)199# ELF32-LLVM-NEXT: Offset: 0x374200# ELF64-LLVM-NEXT: Offset: 0x5F0201# ELF-LLVM-NEXT: VirtualAddress: 0x1000202# ELF-LLVM-NEXT: PhysicalAddress: 0x1000203# ELF-LLVM-NEXT: FileSize: 3204# ELF-LLVM-NEXT: MemSize: 3205# ELF-LLVM-NEXT: Flags [ (0x0)206# ELF-LLVM-NEXT: ]207# ELF-LLVM-NEXT: Alignment: 1208# ELF-LLVM-NEXT: }209# ELF-LLVM-NEXT: ProgramHeader {210# ELF-LLVM-NEXT: Type: PT_SHLIB (0x5)211# ELF32-LLVM-NEXT: Offset: 0x374212# ELF64-LLVM-NEXT: Offset: 0x5F0213# ELF-LLVM-NEXT: VirtualAddress: 0x1000214# ELF-LLVM-NEXT: PhysicalAddress: 0x1000215# ELF-LLVM-NEXT: FileSize: 1216# ELF-LLVM-NEXT: MemSize: 1217# ELF-LLVM-NEXT: Flags [ (0x0)218# ELF-LLVM-NEXT: ]219# ELF-LLVM-NEXT: Alignment: 1220# ELF-LLVM-NEXT: }221# ELF-LLVM-NEXT: ProgramHeader {222# ELF-LLVM-NEXT: Type: PT_TLS (0x7)223# ELF32-LLVM-NEXT: Offset: 0x382224# ELF64-LLVM-NEXT: Offset: 0x5FE225# ELF-LLVM-NEXT: VirtualAddress: 0x4000226# ELF-LLVM-NEXT: PhysicalAddress: 0x4000227# ELF-LLVM-NEXT: FileSize: 1228# ELF-LLVM-NEXT: MemSize: 1229# ELF-LLVM-NEXT: Flags [ (0x0)230# ELF-LLVM-NEXT: ]231# ELF-LLVM-NEXT: Alignment: 1232# ELF-LLVM-NEXT: }233# ELF-LLVM-NEXT: ProgramHeader {234# ELF-LLVM-NEXT: Type: Unknown (0x60000000)235# ELF32-LLVM-NEXT: Offset: 0x374236# ELF64-LLVM-NEXT: Offset: 0x5F0237# ELF-LLVM-NEXT: VirtualAddress: 0x1000238# ELF-LLVM-NEXT: PhysicalAddress: 0x1000239# ELF-LLVM-NEXT: FileSize: 3240# ELF-LLVM-NEXT: MemSize: 3241# ELF-LLVM-NEXT: Flags [ (0x0)242# ELF-LLVM-NEXT: ]243# ELF-LLVM-NEXT: Alignment: 1244# ELF-LLVM-NEXT: }245# ELF-LLVM-NEXT: ProgramHeader {246# ELF-LLVM-NEXT: Type: PT_GNU_EH_FRAME (0x6474E550)247# ELF32-LLVM-NEXT: Offset: 0x374248# ELF64-LLVM-NEXT: Offset: 0x5F0249# ELF-LLVM-NEXT: VirtualAddress: 0x1000250# ELF-LLVM-NEXT: PhysicalAddress: 0x1000251# ELF-LLVM-NEXT: FileSize: 3252# ELF-LLVM-NEXT: MemSize: 3253# ELF-LLVM-NEXT: Flags [ (0x0)254# ELF-LLVM-NEXT: ]255# ELF-LLVM-NEXT: Alignment: 1256# ELF-LLVM-NEXT: }257# ELF-LLVM-NEXT: ProgramHeader {258# ELF-LLVM-NEXT: Type: PT_SUNW_UNWIND (0x6464E550)259# ELF32-LLVM-NEXT: Offset: 0x374260# ELF64-LLVM-NEXT: Offset: 0x5F0261# ELF-LLVM-NEXT: VirtualAddress: 0x1000262# ELF-LLVM-NEXT: PhysicalAddress: 0x1000263# ELF-LLVM-NEXT: FileSize: 3264# ELF-LLVM-NEXT: MemSize: 3265# ELF-LLVM-NEXT: Flags [ (0x0)266# ELF-LLVM-NEXT: ]267# ELF-LLVM-NEXT: Alignment: 1268# ELF-LLVM-NEXT: }269# ELF-LLVM-NEXT: ProgramHeader {270# ELF-LLVM-NEXT: Type: PT_GNU_STACK (0x6474E551)271# ELF32-LLVM-NEXT: Offset: 0x374272# ELF64-LLVM-NEXT: Offset: 0x5F0273# ELF-LLVM-NEXT: VirtualAddress: 0x1000274# ELF-LLVM-NEXT: PhysicalAddress: 0x1000275# ELF-LLVM-NEXT: FileSize: 3276# ELF-LLVM-NEXT: MemSize: 3277# ELF-LLVM-NEXT: Flags [ (0x0)278# ELF-LLVM-NEXT: ]279# ELF-LLVM-NEXT: Alignment: 1280# ELF-LLVM-NEXT: }281# ELF-LLVM-NEXT: ProgramHeader {282# ELF-LLVM-NEXT: Type: PT_GNU_RELRO (0x6474E552)283# ELF32-LLVM-NEXT: Offset: 0x374284# ELF64-LLVM-NEXT: Offset: 0x5F0285# ELF-LLVM-NEXT: VirtualAddress: 0x1000286# ELF-LLVM-NEXT: PhysicalAddress: 0x1000287# ELF-LLVM-NEXT: FileSize: 3288# ELF-LLVM-NEXT: MemSize: 3289# ELF-LLVM-NEXT: Flags [ (0x0)290# ELF-LLVM-NEXT: ]291# ELF-LLVM-NEXT: Alignment: 1292# ELF-LLVM-NEXT: }293# ELF-LLVM-NEXT: ProgramHeader {294# ELF-LLVM-NEXT: Type: PT_GNU_PROPERTY (0x6474E553)295# ELF32-LLVM-NEXT: Offset: 0x374296# ELF64-LLVM-NEXT: Offset: 0x5F0297# ELF-LLVM-NEXT: VirtualAddress: 0x1000298# ELF-LLVM-NEXT: PhysicalAddress: 0x1000299# ELF-LLVM-NEXT: FileSize: 3300# ELF-LLVM-NEXT: MemSize: 3301# ELF-LLVM-NEXT: Flags [ (0x0)302# ELF-LLVM-NEXT: ]303# ELF-LLVM-NEXT: Alignment: 1304# ELF-LLVM-NEXT: }305# ELF-LLVM-NEXT: ProgramHeader {306# ELF-LLVM-NEXT: Type: PT_OPENBSD_MUTABLE (0x65A3DBE5)307# ELF32-LLVM-NEXT: Offset: 0x374308# ELF64-LLVM-NEXT: Offset: 0x5F0309# ELF-LLVM-NEXT: VirtualAddress: 0x1000310# ELF-LLVM-NEXT: PhysicalAddress: 0x1000311# ELF-LLVM-NEXT: FileSize: 3312# ELF-LLVM-NEXT: MemSize: 3313# ELF-LLVM-NEXT: Flags [ (0x0)314# ELF-LLVM-NEXT: ]315# ELF-LLVM-NEXT: Alignment: 1316# ELF-LLVM-NEXT: }317# ELF-LLVM-NEXT: ProgramHeader {318# ELF-LLVM-NEXT: Type: PT_OPENBSD_RANDOMIZE (0x65A3DBE6)319# ELF32-LLVM-NEXT: Offset: 0x374320# ELF64-LLVM-NEXT: Offset: 0x5F0321# ELF-LLVM-NEXT: VirtualAddress: 0x1000322# ELF-LLVM-NEXT: PhysicalAddress: 0x1000323# ELF-LLVM-NEXT: FileSize: 3324# ELF-LLVM-NEXT: MemSize: 3325# ELF-LLVM-NEXT: Flags [ (0x0)326# ELF-LLVM-NEXT: ]327# ELF-LLVM-NEXT: Alignment: 1328# ELF-LLVM-NEXT: }329# ELF-LLVM-NEXT: ProgramHeader {330# ELF-LLVM-NEXT: Type: PT_OPENBSD_WXNEEDED (0x65A3DBE7)331# ELF32-LLVM-NEXT: Offset: 0x374332# ELF64-LLVM-NEXT: Offset: 0x5F0333# ELF-LLVM-NEXT: VirtualAddress: 0x1000334# ELF-LLVM-NEXT: PhysicalAddress: 0x1000335# ELF-LLVM-NEXT: FileSize: 3336# ELF-LLVM-NEXT: MemSize: 3337# ELF-LLVM-NEXT: Flags [ (0x0)338# ELF-LLVM-NEXT: ]339# ELF-LLVM-NEXT: Alignment: 1340# ELF-LLVM-NEXT: }341# ELF-LLVM-NEXT: ProgramHeader {342# ELF-LLVM-NEXT: Type: PT_OPENBSD_NOBTCFI (0x65A3DBE8)343# ELF32-LLVM-NEXT: Offset: 0x374344# ELF64-LLVM-NEXT: Offset: 0x5F0345# ELF-LLVM-NEXT: VirtualAddress: 0x1000346# ELF-LLVM-NEXT: PhysicalAddress: 0x1000347# ELF-LLVM-NEXT: FileSize: 3348# ELF-LLVM-NEXT: MemSize: 3349# ELF-LLVM-NEXT: Flags [ (0x0)350# ELF-LLVM-NEXT: ]351# ELF-LLVM-NEXT: Alignment: 1352# ELF-LLVM-NEXT: }353# ELF-LLVM-NEXT: ProgramHeader {354# ELF-LLVM-NEXT: Type: PT_OPENBSD_SYSCALLS (0x65A3DBE9)355# ELF32-LLVM-NEXT: Offset: 0x374356# ELF64-LLVM-NEXT: Offset: 0x5F0357# ELF-LLVM-NEXT: VirtualAddress: 0x1000358# ELF-LLVM-NEXT: PhysicalAddress: 0x1000359# ELF-LLVM-NEXT: FileSize: 3360# ELF-LLVM-NEXT: MemSize: 3361# ELF-LLVM-NEXT: Flags [ (0x0)362# ELF-LLVM-NEXT: ]363# ELF-LLVM-NEXT: Alignment: 1364# ELF-LLVM-NEXT: }365# ELF-LLVM-NEXT: ProgramHeader {366# ELF-LLVM-NEXT: Type: PT_OPENBSD_BOOTDATA (0x65A41BE6)367# ELF32-LLVM-NEXT: Offset: 0x374368# ELF64-LLVM-NEXT: Offset: 0x5F0369# ELF-LLVM-NEXT: VirtualAddress: 0x1000370# ELF-LLVM-NEXT: PhysicalAddress: 0x1000371# ELF-LLVM-NEXT: FileSize: 3372# ELF-LLVM-NEXT: MemSize: 3373# ELF-LLVM-NEXT: Flags [ (0x0)374# ELF-LLVM-NEXT: ]375# ELF-LLVM-NEXT: Alignment: 1376# ELF-LLVM-NEXT: }377# ELF-LLVM-NEXT: ProgramHeader {378# ELF-LLVM-NEXT: Type: Unknown (0x6FFFFFFF)379# ELF32-LLVM-NEXT: Offset: 0x374380# ELF64-LLVM-NEXT: Offset: 0x5F0381# ELF-LLVM-NEXT: VirtualAddress: 0x1000382# ELF-LLVM-NEXT: PhysicalAddress: 0x1000383# ELF-LLVM-NEXT: FileSize: 3384# ELF-LLVM-NEXT: MemSize: 3385# ELF-LLVM-NEXT: Flags [ (0x0)386# ELF-LLVM-NEXT: ]387# ELF-LLVM-NEXT: Alignment: 1388# ELF-LLVM-NEXT: }389# ELF-LLVM-NEXT: ProgramHeader {390# ELF-LLVM-NEXT: Type: Unknown (0x70000000)391# ELF32-LLVM-NEXT: Offset: 0x374392# ELF64-LLVM-NEXT: Offset: 0x5F0393# ELF-LLVM-NEXT: VirtualAddress: 0x1000394# ELF-LLVM-NEXT: PhysicalAddress: 0x1000395# ELF-LLVM-NEXT: FileSize: 3396# ELF-LLVM-NEXT: MemSize: 3397# ELF-LLVM-NEXT: Flags [ (0x0)398# ELF-LLVM-NEXT: ]399# ELF-LLVM-NEXT: Alignment: 1400# ELF-LLVM-NEXT: }401# ELF-LLVM-NEXT: ProgramHeader {402# ELF-LLVM-NEXT: Type: Unknown (0x70000001)403# ELF32-LLVM-NEXT: Offset: 0x374404# ELF64-LLVM-NEXT: Offset: 0x5F0405# ELF-LLVM-NEXT: VirtualAddress: 0x1000406# ELF-LLVM-NEXT: PhysicalAddress: 0x1000407# ELF-LLVM-NEXT: FileSize: 3408# ELF-LLVM-NEXT: MemSize: 3409# ELF-LLVM-NEXT: Flags [ (0x0)410# ELF-LLVM-NEXT: ]411# ELF-LLVM-NEXT: Alignment: 1412# ELF-LLVM-NEXT: }413# ELF-LLVM-NEXT: ProgramHeader {414# ELF-LLVM-NEXT: Type: Unknown (0x70000002)415# ELF32-LLVM-NEXT: Offset: 0x374416# ELF64-LLVM-NEXT: Offset: 0x5F0417# ELF-LLVM-NEXT: VirtualAddress: 0x1000418# ELF-LLVM-NEXT: PhysicalAddress: 0x1000419# ELF-LLVM-NEXT: FileSize: 3420# ELF-LLVM-NEXT: MemSize: 3421# ELF-LLVM-NEXT: Flags [ (0x0)422# ELF-LLVM-NEXT: ]423# ELF-LLVM-NEXT: Alignment: 1424# ELF-LLVM-NEXT: }425# ELF-LLVM-NEXT: ProgramHeader {426# ELF-LLVM-NEXT: Type: Unknown (0x70000003)427# ELF32-LLVM-NEXT: Offset: 0x374428# ELF64-LLVM-NEXT: Offset: 0x5F0429# ELF-LLVM-NEXT: VirtualAddress: 0x1000430# ELF-LLVM-NEXT: PhysicalAddress: 0x1000431# ELF-LLVM-NEXT: FileSize: 3432# ELF-LLVM-NEXT: MemSize: 3433# ELF-LLVM-NEXT: Flags [ (0x0)434# ELF-LLVM-NEXT: ]435# ELF-LLVM-NEXT: Alignment: 1436# ELF-LLVM-NEXT: }437# ELF-LLVM-NEXT: ProgramHeader {438# ELF-LLVM-NEXT: Type: Unknown (0x7FFFFFFF)439# ELF32-LLVM-NEXT: Offset: 0x374440# ELF64-LLVM-NEXT: Offset: 0x5F0441# ELF-LLVM-NEXT: VirtualAddress: 0x1000442# ELF-LLVM-NEXT: PhysicalAddress: 0x1000443# ELF-LLVM-NEXT: FileSize: 3444# ELF-LLVM-NEXT: MemSize: 3445# ELF-LLVM-NEXT: Flags [ (0x0)446# ELF-LLVM-NEXT: ]447# ELF-LLVM-NEXT: Alignment: 1448# ELF-LLVM-NEXT: }449# ELF-LLVM-NEXT: ]450 451--- !ELF452FileHeader:453 Class: ELFCLASS[[BITS]]454 Data: ELFDATA2LSB455 Type: ET_EXEC456 Machine: [[MACHINE]]457Sections:458 - Name: .foo.begin459 Type: SHT_PROGBITS460 Flags: [ SHF_ALLOC ]461 Address: 0x1000462 Size: 0x1463 - Name: .foo.end464 Type: SHT_PROGBITS465 Flags: [ SHF_ALLOC ]466 Size: 0x2467 - Name: .bar.begin468 Type: SHT_PROGBITS469 Flags: [ SHF_ALLOC ]470 Address: 0x2000471 Size: 0x3472 - Name: .bar.end473 Type: SHT_PROGBITS474 Flags: [ SHF_ALLOC ]475 Size: 0x4476 - Name: .interp477 Type: SHT_PROGBITS478 Flags: [ SHF_ALLOC ]479 Address: 0x3000480 Content: "41424300" ## "ABC"481 - Name: .tls482 Type: SHT_PROGBITS483 Flags: [ SHF_ALLOC, SHF_TLS ]484 Address: 0x4000485 Size: 0x1486 - Name: .unused487 Type: SHT_PROGBITS488 Flags: [ SHF_ALLOC, SHF_TLS ]489 Address: 0x5000490 Size: 0x1491ProgramHeaders:492## Case 1: an arbitrary segment with sections.493 - Type: PT_PHDR494 Flags: [ PF_W ]495 VAddr: 0x1000496 FirstSec: .foo.begin497 LastSec: .foo.end498## Case 2: another segment with different sections.499 - Type: PT_PHDR500 Flags: [ PF_X ]501 VAddr: 0x2000502 FirstSec: .bar.begin503 LastSec: .bar.end504## Case 3: the PT_NULL segment.505 - Type: PT_NULL506 Flags: [ PF_X ]507 VAddr: 0x2000508 FirstSec: .bar.begin509 LastSec: .bar.end510## Case 4: the PT_DYNAMIC segment.511 - Type: PT_DYNAMIC512 Flags: [ PF_R, PF_W, PF_X ]513 VAddr: 0x1000514 FirstSec: .foo.begin515 LastSec: .foo.end516## Case 5: the PT_INTERP segment.517 - Type: PT_INTERP518 Flags: [ PF_R, PF_W ]519 VAddr: 0x3000520 FirstSec: .interp521 LastSec: .interp522## Case 6: the PT_NOTE segment.523 - Type: PT_NOTE524 VAddr: 0x1000525 FirstSec: .foo.begin526 LastSec: .foo.end527## Case 7: the PT_SHLIB segment.528 - Type: PT_SHLIB529 VAddr: 0x1000530 FirstSec: .foo.begin531 LastSec: .foo.begin532## Case 8: the PT_TLS segment.533 - Type: PT_TLS534 VAddr: 0x4000535 FirstSec: .tls536 LastSec: .tls537## Case 9: the PT_LOOS segment.538 - Type: 0x60000000 ## PT_LOOS539 VAddr: 0x1000540 FirstSec: .foo.begin541 LastSec: .foo.end542## Case 10: the PT_GNU_EH_FRAME segment.543 - Type: PT_GNU_EH_FRAME544 VAddr: 0x1000545 FirstSec: .foo.begin546 LastSec: .foo.end547## Case 11: the PT_SUNW_UNWIND segment.548 - Type: 0x6464e550 ## PT_SUNW_UNWIND549 VAddr: 0x1000550 FirstSec: .foo.begin551 LastSec: .foo.end552## Case 12: the PT_GNU_STACK segment.553 - Type: PT_GNU_STACK554 VAddr: 0x1000555 FirstSec: .foo.begin556 LastSec: .foo.end557## Case 13: the PT_GNU_RELRO segment.558 - Type: PT_GNU_RELRO559 VAddr: 0x1000560 FirstSec: .foo.begin561 LastSec: .foo.end562## Case 14: the PT_GNU_PROPERTY segment.563 - Type: PT_GNU_PROPERTY564 VAddr: 0x1000565 FirstSec: .foo.begin566 LastSec: .foo.end567## Case 15: the PT_OPENBSD_MUTABLE segment.568 - Type: 0x65a3dbe5 ## PT_OPENBSD_MUTABLE569 VAddr: 0x1000570 FirstSec: .foo.begin571 LastSec: .foo.end572## Case 16: the PT_OPENBSD_RANDOMIZE segment.573 - Type: 0x65a3dbe6 ## PT_OPENBSD_RANDOMIZE574 VAddr: 0x1000575 FirstSec: .foo.begin576 LastSec: .foo.end577## Case 17: the PT_OPENBSD_WXNEEDED segment.578 - Type: 0x65a3dbe7 ## PT_OPENBSD_WXNEEDED579 VAddr: 0x1000580 FirstSec: .foo.begin581 LastSec: .foo.end582## Case 18: the PT_OPENBSD_NOBTCFI segment.583 - Type: 0x65a3dbe8 ## PT_OPENBSD_NOBTCFI584 VAddr: 0x1000585 FirstSec: .foo.begin586 LastSec: .foo.end587## Case 19: the PT_OPENBSD_SYSCALLS segment.588 - Type: 0x65a3dbe9 ## PT_OPENBSD_SYSCALLS589 VAddr: 0x1000590 FirstSec: .foo.begin591 LastSec: .foo.end592## Case 20: the PT_OPENBSD_BOOTDATA segment.593 - Type: 0x65a41be6 ## PT_OPENBSD_BOOTDATA594 VAddr: 0x1000595 FirstSec: .foo.begin596 LastSec: .foo.end597## Case 21: the PT_HIOS segment.598 - Type: 0x6fffffff ## PT_HIOS599 VAddr: 0x1000600 FirstSec: .foo.begin601 LastSec: .foo.end602## Case 22: the PT_LOPROC/PT_ARM_ARCHEXT/PT_MIPS_REGINFO segment.603 - Type: 0x70000000 ## PT_LOPROC/PT_ARM_ARCHEXT/PT_MIPS_REGINFO604 VAddr: 0x1000605 FirstSec: .foo.begin606 LastSec: .foo.end607## Case 23: the PT_ARM_EXIDX/PT_MIPS_RTPROC segment.608 - Type: 0x70000001 ## PT_ARM_EXIDX, PT_MIPS_RTPROC609 VAddr: 0x1000610 FirstSec: .foo.begin611 LastSec: .foo.end612## Case 24: the PT_MIPS_OPTIONS segment.613 - Type: 0x70000002 ## PT_MIPS_OPTIONS614 VAddr: 0x1000615 FirstSec: .foo.begin616 LastSec: .foo.end617## Case 25: the PT_MIPS_ABIFLAGS/PT_RISCV_ATTRIBUTES segment.618 - Type: 0x70000003 ## PT_MIPS_ABIFLAGS/PT_RISCV_ATTRIBUTES619 VAddr: 0x1000620 FirstSec: .foo.begin621 LastSec: .foo.end622## Case 26: the PT_HIPROC segment.623 - Type: 0x7fffffff ## PT_HIPROC624 VAddr: 0x1000625 FirstSec: .foo.begin626 LastSec: .foo.end627 628## Check how we dump ARM specific program headers.629# RUN: yaml2obj --docnum=1 -DBITS=64 -DMACHINE=EM_ARM %s -o %tarm.elf630# RUN: llvm-readelf --program-headers %tarm.elf | FileCheck %s --check-prefix=ARM-GNU631# RUN: llvm-readobj --program-headers %tarm.elf | FileCheck %s --check-prefix=ARM-LLVM632 633# ARM-GNU: <unknown>: 0x70000000 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1634# ARM-GNU-NEXT: EXIDX 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1635# ARM-GNU-NEXT: <unknown>: 0x70000002 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1636 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.elf646# RUN: llvm-readelf --program-headers %tmips.elf | FileCheck %s --check-prefix=MIPS-GNU647# RUN: llvm-readobj --program-headers %tmips.elf | FileCheck %s --check-prefix=MIPS-LLVM648 649# MIPS-GNU: REGINFO 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1650# MIPS-GNU-NEXT: RTPROC 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1651# MIPS-GNU-NEXT: OPTIONS 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1652# MIPS-GNU-NEXT: ABIFLAGS 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1653 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.elf665# RUN: llvm-readelf --program-headers %triscv.elf | FileCheck %s --check-prefix=RISCV-GNU666# RUN: llvm-readobj --program-headers %triscv.elf | FileCheck %s --check-prefix=RISCV-LLVM667 668# RISCV-GNU: ATTRIBUTES 0x0005f0 0x0000000000001000 0x0000000000001000 0x000003 0x000003 0x1669# RISCV-LLVM: ProgramHeader {670# RISCV-LLVM: Type: PT_RISCV_ATTRIBUTES (0x70000003)671 672## Check that llvm-readelf reports a warning when a program interpreter673## name is non-null-terminated or when PT_INTERP has an offset that674## goes past the end of the file.675# RUN: yaml2obj --docnum=2 %s -o %t.err676 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=SIZE679# SIZE: 616680 681## Write the additional 'C', '\0, 'C' bytes to the end.682# RUN: echo -n -e "C\x00C" >> %t.err683 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 Offset688# 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-terminated694# 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 0xaabbccddeeff1122697# 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 0xaabbccddeeff1122699 700--- !ELF701FileHeader:702 Class: ELFCLASS64703 Data: ELFDATA2LSB704 Type: ET_EXEC705ProgramHeaders:706## Case 1: the offset points to the first additional byte.707 - Type: PT_INTERP708 Offset: 616709## Case 1: the offset points to the second additional byte,710## which is a null byte.711 - Type: PT_INTERP712 Offset: 617713## Case 3: the offset points to the third additional714## byte, which is the last byte in the file.715 - Type: PT_INTERP716 Offset: 618717## Case 4: the offset goes 1 byte past the end of the file.718 - Type: PT_INTERP719 Offset: 619720## Case 5: an arbitrary large offset that goes past the end of the file.721 - Type: PT_INTERP722 Offset: 0xAABBCCDDEEFF1122723## Case 6: the same as case 5. Used to demonstrate that we don't report724## the same warning twice.725 - Type: PT_INTERP726 Offset: 0xAABBCCDDEEFF1122727 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.err731# RUN: llvm-readelf --program-headers %t.phdr.err 2>&1 | \732# RUN: FileCheck %s -DFILE=%t.phdr.err --check-prefix=WARN-PHENTSIZE-GNU733# RUN: llvm-readobj --program-headers %t.phdr.err 2>&1 | \734# RUN: FileCheck %s -DFILE=%t.phdr.err --check-prefix=WARN-PHENTSIZE-LLVM735 736# WARN-PHENTSIZE-GNU: Program Headers:737# WARN-PHENTSIZE-GNU-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align738# WARN-PHENTSIZE-GNU-NEXT: warning: '[[FILE]]': unable to dump program headers: invalid e_phentsize: 1739# 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: 1742 743# WARN-PHENTSIZE-LLVM: ProgramHeaders [744# WARN-PHENTSIZE-LLVM-NEXT: warning: '[[FILE]]': unable to dump program headers: invalid e_phentsize: 1745# WARN-PHENTSIZE-LLVM-NEXT: ]746 747--- !ELF748FileHeader:749 Class: ELFCLASS64750 Data: ELFDATA2LSB751 Type: ET_EXEC752 EPhEntSize: [[PHENTSIZE=<none>]]753 EPhOff: [[PHOFF=<none>]]754Sections:755 - Name: .foo756 Type: SHT_PROGBITS757ProgramHeaders:758 - Type: PT_PHDR759 FirstSec: .foo760 LastSec: .foo761 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.err2767# 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.err2772# RUN: llvm-readelf --program-headers %t.phdr.err2 2>&1 | \773# RUN: FileCheck %s -DFILE=%t.phdr.err2 --check-prefix=WARN-PHOFF-GNU -DOFF=0x161774# RUN: llvm-readobj --program-headers %t.phdr.err2 2>&1 | \775# RUN: FileCheck %s -DFILE=%t.phdr.err2 --check-prefix=WARN-PHOFF-LLVM -DOFF=0x161776 777# WARN-PHOFF-GNU: Program Headers:778# WARN-PHOFF-GNU-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align779# 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 = 56780# 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 = 56783 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 = 56786# WARN-PHOFF-LLVM-NEXT: ]787 788## Check we report a warning when the value of e_phoff is so large that789## e_phoff + e_phnum * e_phentsize > UINT64_MAX.790# RUN: yaml2obj --docnum=3 -DPHOFF=0xffffffffffffffff %s -o %t.phdr.err3791# RUN: llvm-readelf --program-headers %t.phdr.err3 2>&1 | \792# RUN: FileCheck %s -DFILE=%t.phdr.err3 --check-prefix=WARN-PHOFF-GNU -DOFF=0xffffffffffffffff793# RUN: llvm-readobj --program-headers %t.phdr.err3 2>&1 | \794# RUN: FileCheck %s -DFILE=%t.phdr.err3 --check-prefix=WARN-PHOFF-LLVM -DOFF=0xffffffffffffffff795