program-headers.test 5.82 KB
# RUN: llvm-readobj --program-headers %p/../../../Object/Inputs/program-headers.elf-i386 \
# RUN:     | FileCheck %s -check-prefix ELF-I386
# RUN: llvm-readobj -l %p/../../../Object/Inputs/program-headers.elf-i386 \
# RUN:     | FileCheck %s -check-prefix ELF-I386

# ELF-I386:      ProgramHeaders [
# ELF-I386-NEXT:   ProgramHeader {
# ELF-I386-NEXT:     Type: PT_LOAD (0x1)
# ELF-I386-NEXT:     Offset: 0x0
# ELF-I386-NEXT:     VirtualAddress: 0x8048000
# ELF-I386-NEXT:     PhysicalAddress: 0x8048000
# ELF-I386-NEXT:     FileSize: 308
# ELF-I386-NEXT:     MemSize: 308
# ELF-I386-NEXT:     Flags [ (0x5)
# ELF-I386-NEXT:       PF_R (0x4)
# ELF-I386-NEXT:       PF_X (0x1)
# ELF-I386-NEXT:     ]
# ELF-I386-NEXT:     Alignment: 4096
# ELF-I386-NEXT:   }
# ELF-I386-NEXT:   ProgramHeader {
# ELF-I386-NEXT:     Type: PT_GNU_STACK (0x6474E551)
# ELF-I386-NEXT:     Offset: 0x0
# ELF-I386-NEXT:     VirtualAddress: 0x0
# ELF-I386-NEXT:     PhysicalAddress: 0x0
# ELF-I386-NEXT:     FileSize: 0
# ELF-I386-NEXT:     MemSize: 0
# ELF-I386-NEXT:     Flags [ (0x6)
# ELF-I386-NEXT:       PF_R (0x4)
# ELF-I386-NEXT:       PF_W (0x2)
# ELF-I386-NEXT:     ]
# ELF-I386-NEXT:     Alignment: 4
# ELF-I386-NEXT:   }
# ELF-I386-NEXT: ]

# RUN: llvm-readobj -l %p/../../../Object/Inputs/program-headers.elf-x86-64 \
# RUN:     | FileCheck %s -check-prefix ELF-X86-64

# ELF-X86-64:      ProgramHeaders [
# ELF-X86-64-NEXT:   ProgramHeader {
# ELF-X86-64-NEXT:     Type: PT_LOAD (0x1)
# ELF-X86-64-NEXT:     Offset: 0x0
# ELF-X86-64-NEXT:     VirtualAddress: 0x400000
# ELF-X86-64-NEXT:     PhysicalAddress: 0x400000
# ELF-X86-64-NEXT:     FileSize: 312
# ELF-X86-64-NEXT:     MemSize: 312
# ELF-X86-64-NEXT:     Flags [ (0x5)
# ELF-X86-64-NEXT:       PF_R (0x4)
# ELF-X86-64-NEXT:       PF_X (0x1)
# ELF-X86-64-NEXT:     ]
# ELF-X86-64-NEXT:     Alignment: 2097152
# ELF-X86-64-NEXT:   }
# ELF-X86-64-NEXT:   ProgramHeader {
# ELF-X86-64-NEXT:     Type: PT_GNU_EH_FRAME (0x6474E550)
# ELF-X86-64-NEXT:     Offset: 0xF4
# ELF-X86-64-NEXT:     VirtualAddress: 0x4000F4
# ELF-X86-64-NEXT:     PhysicalAddress: 0x4000F4
# ELF-X86-64-NEXT:     FileSize: 20
# ELF-X86-64-NEXT:     MemSize: 20
# ELF-X86-64-NEXT:     Flags [ (0x4)
# ELF-X86-64-NEXT:       PF_R (0x4)
# ELF-X86-64-NEXT:     ]
# ELF-X86-64-NEXT:     Alignment: 4
# ELF-X86-64-NEXT:   }
# ELF-X86-64-NEXT:   ProgramHeader {
# ELF-X86-64-NEXT:     Type: PT_GNU_STACK (0x6474E551)
# ELF-X86-64-NEXT:     Offset: 0x0
# ELF-X86-64-NEXT:     VirtualAddress: 0x0
# ELF-X86-64-NEXT:     PhysicalAddress: 0x0
# ELF-X86-64-NEXT:     FileSize: 0
# ELF-X86-64-NEXT:     MemSize: 0
# ELF-X86-64-NEXT:     Flags [ (0x6)
# ELF-X86-64-NEXT:       PF_R (0x4)
# ELF-X86-64-NEXT:       PF_W (0x2)
# ELF-X86-64-NEXT:     ]
# ELF-X86-64-NEXT:     Alignment: 8
# ELF-X86-64-NEXT:   }
# ELF-X86-64-NEXT: ]

# RUN: llvm-readobj -l %p/../../../Object/Inputs/program-headers.mips \
# RUN:     | FileCheck %s -check-prefix ELF-MIPS

