Peter Collingbourne | 8d58a98 | 2019-06-07 17:57:48 +0000 | [diff] [blame] | 1 | partitions.elf is a file containing a main partition and two loadable |
| 2 | partitions "part1" and "part2" (see https://lld.llvm.org/Partitions.html |
| 3 | for a description of partitions). This file tests that extracting the main |
| 4 | and loadable partitions produces a file with the correct headers and sections. |
| 5 | |
| 6 | RUN: llvm-objcopy --extract-main-partition %p/Inputs/partitions.elf %t1 |
| 7 | RUN: llvm-objcopy --extract-partition=part1 %p/Inputs/partitions.elf %t2 |
| 8 | RUN: llvm-objcopy --extract-partition=part2 %p/Inputs/partitions.elf %t3 |
| 9 | |
| 10 | RUN: llvm-readelf --headers --sections --symbols %t1 | FileCheck --check-prefix=MAIN %s |
| 11 | RUN: llvm-readelf --headers --sections --symbols %t2 | FileCheck --check-prefix=PART1 %s |
| 12 | RUN: llvm-readelf --headers --sections --symbols %t3 | FileCheck --check-prefix=PART2 %s |
| 13 | |
| 14 | MAIN: ELF Header: |
| 15 | MAIN-NEXT: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |
| 16 | MAIN-NEXT: Class: ELF64 |
| 17 | MAIN-NEXT: Data: 2's complement, little endian |
| 18 | MAIN-NEXT: Version: 1 (current) |
| 19 | MAIN-NEXT: OS/ABI: UNIX - System V |
| 20 | MAIN-NEXT: ABI Version: 0x0 |
| 21 | MAIN-NEXT: Type: EXEC (Executable file) |
| 22 | MAIN-NEXT: Machine: Advanced Micro Devices X86-64 |
| 23 | MAIN-NEXT: Version: 0x1 |
| 24 | MAIN-NEXT: Entry point address: 0x201000 |
| 25 | MAIN-NEXT: Start of program headers: 64 (bytes into file) |
| 26 | MAIN-NEXT: Start of section headers: 12488 (bytes into file) |
| 27 | MAIN-NEXT: Flags: 0x0 |
| 28 | MAIN-NEXT: Size of this header: 64 (bytes) |
| 29 | MAIN-NEXT: Size of program headers: 56 (bytes) |
| 30 | MAIN-NEXT: Number of program headers: 8 |
| 31 | MAIN-NEXT: Size of section headers: 64 (bytes) |
| 32 | MAIN-NEXT: Number of section headers: 13 |
| 33 | MAIN-NEXT: Section header string table index: 11 |
| 34 | |
| 35 | MAIN: Section Headers: |
| 36 | MAIN-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al |
| 37 | MAIN-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 |
| 38 | MAIN-NEXT: [ 1] .dynsym DYNSYM 0000000000200200 000200 000030 18 A 4 1 8 |
| 39 | MAIN-NEXT: [ 2] .gnu.hash GNU_HASH 0000000000200230 000230 000020 00 A 1 0 8 |
| 40 | MAIN-NEXT: [ 3] .hash HASH 0000000000200250 000250 000018 04 A 1 0 4 |
| 41 | MAIN-NEXT: [ 4] .dynstr STRTAB 0000000000200268 000268 000014 00 A 0 0 1 |
| 42 | MAIN-NEXT: [ 5] .rodata PROGBITS 000000000020027c 00027c 000018 00 A 0 0 4 |
| 43 | MAIN-NEXT: [ 6] .text0 PROGBITS 0000000000201000 001000 000001 00 AX 0 0 1 |
| 44 | MAIN-NEXT: [ 7] .dynamic DYNAMIC 0000000000202000 002000 000080 10 WA 4 0 8 |
| 45 | MAIN-NEXT: [ 8] .part.end NOBITS 0000000000209000 003000 001000 00 WA 0 0 1 |
| 46 | MAIN-NEXT: [ 9] .comment PROGBITS 0000000000000000 003000 000008 01 MS 0 0 1 |
| 47 | MAIN-NEXT: [10] .symtab SYMTAB 0000000000000000 003008 000048 18 12 2 8 |
| 48 | MAIN-NEXT: [11] .shstrtab STRTAB 0000000000000000 003050 000060 00 0 0 1 |
| 49 | MAIN-NEXT: [12] .strtab STRTAB 0000000000000000 0030b0 000011 00 0 0 1 |
| 50 | |
| 51 | MAIN: Symbol table '.dynsym' contains 2 entries: |
| 52 | MAIN-NEXT: Num: Value Size Type Bind Vis Ndx Name |
| 53 | MAIN-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND |
| 54 | MAIN-NEXT: 1: 0000000000201000 0 NOTYPE GLOBAL DEFAULT 6 _start |
| 55 | |
| 56 | MAIN: Symbol table '.symtab' contains 3 entries: |
| 57 | MAIN-NEXT: Num: Value Size Type Bind Vis Ndx Name |
| 58 | MAIN-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND |
| 59 | MAIN-NEXT: 1: 0000000000202000 0 NOTYPE LOCAL HIDDEN 7 _DYNAMIC |
| 60 | MAIN-NEXT: 2: 0000000000201000 0 NOTYPE GLOBAL DEFAULT 6 _start |
| 61 | |
| 62 | MAIN: Program Headers: |
| 63 | MAIN-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align |
| 64 | MAIN-NEXT: PHDR 0x000040 0x0000000000200040 0x0000000000200040 0x0001c0 0x0001c0 R 0x8 |
| 65 | MAIN-NEXT: LOAD 0x000000 0x0000000000200000 0x0000000000200000 0x000294 0x000294 R 0x1000 |
| 66 | MAIN-NEXT: LOAD 0x001000 0x0000000000201000 0x0000000000201000 0x000001 0x000001 R E 0x1000 |
| 67 | MAIN-NEXT: LOAD 0x002000 0x0000000000202000 0x0000000000202000 0x000080 0x000080 RW 0x1000 |
| 68 | MAIN-NEXT: LOAD 0x003000 0x0000000000209000 0x0000000000209000 0x000000 0x001000 RW 0x1000 |
| 69 | MAIN-NEXT: DYNAMIC 0x002000 0x0000000000202000 0x0000000000202000 0x000080 0x000080 RW 0x8 |
| 70 | MAIN-NEXT: GNU_RELRO 0x002000 0x0000000000202000 0x0000000000202000 0x000080 0x001000 R 0x1 |
| 71 | MAIN-NEXT: GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x0 |
| 72 | |
| 73 | PART1: ELF Header: |
| 74 | PART1-NEXT: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |
| 75 | PART1-NEXT: Class: ELF64 |
| 76 | PART1-NEXT: Data: 2's complement, little endian |
| 77 | PART1-NEXT: Version: 1 (current) |
| 78 | PART1-NEXT: OS/ABI: UNIX - System V |
| 79 | PART1-NEXT: ABI Version: 0x0 |
| 80 | PART1-NEXT: Type: DYN (Shared object file) |
| 81 | PART1-NEXT: Machine: Advanced Micro Devices X86-64 |
| 82 | PART1-NEXT: Version: 0x1 |
| 83 | PART1-NEXT: Entry point address: 0x0 |
| 84 | PART1-NEXT: Start of program headers: 64 (bytes into file) |
| 85 | PART1-NEXT: Start of section headers: 8336 (bytes into file) |
| 86 | PART1-NEXT: Flags: 0x0 |
| 87 | PART1-NEXT: Size of this header: 64 (bytes) |
| 88 | PART1-NEXT: Size of program headers: 56 (bytes) |
| 89 | PART1-NEXT: Number of program headers: 7 |
| 90 | PART1-NEXT: Size of section headers: 64 (bytes) |
| 91 | PART1-NEXT: Number of section headers: 11 |
| 92 | PART1-NEXT: Section header string table index: 9 |
| 93 | |
| 94 | PART1: Section Headers: |
| 95 | PART1-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al |
| 96 | PART1-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 |
| 97 | PART1-NEXT: [ 1] .dynsym DYNSYM 00000000002031c8 0001c8 000030 18 A 4 1 8 |
| 98 | PART1-NEXT: [ 2] .gnu.hash GNU_HASH 00000000002031f8 0001f8 000020 00 A 1 0 8 |
| 99 | PART1-NEXT: [ 3] .hash HASH 0000000000203218 000218 000018 04 A 1 0 4 |
| 100 | PART1-NEXT: [ 4] .dynstr STRTAB 0000000000203230 000230 00000a 00 A 0 0 1 |
| 101 | PART1-NEXT: [ 5] .dynamic DYNAMIC 0000000000204000 001000 000090 10 WA 4 0 8 |
| 102 | PART1-NEXT: [ 6] .bss1 NOBITS 0000000000205000 002000 000008 00 WA 0 0 1 |
| 103 | PART1-NEXT: [ 7] .comment PROGBITS 0000000000000000 002000 000008 01 MS 0 0 1 |
| 104 | PART1-NEXT: [ 8] .symtab SYMTAB 0000000000000000 002008 000030 18 10 1 8 |
| 105 | PART1-NEXT: [ 9] .shstrtab STRTAB 0000000000000000 002038 00004d 00 0 0 1 |
| 106 | PART1-NEXT: [10] .strtab STRTAB 0000000000000000 002085 000004 00 0 0 1 |
| 107 | |
| 108 | PART1: Symbol table '.dynsym' contains 2 entries: |
| 109 | PART1-NEXT: Num: Value Size Type Bind Vis Ndx Name |
| 110 | PART1-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND |
| 111 | PART1-NEXT: 1: 0000000000205000 0 NOTYPE GLOBAL DEFAULT 15 g1 |
| 112 | |
| 113 | PART1: Symbol table '.symtab' contains 2 entries: |
| 114 | PART1-NEXT: Num: Value Size Type Bind Vis Ndx Name |
| 115 | PART1-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND |
| 116 | PART1-NEXT: 1: 0000000000205000 0 NOTYPE GLOBAL DEFAULT 6 g1 |
| 117 | |
| 118 | PART1: Program Headers: |
| 119 | PART1-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align |
| 120 | PART1-NEXT: PHDR 0x000040 0x0000000000203040 0x0000000000203040 0x000188 0x000188 R 0x1 |
| 121 | PART1-NEXT: LOAD 0x000000 0x0000000000203000 0x0000000000203000 0x00023a 0x00023a R 0x1000 |
| 122 | PART1-NEXT: LOAD 0x001000 0x0000000000204000 0x0000000000204000 0x000090 0x000090 RW 0x1000 |
| 123 | PART1-NEXT: LOAD 0x002000 0x0000000000205000 0x0000000000205000 0x000000 0x000008 RW 0x1000 |
| 124 | PART1-NEXT: DYNAMIC 0x001000 0x0000000000204000 0x0000000000204000 0x000090 0x000090 RW 0x8 |
| 125 | PART1-NEXT: GNU_RELRO 0x001000 0x0000000000204000 0x0000000000204000 0x000090 0x001000 R 0x1 |
| 126 | PART1-NEXT: GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x0 |
| 127 | |
| 128 | PART2: ELF Header: |
| 129 | PART2-NEXT: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |
| 130 | PART2-NEXT: Class: ELF64 |
| 131 | PART2-NEXT: Data: 2's complement, little endian |
| 132 | PART2-NEXT: Version: 1 (current) |
| 133 | PART2-NEXT: OS/ABI: UNIX - System V |
| 134 | PART2-NEXT: ABI Version: 0x0 |
| 135 | PART2-NEXT: Type: DYN (Shared object file) |
| 136 | PART2-NEXT: Machine: Advanced Micro Devices X86-64 |
| 137 | PART2-NEXT: Version: 0x1 |
| 138 | PART2-NEXT: Entry point address: 0x0 |
| 139 | PART2-NEXT: Start of program headers: 64 (bytes into file) |
| 140 | PART2-NEXT: Start of section headers: 8336 (bytes into file) |
| 141 | PART2-NEXT: Flags: 0x0 |
| 142 | PART2-NEXT: Size of this header: 64 (bytes) |
| 143 | PART2-NEXT: Size of program headers: 56 (bytes) |
| 144 | PART2-NEXT: Number of program headers: 7 |
| 145 | PART2-NEXT: Size of section headers: 64 (bytes) |
| 146 | PART2-NEXT: Number of section headers: 11 |
| 147 | PART2-NEXT: Section header string table index: 9 |
| 148 | |
| 149 | PART2: Section Headers: |
| 150 | PART2-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al |
| 151 | PART2-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 |
| 152 | PART2-NEXT: [ 1] .dynsym DYNSYM 00000000002061c8 0001c8 000030 18 A 4 1 8 |
| 153 | PART2-NEXT: [ 2] .gnu.hash GNU_HASH 00000000002061f8 0001f8 000020 00 A 1 0 8 |
| 154 | PART2-NEXT: [ 3] .hash HASH 0000000000206218 000218 000018 04 A 1 0 4 |
| 155 | PART2-NEXT: [ 4] .dynstr STRTAB 0000000000206230 000230 00000a 00 A 0 0 1 |
| 156 | PART2-NEXT: [ 5] .dynamic DYNAMIC 0000000000207000 001000 000090 10 WA 4 0 8 |
| 157 | PART2-NEXT: [ 6] .bss2 NOBITS 0000000000208000 002000 000010 00 WA 0 0 1 |
| 158 | PART2-NEXT: [ 7] .comment PROGBITS 0000000000000000 002000 000008 01 MS 0 0 1 |
| 159 | PART2-NEXT: [ 8] .symtab SYMTAB 0000000000000000 002008 000030 18 10 1 8 |
| 160 | PART2-NEXT: [ 9] .shstrtab STRTAB 0000000000000000 002038 00004d 00 0 0 1 |
| 161 | PART2-NEXT: [10] .strtab STRTAB 0000000000000000 002085 000004 00 0 0 1 |
| 162 | |
| 163 | PART2: Symbol table '.dynsym' contains 2 entries: |
| 164 | PART2-NEXT: Num: Value Size Type Bind Vis Ndx Name |
| 165 | PART2-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND |
| 166 | PART2-NEXT: 1: 0000000000208000 0 NOTYPE GLOBAL DEFAULT 23 g2 |
| 167 | |
| 168 | PART2: Symbol table '.symtab' contains 2 entries: |
| 169 | PART2-NEXT: Num: Value Size Type Bind Vis Ndx Name |
| 170 | PART2-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND |
| 171 | PART2-NEXT: 1: 0000000000208000 0 NOTYPE GLOBAL DEFAULT 6 g2 |
| 172 | |
| 173 | PART2: Program Headers: |
| 174 | PART2-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align |
| 175 | PART2-NEXT: PHDR 0x000040 0x0000000000206040 0x0000000000206040 0x000188 0x000188 R 0x1 |
| 176 | PART2-NEXT: LOAD 0x000000 0x0000000000206000 0x0000000000206000 0x00023a 0x00023a R 0x1000 |
| 177 | PART2-NEXT: LOAD 0x001000 0x0000000000207000 0x0000000000207000 0x000090 0x000090 RW 0x1000 |
| 178 | PART2-NEXT: LOAD 0x002000 0x0000000000208000 0x0000000000208000 0x000000 0x000010 RW 0x1000 |
| 179 | PART2-NEXT: DYNAMIC 0x001000 0x0000000000207000 0x0000000000207000 0x000090 0x000090 RW 0x8 |
| 180 | PART2-NEXT: GNU_RELRO 0x001000 0x0000000000207000 0x0000000000207000 0x000090 0x001000 R 0x1 |
| 181 | PART2-NEXT: GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x0 |
| 182 | |
| 183 | RUN: not llvm-objcopy --extract-partition=part3 %p/Inputs/partitions.elf %t4 2>&1 | FileCheck --check-prefix=ERROR1 %s |
| 184 | ERROR1: error: could not find partition named 'part3' |
| 185 | |
| 186 | RUN: not llvm-objcopy --extract-main-partition --extract-partition=part2 %p/Inputs/partitions.elf %t4 2>&1 | FileCheck --check-prefix=ERROR2 %s |
| 187 | ERROR2: error: cannot specify --extract-partition together with --extract-main-partition |