Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / tools / llvm-objcopy / ELF / partitions.test
blobaf48053156e703dbe9b30c99e2f0a5efeb03c7e1
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.
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
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
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:                       0
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
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
51 MAIN: Program Headers:
52 MAIN-NEXT:   Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
53 MAIN-NEXT:   PHDR           0x000040 0x0000000000200040 0x0000000000200040 0x0001c0 0x0001c0 R   0x8
54 MAIN-NEXT:   LOAD           0x000000 0x0000000000200000 0x0000000000200000 0x000294 0x000294 R   0x1000
55 MAIN-NEXT:   LOAD           0x001000 0x0000000000201000 0x0000000000201000 0x000001 0x000001 R E 0x1000
56 MAIN-NEXT:   LOAD           0x002000 0x0000000000202000 0x0000000000202000 0x000080 0x000080 RW  0x1000
57 MAIN-NEXT:   LOAD           0x003000 0x0000000000209000 0x0000000000209000 0x000000 0x001000 RW  0x1000
58 MAIN-NEXT:   DYNAMIC        0x002000 0x0000000000202000 0x0000000000202000 0x000080 0x000080 RW  0x8
59 MAIN-NEXT:   GNU_RELRO      0x002000 0x0000000000202000 0x0000000000202000 0x000080 0x001000 R   0x1
60 MAIN-NEXT:   GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW  0x0
62 MAIN: Symbol table '.dynsym' contains 2 entries:
63 MAIN-NEXT:    Num:    Value          Size Type    Bind   Vis      Ndx Name
64 MAIN-NEXT:      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
65 MAIN-NEXT:      1: 0000000000201000     0 NOTYPE  GLOBAL DEFAULT    6 _start
67 MAIN: Symbol table '.symtab' contains 3 entries:
68 MAIN-NEXT:    Num:    Value          Size Type    Bind   Vis      Ndx Name
69 MAIN-NEXT:      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
70 MAIN-NEXT:      1: 0000000000202000     0 NOTYPE  LOCAL  HIDDEN     7 _DYNAMIC
71 MAIN-NEXT:      2: 0000000000201000     0 NOTYPE  GLOBAL DEFAULT    6 _start
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:                       0
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
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
108 PART1: Program Headers:
109 PART1-NEXT:   Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
110 PART1-NEXT:   PHDR           0x000040 0x0000000000203040 0x0000000000203040 0x000188 0x000188 R   0x1
111 PART1-NEXT:   LOAD           0x000000 0x0000000000203000 0x0000000000203000 0x00023a 0x00023a R   0x1000
112 PART1-NEXT:   LOAD           0x001000 0x0000000000204000 0x0000000000204000 0x000090 0x000090 RW  0x1000
113 PART1-NEXT:   LOAD           0x002000 0x0000000000205000 0x0000000000205000 0x000000 0x000008 RW  0x1000
114 PART1-NEXT:   DYNAMIC        0x001000 0x0000000000204000 0x0000000000204000 0x000090 0x000090 RW  0x8
115 PART1-NEXT:   GNU_RELRO      0x001000 0x0000000000204000 0x0000000000204000 0x000090 0x001000 R   0x1
116 PART1-NEXT:   GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW  0x0
118 PART1: Symbol table '.dynsym' contains 2 entries:
119 PART1-NEXT:    Num:    Value          Size Type    Bind   Vis      Ndx Name
120 PART1-NEXT:      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
121 PART1-NEXT:      1: 0000000000205000     0 NOTYPE  GLOBAL DEFAULT   15 g1
123 PART1: Symbol table '.symtab' contains 2 entries:
124 PART1-NEXT:    Num:    Value          Size Type    Bind   Vis      Ndx Name
125 PART1-NEXT:      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
126 PART1-NEXT:      1: 0000000000205000     0 NOTYPE  GLOBAL DEFAULT    6 g1
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:                       0
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
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
163 PART2: Program Headers:
164 PART2-NEXT:   Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
165 PART2-NEXT:   PHDR           0x000040 0x0000000000206040 0x0000000000206040 0x000188 0x000188 R   0x1
166 PART2-NEXT:   LOAD           0x000000 0x0000000000206000 0x0000000000206000 0x00023a 0x00023a R   0x1000
167 PART2-NEXT:   LOAD           0x001000 0x0000000000207000 0x0000000000207000 0x000090 0x000090 RW  0x1000
168 PART2-NEXT:   LOAD           0x002000 0x0000000000208000 0x0000000000208000 0x000000 0x000010 RW  0x1000
169 PART2-NEXT:   DYNAMIC        0x001000 0x0000000000207000 0x0000000000207000 0x000090 0x000090 RW  0x8
170 PART2-NEXT:   GNU_RELRO      0x001000 0x0000000000207000 0x0000000000207000 0x000090 0x001000 R   0x1
171 PART2-NEXT:   GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW  0x0
173 PART2: Symbol table '.dynsym' contains 2 entries:
174 PART2-NEXT:    Num:    Value          Size Type    Bind   Vis      Ndx Name
175 PART2-NEXT:      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
176 PART2-NEXT:      1: 0000000000208000     0 NOTYPE  GLOBAL DEFAULT   23 g2
178 PART2: Symbol table '.symtab' contains 2 entries:
179 PART2-NEXT:    Num:    Value          Size Type    Bind   Vis      Ndx Name
180 PART2-NEXT:      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
181 PART2-NEXT:      1: 0000000000208000     0 NOTYPE  GLOBAL DEFAULT    6 g2
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'
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