| ## Show that llvm-objcopy can handle an input file with many sections. |
| |
| RUN: %python %p/../Inputs/ungzip.py %p/Inputs/many-sections.o.gz > %t |
| RUN: llvm-objcopy %t %t2 |
| RUN: llvm-readobj --file-headers --sections --symbols %t2 | FileCheck %s |
| RUN: llvm-readelf --symbols %t2 | FileCheck --check-prefix=SYMS %s |
| |
| ## The ELF header should have e_shnum == 0 and e_shstrndx == SHN_XINDEX. |
| # CHECK: SectionHeaderCount: 0 |
| # CHECK-NEXT: StringTableSectionIndex: 65535 |
| |
| ## The first section header should store the real section header count and |
| ## shstrndx in its fields. |
| # CHECK: Section { |
| # CHECK-NEXT: Index: 0 |
| # CHECK-NEXT: Name: |
| # CHECK-NEXT: Type: SHT_NULL |
| # CHECK-NEXT: Flags [ |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Address: |
| # CHECK-NEXT: Offset: |
| # CHECK-NEXT: Size: [[#SHNUM:]] |
| # CHECK-NEXT: Link: [[#SHNUM-1]] |
| |
| ## Show that the .symtab_shndx section has the correct properties. |
| ## To avoid accidentally capturing the index of an unrelated section header for |
| ## checking the sh_link of the .symtab_shndx section, use the index of the |
| ## section immediately following the symbol table. |
| # CHECK: Name: .symtab |
| # CHECK-NEXT: Type: SHT_SYMTAB |
| # CHECK: Index: [[#AFTERSYMTAB:]] |
| # CHECK: Name: .symtab_shndx |
| # CHECK-NEXT: Type: SHT_SYMTAB_SHNDX |
| # CHECK-NEXT: Flags [ (0x0) |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Address: 0x0 |
| # CHECK-NEXT: Offset: |
| ## There should be #syms * EntrySize bytes. |
| # CHECK-NEXT: Size: 262148 |
| # CHECK-NEXT: Link: [[#AFTERSYMTAB-1]] |
| # CHECK-NEXT: Info: 0 |
| # CHECK-NEXT: AddressAlignment: 4 |
| # CHECK-NEXT: EntrySize: 4 |
| ## Show that the sh_link of the first section header is the section header table |
| ## index. Also show that the last section is the .strtab. |
| # CHECK: Index: [[#SHNUM-1]] |
| # CHECK-NEXT: Name: .strtab |
| |
| ## Show that the symbols with section indexes around the reserved range still |
| ## have the right section indexes afterwards. |
| # CHECK: Section: s65279 (0xFEFF) |
| # CHECK-NEXT: } |
| ## st_shndx == SHN_LORSERVE. |
| # CHECK-NEXT: Symbol { |
| # CHECK-NEXT: Name: sym65280 ( |
| # CHECK-NEXT: Value: 0x0 |
| # CHECK-NEXT: Size: 0 |
| # CHECK-NEXT: Binding: Local (0x0) |
| # CHECK-NEXT: Type: None (0x0) |
| # CHECK-NEXT: Other: 0 |
| # CHECK-NEXT: Section: s65280 (0xFF00) |
| # CHECK-NEXT: } |
| ## st_shndx == SHN_ABS. |
| # CHECK: Name: sym65521 ( |
| # CHECK-NEXT: Value: 0x0 |
| # CHECK-NEXT: Size: 0 |
| # CHECK-NEXT: Binding: Local (0x0) |
| # CHECK-NEXT: Type: None (0x0) |
| # CHECK-NEXT: Other: 0 |
| # CHECK-NEXT: Section: s65521 (0xFFF1) |
| # CHECK-NEXT: } |
| ## st_shndx == SHN_COMMON. |
| # CHECK-NEXT: Symbol { |
| # CHECK-NEXT: Name: sym65522 ( |
| # CHECK-NEXT: Value: 0x0 |
| # CHECK-NEXT: Size: 0 |
| # CHECK-NEXT: Binding: Local (0x0) |
| # CHECK-NEXT: Type: None (0x0) |
| # CHECK-NEXT: Other: 0 |
| # CHECK-NEXT: Section: s65522 (0xFFF2) |
| # CHECK-NEXT: } |
| ## st_shndx == SHN_XINDEX. |
| # CHECK: Name: sym65535 ( |
| # CHECK-NEXT: Value: 0x0 |
| # CHECK-NEXT: Size: 0 |
| # CHECK-NEXT: Binding: Local (0x0) |
| # CHECK-NEXT: Type: None (0x0) |
| # CHECK-NEXT: Other: 0 |
| # CHECK-NEXT: Section: s65535 (0xFFFF) |
| # CHECK-NEXT: } |
| ## st_shndx > SHN_XINDEX. |
| # CHECK-NEXT: Symbol { |
| # CHECK-NEXT: Name: sym65536 ( |
| # CHECK-NEXT: Value: 0x0 |
| # CHECK-NEXT: Size: 0 |
| # CHECK-NEXT: Binding: Local (0x0) |
| # CHECK-NEXT: Type: None (0x0) |
| # CHECK-NEXT: Other: 0 |
| # CHECK-NEXT: Section: s65536 (0x10000) |
| # CHECK-NEXT: } |
| |
| # SYMS: Symbol table '.symtab' contains 65537 entries |