reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    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:                       0x0
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: 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

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

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:                       0x0
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: 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

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

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:                       0x0
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: 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

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

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