brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.3 KiB · a6be346 Raw
335 lines · plain
1## Check that program headers are output correctly2 3# RUN: yaml2obj --docnum=1 -DBITS=32 -DMACHINE=EM_386 %s -o %t32.elf4# RUN: llvm-objdump --private-headers %t32.elf | FileCheck %s --check-prefixes=ELF32 5 6# ELF32:      Program Header:7# ELF32-NEXT:    PHDR off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**08# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags -w-9# ELF32-NEXT:    PHDR off    0x00000337 vaddr 0x00002000 paddr 0x00002000 align 2**010# ELF32-NEXT:         filesz 0x00000007 memsz 0x00000007 flags --x11# ELF32-NEXT: UNKNOWN off    0x00000337 vaddr 0x00002000 paddr 0x00002000 align 2**012# ELF32-NEXT:         filesz 0x00000007 memsz 0x00000007 flags --x13# ELF32-NEXT: DYNAMIC off    0x00000344 vaddr 0x00006000 paddr 0x00006000 align 2**014# ELF32-NEXT:         filesz 0x00000010 memsz 0x00000010 flags rwx15# ELF32-NEXT:  INTERP off    0x0000033e vaddr 0x00003000 paddr 0x00003000 align 2**016# ELF32-NEXT:         filesz 0x00000004 memsz 0x00000004 flags rw-17# ELF32-NEXT:    NOTE off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**018# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---19# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**020# ELF32-NEXT:         filesz 0x00000001 memsz 0x00000001 flags ---21# ELF32-NEXT:    TLS off     0x00000342 vaddr 0x00004000 paddr 0x00004000 align 2**022# ELF32-NEXT:         filesz 0x00000001 memsz 0x00000001 flags ---23# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**024# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---25# ELF32-NEXT:EH_FRAME off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**026# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---27# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**028# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---29# ELF32-NEXT:   STACK off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**030# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---31# ELF32-NEXT:   RELRO off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**032# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---33# ELF32-NEXT:PROPERTY off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**034# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---35# ELF32-NEXT:  SFRAME off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**036# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---37# ELF32-NEXT: OPENBSD_RANDOMIZE off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**038# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---39# ELF32-NEXT: OPENBSD_WXNEEDED off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**040# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---41# ELF32-NEXT: OPENBSD_BOOTDATA off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**042# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---43# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**044# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---45# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**046# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---47# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**048# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---49# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**050# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---51# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**052# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---53# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**054# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---55# ELF32-EMPTY:56 57# RUN: yaml2obj --docnum=1 -DBITS=64 -DMACHINE=EM_X86_64 %s -o %t64.elf58# RUN: llvm-objdump --private-headers %t64.elf | FileCheck %s --check-prefixes=ELF6459 60# ELF64:      Program Header:61# ELF64-NEXT:    PHDR off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**062# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags -w-63# ELF64-NEXT:    PHDR off    0x0000000000000583 vaddr 0x0000000000002000 paddr 0x0000000000002000 align 2**064# ELF64-NEXT:         filesz 0x0000000000000007 memsz 0x0000000000000007 flags --x65# ELF64-NEXT: UNKNOWN off    0x0000000000000583 vaddr 0x0000000000002000 paddr 0x0000000000002000 align 2**066# ELF64-NEXT:         filesz 0x0000000000000007 memsz 0x0000000000000007 flags --x67# ELF64-NEXT: DYNAMIC off    0x0000000000000590 vaddr 0x0000000000006000 paddr 0x0000000000006000 align 2**068# ELF64-NEXT:         filesz 0x0000000000000020 memsz 0x0000000000000020 flags rwx69# ELF64-NEXT:  INTERP off    0x000000000000058a vaddr 0x0000000000003000 paddr 0x0000000000003000 align 2**070# ELF64-NEXT:         filesz 0x0000000000000004 memsz 0x0000000000000004 flags rw-71# ELF64-NEXT:    NOTE off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**072# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---73# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**074# ELF64-NEXT:         filesz 0x0000000000000001 memsz 0x0000000000000001 flags ---75# ELF64-NEXT:    TLS off     0x000000000000058e vaddr 0x0000000000004000 paddr 0x0000000000004000 align 2**076# ELF64-NEXT:         filesz 0x0000000000000001 memsz 0x0000000000000001 flags ---77# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**078# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---79# ELF64-NEXT:EH_FRAME off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**080# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---81# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**082# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---83# ELF64-NEXT:   STACK off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**084# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---85# ELF64-NEXT:   RELRO off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**086# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---87# ELF64-NEXT:   PROPERTY off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**088# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---89# ELF64-NEXT:  SFRAME off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**090# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---91# ELF64-NEXT: OPENBSD_RANDOMIZE off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**092# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---93# ELF64-NEXT: OPENBSD_WXNEEDED off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**094# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---95# ELF64-NEXT: OPENBSD_BOOTDATA off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**096# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---97# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**098# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---99# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0100# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---101# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0102# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---103# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0104# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---105# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0106# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---107# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0108# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---109# ELF64-EMPTY:110 111--- !ELF112FileHeader:113  Class:   ELFCLASS[[BITS]]114  Data:    ELFDATA2LSB115  Type:    ET_EXEC116  Machine: [[MACHINE]]117Sections:118  - Name:    .foo.begin119    Type:    SHT_PROGBITS120    Flags:   [ SHF_ALLOC ]121    Address: 0x1000122    Size:    0x1123  - Name:    .foo.end124    Type:    SHT_PROGBITS125    Flags:   [ SHF_ALLOC ]126    Size:    0x2127  - Name:    .bar.begin128    Type:    SHT_PROGBITS129    Flags:   [ SHF_ALLOC ]130    Address: 0x2000131    Size:    0x3132  - Name:    .bar.end133    Type:    SHT_PROGBITS134    Flags:   [ SHF_ALLOC ]135    Size:    0x4136  - Name:    .interp137    Type:    SHT_PROGBITS138    Flags:   [ SHF_ALLOC ]139    Address: 0x3000140    Content: "41424300" ## "ABC"141  - Name:    .tls142    Type:    SHT_PROGBITS143    Flags:   [ SHF_ALLOC, SHF_TLS ]144    Address: 0x4000145    Size:    0x1146  - Name:    .unused147    Type:    SHT_PROGBITS148    Flags:   [ SHF_ALLOC, SHF_TLS ]149    Address: 0x5000150    Size:    0x1151  - Name:    .dynamic152    Type:    SHT_DYNAMIC153    Flags:   [ SHF_ALLOC ]154    Address: 0x6000155    Entries:156     - Tag:   DT_NEEDED157       Value: 0x1158     - Tag:   DT_NULL159       Value: 0x0160ProgramHeaders:161## Case 1: an arbitrary segment with sections.162  - Type:     PT_PHDR163    Flags:    [ PF_W ]164    VAddr:    0x1000165    FirstSec: .foo.begin166    LastSec:  .foo.end167## Case 2: another segment with different sections.168  - Type:     PT_PHDR169    Flags:    [ PF_X ]170    VAddr:    0x2000171    FirstSec: .bar.begin172    LastSec:  .bar.end173## Case 3: the PT_NULL segment.174  - Type:     PT_NULL175    Flags:    [ PF_X ]176    VAddr:    0x2000177    FirstSec: .bar.begin178    LastSec:  .bar.end179## Case 4: the PT_DYNAMIC segment.180  - Type:     PT_DYNAMIC181    Flags:    [ PF_R, PF_W, PF_X ]182    VAddr:    0x6000183    FirstSec: .dynamic184    LastSec:  .dynamic185## Case 5: the PT_INTERP segment.186  - Type:     PT_INTERP187    Flags:    [ PF_R, PF_W ]188    VAddr:    0x3000189    FirstSec: .interp190    LastSec:  .interp191## Case 6: the PT_NOTE segment.192  - Type:     PT_NOTE193    VAddr:    0x1000194    FirstSec: .foo.begin195    LastSec:  .foo.end196## Case 7: the PT_SHLIB segment.197  - Type:     PT_SHLIB198    VAddr:    0x1000199    FirstSec: .foo.begin200    LastSec:  .foo.begin201## Case 8: the PT_TLS segment.202  - Type:     PT_TLS203    VAddr:    0x4000204    FirstSec: .tls205    LastSec:  .tls206## Case 9: the PT_LOOS segment.207  - Type:     0x60000000 ## PT_LOOS208    VAddr:    0x1000209    FirstSec: .foo.begin210    LastSec:  .foo.end211## Case 10: the PT_GNU_EH_FRAME segment.212  - Type:     PT_GNU_EH_FRAME213    VAddr:    0x1000214    FirstSec: .foo.begin215    LastSec:  .foo.end216## Case 11: the PT_SUNW_UNWIND segment.217  - Type:     0x6464e550 ## PT_SUNW_UNWIND218    VAddr:    0x1000219    FirstSec: .foo.begin220    LastSec:  .foo.end221## Case 12: the PT_GNU_STACK segment.222  - Type:     PT_GNU_STACK223    VAddr:    0x1000224    FirstSec: .foo.begin225    LastSec:  .foo.end226## Case 13: the PT_GNU_RELRO segment.227  - Type:     PT_GNU_RELRO228    VAddr:    0x1000229    FirstSec: .foo.begin230    LastSec:  .foo.end231## Case 14: the PT_GNU_PROPERTY segment.232  - Type:     PT_GNU_PROPERTY233    VAddr:    0x1000234    FirstSec: .foo.begin235    LastSec:  .foo.end236## Case 15: the PT_GNU_SFRAME segment.237  - Type:     0x6474e554 ## PT_GNU_SFRAME238    VAddr:    0x1000239    FirstSec: .foo.begin240    LastSec: .foo.end241## Case 16: the PT_OPENBSD_RANDOMIZE segment.242  - Type:     0x65a3dbe6 ## PT_OPENBSD_RANDOMIZE243    VAddr:    0x1000244    FirstSec: .foo.begin245    LastSec:  .foo.end246## Case 17: the PT_OPENBSD_WXNEEDED segment.247  - Type:     0x65a3dbe7 ## PT_OPENBSD_WXNEEDED248    VAddr:    0x1000249    FirstSec: .foo.begin250    LastSec:  .foo.end251## Case 18: the PT_OPENBSD_BOOTDATA segment.252  - Type:     0x65a41be6 ## PT_OPENBSD_BOOTDATA253    VAddr:    0x1000254    FirstSec: .foo.begin255    LastSec:  .foo.end256## Case 19: the PT_HIOS segment.257  - Type:     0x6fffffff ## PT_HIOS258    VAddr:    0x1000259    FirstSec: .foo.begin260    LastSec:  .foo.end261## Case 20: the PT_LOPROC/PT_ARM_ARCHEXT/PT_MIPS_REGINFO segment.262  - Type:     0x70000000 ## PT_LOPROC/PT_ARM_ARCHEXT/PT_MIPS_REGINFO263    VAddr:    0x1000264    FirstSec: .foo.begin265    LastSec:  .foo.end266## Case 21: the PT_ARM_EXIDX/PT_MIPS_RTPROC segment.267  - Type:     0x70000001 ## PT_ARM_EXIDX, PT_MIPS_RTPROC268    VAddr:    0x1000269    FirstSec: .foo.begin270    LastSec:  .foo.end271## Case 22: the PT_MIPS_OPTIONS segment.272  - Type:     0x70000002 ## PT_MIPS_OPTIONS273    VAddr:    0x1000274    FirstSec: .foo.begin275    LastSec:  .foo.end276## Case 23: the PT_MIPS_ABIFLAGS segment.277  - Type:     0x70000003 ## PT_MIPS_ABIFLAGS278    VAddr:    0x1000279    FirstSec: .foo.begin280    LastSec:  .foo.end281## Case 24: the PT_HIPROC segment.282  - Type:     0x7fffffff ## PT_HIPROC283    VAddr:    0x1000284    FirstSec: .foo.begin285    LastSec: .foo.end286 287## Check we report an error / warning when we are unable to read program headers.288## Case A: the e_phentsize field is invalid.289# RUN: yaml2obj --docnum=2 -DPHENTSIZE=1 %s -o %t.phdr.err290# RUN: llvm-objdump --private-headers %t.phdr.err 2>&1 | \291# RUN:   FileCheck %s -DFILE=%t.phdr.err --check-prefix=PHENTSIZE292 293# PHENTSIZE:      Program Header:294# PHENTSIZE-NEXT: warning: '[[FILE]]': unable to read program headers: invalid e_phentsize: 1295# PHENTSIZE-NEXT: warning: '[[FILE]]': invalid e_phentsize: 1296# PHENTSIZE-EMPTY:297 298--- !ELF299FileHeader:300  Class:      ELFCLASS64301  Data:       ELFDATA2LSB302  Type:       ET_EXEC303  EPhEntSize: [[PHENTSIZE=<none>]]304  EPhOff:     [[PHOFF=<none>]]305Sections:306  - Name: .foo307    Type: SHT_PROGBITS308ProgramHeaders:309  - Type:     PT_PHDR310    FirstSec: .foo311    LastSec:  .foo312 313## Case B: the value of the e_phoff field is invalid.314 315## Check that we do not report a warning when the program header table ends right before the end of the file.316## 0x160 + size of headers (56) == file size.317# RUN: yaml2obj --docnum=2 -DPHOFF=0x160 %s -o %t.phdr.no.err2318# RUN: llvm-objdump %t.phdr.no.err2 --private-headers 2>&1 | FileCheck %s --implicit-check-not=warning:319 320## Check we report a warning / error when e_phoff goes 1 byte past the end of the file.321# RUN: yaml2obj --docnum=2 -DPHOFF=0x161 %s -o %t.phdr.err2322# RUN: llvm-objdump --private-headers %t.phdr.err2 2>&1 | \323# RUN:   FileCheck %s -DFILE=%t.phdr.err2 --check-prefix=PHOFF -DOFF=0x161324 325# PHOFF:      Program Header:326# PHOFF-NEXT: warning: '[[FILE]]': unable to read program headers: program headers are longer than binary of size 408: e_phoff = [[OFF]], e_phnum = 1, e_phentsize = 56327# PHOFF-NEXT: warning: '[[FILE]]': program headers are longer than binary of size 408: e_phoff = [[OFF]], e_phnum = 1, e_phentsize = 56328# PHOFF-EMPTY:329 330## Check we report a warning / error when the value of e_phoff is so large that331## e_phoff + e_phnum * e_phentsize > UINT64_MAX.332# RUN: yaml2obj --docnum=2 -DPHOFF=0xffffffffffffffff %s -o %t.phdr.err3333# RUN: llvm-objdump --private-headers %t.phdr.err3 2>&1 | \334# RUN:   FileCheck %s -DFILE=%t.phdr.err3 --check-prefix=PHOFF -DOFF=0xffffffffffffffff335