| ## 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 |