83 lines
2.9 KiB
Plaintext
83 lines
2.9 KiB
Plaintext
|
## Check how llvm-readelf prints sections to segments mapping.
|
||
|
|
||
|
## Check that --section-mapping produces a sections to segments
|
||
|
## mapping and not anything else.
|
||
|
# RUN: yaml2obj %s -o %t64.elf
|
||
|
# RUN: llvm-readelf --section-mapping %t64.elf \
|
||
|
# RUN: | FileCheck %s --check-prefix=MAPPING --strict-whitespace --match-full-lines --implicit-check-not={{.}}
|
||
|
|
||
|
# MAPPING: Section to Segment mapping:
|
||
|
# MAPPING-NEXT: Segment Sections...
|
||
|
# MAPPING-NEXT: 00 .foo.begin .foo.end {{$}}
|
||
|
# MAPPING-NEXT: 01 .bar.begin .bar.end {{$}}
|
||
|
# MAPPING-NEXT: None .strtab .shstrtab {{$}}
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS64
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_EXEC
|
||
|
EPhEntSize: [[PHENTSIZE=<none>]]
|
||
|
Sections:
|
||
|
- Name: .foo.begin
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
Address: 0x1000
|
||
|
Size: 0x1
|
||
|
- Name: .foo.end
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
Size: 0x2
|
||
|
- Name: .bar.begin
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
Address: 0x2000
|
||
|
Size: 0x3
|
||
|
- Name: .bar.end
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
Size: 0x4
|
||
|
ProgramHeaders:
|
||
|
## Case 1: an arbitrary segment with sections.
|
||
|
- Type: PT_PHDR
|
||
|
Flags: [ PF_W ]
|
||
|
VAddr: 0x1000
|
||
|
FirstSec: .foo.begin
|
||
|
LastSec: .foo.end
|
||
|
## Case 2: another segment with different sections.
|
||
|
- Type: PT_PHDR
|
||
|
Flags: [ PF_X ]
|
||
|
VAddr: 0x2000
|
||
|
FirstSec: .bar.begin
|
||
|
LastSec: .bar.end
|
||
|
|
||
|
## Check that --section-mapping=false --program-headers produces just program headers.
|
||
|
# RUN: llvm-readelf --section-mapping=false --program-headers %t64.elf \
|
||
|
# RUN: | FileCheck %s --check-prefix=SEC-MAPPING-FALSE --implicit-check-not="Section to Segment mapping:"
|
||
|
|
||
|
# SEC-MAPPING-FALSE: Program Headers:
|
||
|
|
||
|
## Check that only one copy of the section/segment mapping table is produced
|
||
|
## when both --section-mapping and --program-headers are used.
|
||
|
# RUN: llvm-readelf --section-mapping --program-headers %t64.elf \
|
||
|
# RUN: | FileCheck %s --check-prefix=MAPPING --implicit-check-not="Section to Segment mapping:"
|
||
|
|
||
|
## Check the output when an object has no section headers.
|
||
|
## RUN: llvm-objcopy --strip-sections %t64.elf %tno-shdrs.o
|
||
|
## RUN: llvm-readelf --section-mapping %tno-shdrs.o | FileCheck %s --check-prefix=NO-SECHDRS
|
||
|
|
||
|
# NO-SECHDRS: Section to Segment mapping:
|
||
|
# NO-SECHDRS-NEXT: Segment Sections...
|
||
|
# NO-SECHDRS-NEXT: 00 {{$}}
|
||
|
# NO-SECHDRS-NEXT: 01 {{$}}
|
||
|
# NO-SECHDRS-NOT: {{.}}
|
||
|
|
||
|
## Check we report a warning when we are unable to read program headers.
|
||
|
# RUN: yaml2obj %s -DPHENTSIZE=1 -o %t64-err1.elf
|
||
|
# RUN: llvm-readelf --section-mapping %t64-err1.elf 2>&1 | \
|
||
|
# RUN: FileCheck %s -DFILE=%t64-err1.elf --check-prefix=PHENTSIZE
|
||
|
|
||
|
# PHENTSIZE: Section to Segment mapping:
|
||
|
# PHENTSIZE-NEXT: Segment Sections...
|
||
|
# PHENTSIZE-NEXT: warning: '[[FILE]]': can't read program headers to build section to segment mapping: invalid e_phentsize: 1
|