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