# ELF-MIPS:      Format: ELF32-mips
# ELF-MIPS-NEXT: Arch: mips
# ELF-MIPS-NEXT: AddressSize: 32bit
# ELF-MIPS-NEXT: LoadName:
# ELF-MIPS-NEXT: ProgramHeaders [
# ELF-MIPS-NEXT:   ProgramHeader {
# ELF-MIPS-NEXT:     Type: PT_MIPS_ABIFLAGS (0x70000003)
# ELF-MIPS-NEXT:     Offset: 0x98
# ELF-MIPS-NEXT:     VirtualAddress: 0x400098
# ELF-MIPS-NEXT:     PhysicalAddress: 0x400098
# ELF-MIPS-NEXT:     FileSize: 24
# ELF-MIPS-NEXT:     MemSize: 24
# ELF-MIPS-NEXT:     Flags [ (0x4)
# ELF-MIPS-NEXT:       PF_R (0x4)
# ELF-MIPS-NEXT:     ]
# ELF-MIPS-NEXT:     Alignment: 8
# ELF-MIPS-NEXT:   }
# ELF-MIPS-NEXT:   ProgramHeader {
# ELF-MIPS-NEXT:     Type: PT_MIPS_REGINFO (0x70000000)
# ELF-MIPS-NEXT:     Offset: 0xB0
# ELF-MIPS-NEXT:     VirtualAddress: 0x4000B0
# ELF-MIPS-NEXT:     PhysicalAddress: 0x4000B0
# ELF-MIPS-NEXT:     FileSize: 24
# ELF-MIPS-NEXT:     MemSize: 24
# ELF-MIPS-NEXT:     Flags [ (0x4)
# ELF-MIPS-NEXT:       PF_R (0x4)
# ELF-MIPS-NEXT:     ]
# ELF-MIPS-NEXT:     Alignment: 4
# ELF-MIPS-NEXT:   }
# ELF-MIPS-NEXT:   ProgramHeader {
# ELF-MIPS-NEXT:     Type: PT_LOAD (0x1)
# ELF-MIPS-NEXT:     Offset: 0x0
# ELF-MIPS-NEXT:     VirtualAddress: 0x400000
# ELF-MIPS-NEXT:     PhysicalAddress: 0x400000
# ELF-MIPS-NEXT:     FileSize: 224
# ELF-MIPS-NEXT:     MemSize: 224
# ELF-MIPS-NEXT:     Flags [ (0x5)
# ELF-MIPS-NEXT:       PF_R (0x4)
# ELF-MIPS-NEXT:       PF_X (0x1)
# ELF-MIPS-NEXT:     ]
# ELF-MIPS-NEXT:     Alignment: 65536
# ELF-MIPS-NEXT:   }
# ELF-MIPS-NEXT: ]

# RUN: llvm-readobj -l %p/../../../Object/Inputs/program-headers.mips64 \
# RUN:     | FileCheck %s -check-prefix ELF-MIPS64

# ELF-MIPS64:      Format: ELF64-mips
# ELF-MIPS64-NEXT: Arch: mips64
# ELF-MIPS64-NEXT: AddressSize: 64bit
# ELF-MIPS64-NEXT: LoadName:
# ELF-MIPS64-NEXT: ProgramHeaders [
# ELF-MIPS64-NEXT:   ProgramHeader {
# ELF-MIPS64-NEXT:     Type: PT_LOAD (0x1)
# ELF-MIPS64-NEXT:     Offset: 0x0
# ELF-MIPS64-NEXT:     VirtualAddress: 0x120000000
# ELF-MIPS64-NEXT:     PhysicalAddress: 0x120000000
# ELF-MIPS64-NEXT:     FileSize: 136
# ELF-MIPS64-NEXT:     MemSize: 136
# ELF-MIPS64-NEXT:     Flags [ (0x5)
# ELF-MIPS64-NEXT:       PF_R (0x4)
# ELF-MIPS64-NEXT:       PF_X (0x1)
# ELF-MIPS64-NEXT:     ]
# ELF-MIPS64-NEXT:     Alignment: 65536
# ELF-MIPS64-NEXT:   }
# ELF-MIPS64-NEXT: ]

## Test that llvm-readobj dumps OpenBSD specific program headers.

# RUN: yaml2obj %s -o %t
# RUN: llvm-readobj -l %t | FileCheck %s --check-prefix=OPENBSD-X86-64

# OPENBSD-X86-64:      ProgramHeader {
# OPENBSD-X86-64-NEXT:  Type:  PT_OPENBSD_RANDOMIZE
# OPENBSD-X86-64:      ProgramHeader {
# OPENBSD-X86-64-NEXT:  Type:  PT_OPENBSD_WXNEEDED
# OPENBSD-X86-64:      ProgramHeader {
# OPENBSD-X86-64-NEXT:  Type:  PT_OPENBSD_BOOTDATA

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
ProgramHeaders:
  - Type: 0x65a3dbe6 ## PT_OPENBSD_RANDOMIZE
  - Type: 0x65a3dbe7 ## PT_OPENBSD_WXNEEDED
  - Type: 0x65a41be6 ## PT_OPENBSD_BOOTDATA