1# RUN: yaml2obj %s -o %t 2# RUN: llvm-objcopy -R .text2 %t %t2 3# RUN: llvm-readobj --file-headers --sections --program-headers %t2 | FileCheck %s 4 5!ELF 6FileHeader: 7 Class: ELFCLASS64 8 Data: ELFDATA2LSB 9 Type: ET_EXEC 10 Machine: EM_X86_64 11Sections: 12 - Name: .text 13 Type: SHT_PROGBITS 14 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 15 Address: 0x1000 16 AddressAlign: 0x1000 17 Size: 0x1000 18 - Name: .text2 19 Type: SHT_PROGBITS 20 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 21 Address: 0x2000 22 AddressAlign: 0x1000 23 Size: 0x1000 24 - Name: .text3 25 Type: SHT_PROGBITS 26 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 27 Address: 0x3000 28 AddressAlign: 0x1000 29 Size: 0x1000 30ProgramHeaders: 31 - Type: PT_LOAD 32 Flags: [ PF_R ] 33 VAddr: 0x1000 34 PAddr: 0x1000 35 Sections: 36 - Section: .text 37 - Type: PT_LOAD 38 Flags: [ PF_X, PF_R ] 39 VAddr: 0x3000 40 PAddr: 0x3000 41 Sections: 42 - Section: .text3 43## TODO (grimar): without the following line (i.e. without an empty symbol table), 44## llvm-objcopy adds an empty .strtab section. It doesn't look correct. 45Symbols: [] 46 47#CHECK: SectionHeaderCount: 4 48 49# CHECK: Sections [ 50# CHECK-NEXT: Section { 51# CHECK-NEXT: Index: 0 52# CHECK-NEXT: Name: (0) 53# CHECK-NEXT: Type: SHT_NULL (0x0) 54# CHECK-NEXT: Flags [ (0x0) 55# CHECK-NEXT: ] 56# CHECK-NEXT: Address: 0x0 57# CHECK-NEXT: Offset: 0x0 58# CHECK-NEXT: Size: 0 59# CHECK-NEXT: Link: 0 60# CHECK-NEXT: Info: 0 61# CHECK-NEXT: AddressAlignment: 0 62# CHECK-NEXT: EntrySize: 0 63# CHECK-NEXT: } 64# CHECK-NEXT: Section { 65# CHECK-NEXT: Index: 1 66# CHECK-NEXT: Name: .text 67# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 68# CHECK-NEXT: Flags [ (0x6) 69# CHECK-NEXT: SHF_ALLOC (0x2) 70# CHECK-NEXT: SHF_EXECINSTR (0x4) 71# CHECK-NEXT: ] 72# CHECK-NEXT: Address: 0x1000 73# CHECK-NEXT: Offset: 0x1000 74# CHECK-NEXT: Size: 4096 75# CHECK-NEXT: Link: 0 76# CHECK-NEXT: Info: 0 77# CHECK-NEXT: AddressAlignment: 4096 78# CHECK-NEXT: EntrySize: 0 79# CHECK-NEXT: } 80# CHECK-NEXT: Section { 81# CHECK-NEXT: Index: 2 82# CHECK-NEXT: Name: .text3 83# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 84# CHECK-NEXT: Flags [ (0x6) 85# CHECK-NEXT: SHF_ALLOC (0x2) 86# CHECK-NEXT: SHF_EXECINSTR (0x4) 87# CHECK-NEXT: ] 88# CHECK-NEXT: Address: 0x3000 89# CHECK-NEXT: Offset: 0x2000 90# CHECK-NEXT: Size: 4096 91# CHECK-NEXT: Link: 0 92# CHECK-NEXT: Info: 0 93# CHECK-NEXT: AddressAlignment: 4096 94# CHECK-NEXT: EntrySize: 0 95# CHECK-NEXT: } 96# CHECK-NEXT: Section { 97# CHECK-NEXT: Index: 3 98# CHECK-NEXT: Name: .shstrtab 99# CHECK-NEXT: Type: SHT_STRTAB (0x3) 100# CHECK-NEXT: Flags [ (0x0) 101# CHECK-NEXT: ] 102# CHECK-NEXT: Address: 0x0 103# CHECK-NEXT: Offset: 104# CHECK-NEXT: Size: 105# CHECK-NEXT: Link: 0 106# CHECK-NEXT: Info: 0 107# CHECK-NEXT: AddressAlignment: 1 108# CHECK-NEXT: EntrySize: 0 109# CHECK-NEXT: } 110# CHECK-NEXT: ] 111 112 113# CHECK: ProgramHeaders [ 114# CHECK-NEXT: ProgramHeader { 115# CHECK-NEXT: Type: PT_LOAD (0x1) 116# CHECK-NEXT: Offset: 0x1000 117# CHECK-NEXT: VirtualAddress: 0x1000 118# CHECK-NEXT: PhysicalAddress: 0x1000 119# CHECK-NEXT: FileSize: 4096 120# CHECK-NEXT: MemSize: 4096 121# CHECK-NEXT: Flags [ (0x4) 122# CHECK-NEXT: PF_R (0x4) 123# CHECK-NEXT: ] 124# CHECK-NEXT: Alignment: 4096 125# CHECK-NEXT: } 126# CHECK-NEXT: ProgramHeader { 127# CHECK-NEXT: Type: PT_LOAD (0x1) 128# CHECK-NEXT: Offset: 0x2000 129# CHECK-NEXT: VirtualAddress: 0x3000 130# CHECK-NEXT: PhysicalAddress: 0x3000 131# CHECK-NEXT: FileSize: 4096 132# CHECK-NEXT: MemSize: 4096 133# CHECK-NEXT: Flags [ (0x5) 134# CHECK-NEXT: PF_R (0x4) 135# CHECK-NEXT: PF_X (0x1) 136# CHECK-NEXT: ] 137# CHECK-NEXT: Alignment: 4096 138# CHECK-NEXT: } 139# CHECK-NEXT:] 140