112bd4904SSeiya Nuta## This test verifies that llvm-objcopy copies an executable properly. It
212bd4904SSeiya Nuta## uses llvm-readobj instead of cmp because some parts of the object
312bd4904SSeiya Nuta## (e.g., the string table) are not identical; the output file is correct but
412bd4904SSeiya Nuta## some offsets differ from the input file.
555c81d42SFangrui Song# RUN: yaml2obj %s -o %t
612bd4904SSeiya Nuta# RUN: llvm-objcopy %t %t2
712bd4904SSeiya Nuta# RUN: llvm-readobj --file-headers --sections %t2 | FileCheck %s
812bd4904SSeiya Nuta
912bd4904SSeiya Nuta--- !mach-o
1012bd4904SSeiya NutaFileHeader:
1112bd4904SSeiya Nuta  magic:           0xFEEDFACF
1212bd4904SSeiya Nuta  cputype:         0x01000007
1312bd4904SSeiya Nuta  cpusubtype:      0x80000003
1412bd4904SSeiya Nuta  filetype:        0x00000002
1512bd4904SSeiya Nuta  ncmds:           15
1612bd4904SSeiya Nuta  sizeofcmds:      976
1712bd4904SSeiya Nuta  flags:           0x00200085
1812bd4904SSeiya Nuta  reserved:        0x00000000
1912bd4904SSeiya NutaLoadCommands:
2012bd4904SSeiya Nuta  - cmd:             LC_SEGMENT_64
2112bd4904SSeiya Nuta    cmdsize:         72
2212bd4904SSeiya Nuta    segname:         __PAGEZERO
2312bd4904SSeiya Nuta    vmaddr:          0
2412bd4904SSeiya Nuta    vmsize:          4294967296
2512bd4904SSeiya Nuta    fileoff:         0
2612bd4904SSeiya Nuta    filesize:        0
2712bd4904SSeiya Nuta    maxprot:         0
2812bd4904SSeiya Nuta    initprot:        0
2912bd4904SSeiya Nuta    nsects:          0
3012bd4904SSeiya Nuta    flags:           0
3112bd4904SSeiya Nuta  - cmd:             LC_SEGMENT_64
3212bd4904SSeiya Nuta    cmdsize:         232
3312bd4904SSeiya Nuta    segname:         __TEXT
3412bd4904SSeiya Nuta    vmaddr:          4294967296
3512bd4904SSeiya Nuta    vmsize:          4096
3612bd4904SSeiya Nuta    fileoff:         0
3712bd4904SSeiya Nuta    filesize:        4096
3812bd4904SSeiya Nuta    maxprot:         7
3912bd4904SSeiya Nuta    initprot:        5
4012bd4904SSeiya Nuta    nsects:          2
4112bd4904SSeiya Nuta    flags:           0
4212bd4904SSeiya Nuta    Sections:
4312bd4904SSeiya Nuta      - sectname:        __text
4412bd4904SSeiya Nuta        segname:         __TEXT
4512bd4904SSeiya Nuta        addr:            0x0000000100000F70
4612bd4904SSeiya Nuta        size:            58
4712bd4904SSeiya Nuta        offset:          0x00000F70
4812bd4904SSeiya Nuta        align:           4
4912bd4904SSeiya Nuta        reloff:          0x00000000
5012bd4904SSeiya Nuta        nreloc:          0
5112bd4904SSeiya Nuta        flags:           0x80000400
5212bd4904SSeiya Nuta        reserved1:       0x00000000
5312bd4904SSeiya Nuta        reserved2:       0x00000000
5412bd4904SSeiya Nuta        reserved3:       0x00000000
5512bd4904SSeiya Nuta      - sectname:        __unwind_info
5612bd4904SSeiya Nuta        segname:         __TEXT
5712bd4904SSeiya Nuta        addr:            0x0000000100000FAC
5812bd4904SSeiya Nuta        size:            72
5912bd4904SSeiya Nuta        offset:          0x00000FAC
6012bd4904SSeiya Nuta        align:           2
6112bd4904SSeiya Nuta        reloff:          0x00000000
6212bd4904SSeiya Nuta        nreloc:          0
6312bd4904SSeiya Nuta        flags:           0x00000000
6412bd4904SSeiya Nuta        reserved1:       0x00000000
6512bd4904SSeiya Nuta        reserved2:       0x00000000
6612bd4904SSeiya Nuta        reserved3:       0x00000000
6712bd4904SSeiya Nuta  - cmd:             LC_SEGMENT_64
6812bd4904SSeiya Nuta    cmdsize:         232
6912bd4904SSeiya Nuta    segname:         __DATA
7012bd4904SSeiya Nuta    vmaddr:          4294971392
7112bd4904SSeiya Nuta    vmsize:          4096
7212bd4904SSeiya Nuta    fileoff:         4096
7312bd4904SSeiya Nuta    filesize:        4096
7412bd4904SSeiya Nuta    maxprot:         7
7512bd4904SSeiya Nuta    initprot:        3
7612bd4904SSeiya Nuta    nsects:          2
7712bd4904SSeiya Nuta    flags:           0
7812bd4904SSeiya Nuta    Sections:
7912bd4904SSeiya Nuta      - sectname:        __data
8012bd4904SSeiya Nuta        segname:         __DATA
8112bd4904SSeiya Nuta        addr:            0x0000000100001000
8212bd4904SSeiya Nuta        size:            4
8312bd4904SSeiya Nuta        offset:          0x00001000
8412bd4904SSeiya Nuta        align:           2
8512bd4904SSeiya Nuta        reloff:          0x00000000
8612bd4904SSeiya Nuta        nreloc:          0
8712bd4904SSeiya Nuta        flags:           0x00000000
8812bd4904SSeiya Nuta        reserved1:       0x00000000
8912bd4904SSeiya Nuta        reserved2:       0x00000000
9012bd4904SSeiya Nuta        reserved3:       0x00000000
9112bd4904SSeiya Nuta      - sectname:        __common
9212bd4904SSeiya Nuta        segname:         __DATA
9312bd4904SSeiya Nuta        addr:            0x0000000100001004
9412bd4904SSeiya Nuta        size:            4
9512bd4904SSeiya Nuta        offset:          0x00000000
9612bd4904SSeiya Nuta        align:           2
9712bd4904SSeiya Nuta        reloff:          0x00000000
9812bd4904SSeiya Nuta        nreloc:          0
9912bd4904SSeiya Nuta        flags:           0x00000001
10012bd4904SSeiya Nuta        reserved1:       0x00000000
10112bd4904SSeiya Nuta        reserved2:       0x00000000
10212bd4904SSeiya Nuta        reserved3:       0x00000000
10312bd4904SSeiya Nuta  - cmd:             LC_SEGMENT_64
10412bd4904SSeiya Nuta    cmdsize:         72
10512bd4904SSeiya Nuta    segname:         __LINKEDIT
10612bd4904SSeiya Nuta    vmaddr:          4294975488
10712bd4904SSeiya Nuta    vmsize:          4096
10812bd4904SSeiya Nuta    fileoff:         8192
10912bd4904SSeiya Nuta    filesize:        232
11012bd4904SSeiya Nuta    maxprot:         7
11112bd4904SSeiya Nuta    initprot:        1
11212bd4904SSeiya Nuta    nsects:          0
11312bd4904SSeiya Nuta    flags:           0
11412bd4904SSeiya Nuta  - cmd:             LC_DYLD_INFO_ONLY
11512bd4904SSeiya Nuta    cmdsize:         48
11612bd4904SSeiya Nuta    rebase_off:      0
11712bd4904SSeiya Nuta    rebase_size:     0
11812bd4904SSeiya Nuta    bind_off:        0
11912bd4904SSeiya Nuta    bind_size:       0
12012bd4904SSeiya Nuta    weak_bind_off:   0
12112bd4904SSeiya Nuta    weak_bind_size:  0
12212bd4904SSeiya Nuta    lazy_bind_off:   0
12312bd4904SSeiya Nuta    lazy_bind_size:  0
12412bd4904SSeiya Nuta    export_off:      8192
12512bd4904SSeiya Nuta    export_size:     72
12612bd4904SSeiya Nuta  - cmd:             LC_SYMTAB
12712bd4904SSeiya Nuta    cmdsize:         24
12812bd4904SSeiya Nuta    symoff:          8272
12912bd4904SSeiya Nuta    nsyms:           6
13012bd4904SSeiya Nuta    stroff:          8368
13112bd4904SSeiya Nuta    strsize:         56
13212bd4904SSeiya Nuta  - cmd:             LC_DYSYMTAB
13312bd4904SSeiya Nuta    cmdsize:         80
13412bd4904SSeiya Nuta    ilocalsym:       0
13512bd4904SSeiya Nuta    nlocalsym:       0
13612bd4904SSeiya Nuta    iextdefsym:      0
13712bd4904SSeiya Nuta    nextdefsym:      5
13812bd4904SSeiya Nuta    iundefsym:       5
13912bd4904SSeiya Nuta    nundefsym:       1
14012bd4904SSeiya Nuta    tocoff:          0
14112bd4904SSeiya Nuta    ntoc:            0
14212bd4904SSeiya Nuta    modtaboff:       0
14312bd4904SSeiya Nuta    nmodtab:         0
14412bd4904SSeiya Nuta    extrefsymoff:    0
14512bd4904SSeiya Nuta    nextrefsyms:     0
14612bd4904SSeiya Nuta    indirectsymoff:  0
14712bd4904SSeiya Nuta    nindirectsyms:   0
14812bd4904SSeiya Nuta    extreloff:       0
14912bd4904SSeiya Nuta    nextrel:         0
15012bd4904SSeiya Nuta    locreloff:       0
15112bd4904SSeiya Nuta    nlocrel:         0
15212bd4904SSeiya Nuta  - cmd:             LC_LOAD_DYLINKER
15312bd4904SSeiya Nuta    cmdsize:         32
15412bd4904SSeiya Nuta    name:            12
155*c0da287cSFangrui Song    Content:         '/usr/lib/dyld'
15612bd4904SSeiya Nuta    ZeroPadBytes:    7
15712bd4904SSeiya Nuta  - cmd:             LC_UUID
15812bd4904SSeiya Nuta    cmdsize:         24
15912bd4904SSeiya Nuta    uuid:            B6EE4FB7-4E1E-3C7A-80D3-CFBD89DBC0FE
16012bd4904SSeiya Nuta  - cmd:             LC_BUILD_VERSION
16112bd4904SSeiya Nuta    cmdsize:         32
16212bd4904SSeiya Nuta    platform:        1
16312bd4904SSeiya Nuta    minos:           658944
16412bd4904SSeiya Nuta    sdk:             658944
16512bd4904SSeiya Nuta    ntools:          1
16612bd4904SSeiya Nuta    Tools:
16712bd4904SSeiya Nuta      - tool:            3
16812bd4904SSeiya Nuta        version:         29491968
16912bd4904SSeiya Nuta  - cmd:             LC_SOURCE_VERSION
17012bd4904SSeiya Nuta    cmdsize:         16
17112bd4904SSeiya Nuta    version:         0
172d619cf5aSFangrui Song  - cmd:             LC_LINKER_OPTIMIZATION_HINT
173d619cf5aSFangrui Song    cmdsize:         16
174d619cf5aSFangrui Song    dataoff:         0
175d619cf5aSFangrui Song    datasize:        0
17612bd4904SSeiya Nuta  - cmd:             LC_MAIN
17712bd4904SSeiya Nuta    cmdsize:         24
17812bd4904SSeiya Nuta    entryoff:        3984
17912bd4904SSeiya Nuta    stacksize:       0
18012bd4904SSeiya Nuta  - cmd:             LC_LOAD_DYLIB
18112bd4904SSeiya Nuta    cmdsize:         56
18212bd4904SSeiya Nuta    dylib:
18312bd4904SSeiya Nuta      name:            24
18412bd4904SSeiya Nuta      timestamp:       2
18512bd4904SSeiya Nuta      current_version: 82115073
18612bd4904SSeiya Nuta      compatibility_version: 65536
187*c0da287cSFangrui Song    Content:         '/usr/lib/libSystem.B.dylib'
18812bd4904SSeiya Nuta    ZeroPadBytes:    6
18912bd4904SSeiya Nuta  - cmd:             LC_FUNCTION_STARTS
19012bd4904SSeiya Nuta    cmdsize:         16
19112bd4904SSeiya Nuta    dataoff:         8264
19212bd4904SSeiya Nuta    datasize:        8
19312bd4904SSeiya Nuta  - cmd:             LC_DATA_IN_CODE
19412bd4904SSeiya Nuta    cmdsize:         16
19512bd4904SSeiya Nuta    dataoff:         8272
19612bd4904SSeiya Nuta    datasize:        0
19712bd4904SSeiya NutaLinkEditData:
19812bd4904SSeiya Nuta  ExportTrie:
19912bd4904SSeiya Nuta    TerminalSize:    0
20012bd4904SSeiya Nuta    NodeOffset:      0
20112bd4904SSeiya Nuta    Name:            ''
20212bd4904SSeiya Nuta    Flags:           0x0000000000000000
20312bd4904SSeiya Nuta    Address:         0x0000000000000000
20412bd4904SSeiya Nuta    Other:           0x0000000000000000
20512bd4904SSeiya Nuta    ImportName:      ''
20612bd4904SSeiya Nuta    Children:
20712bd4904SSeiya Nuta      - TerminalSize:    0
20812bd4904SSeiya Nuta        NodeOffset:      5
20912bd4904SSeiya Nuta        Name:            _
21012bd4904SSeiya Nuta        Flags:           0x0000000000000000
21112bd4904SSeiya Nuta        Address:         0x0000000000000000
21212bd4904SSeiya Nuta        Other:           0x0000000000000000
21312bd4904SSeiya Nuta        ImportName:      ''
21412bd4904SSeiya Nuta        Children:
21512bd4904SSeiya Nuta          - TerminalSize:    2
21612bd4904SSeiya Nuta            NodeOffset:      44
21712bd4904SSeiya Nuta            Name:            _mh_execute_header
21812bd4904SSeiya Nuta            Flags:           0x0000000000000000
21912bd4904SSeiya Nuta            Address:         0x0000000000000000
22012bd4904SSeiya Nuta            Other:           0x0000000000000000
22112bd4904SSeiya Nuta            ImportName:      ''
22212bd4904SSeiya Nuta          - TerminalSize:    3
22312bd4904SSeiya Nuta            NodeOffset:      48
22412bd4904SSeiya Nuta            Name:            foo
22512bd4904SSeiya Nuta            Flags:           0x0000000000000000
22612bd4904SSeiya Nuta            Address:         0x0000000000000F70
22712bd4904SSeiya Nuta            Other:           0x0000000000000000
22812bd4904SSeiya Nuta            ImportName:      ''
22912bd4904SSeiya Nuta          - TerminalSize:    3
23012bd4904SSeiya Nuta            NodeOffset:      53
23112bd4904SSeiya Nuta            Name:            main
23212bd4904SSeiya Nuta            Flags:           0x0000000000000000
23312bd4904SSeiya Nuta            Address:         0x0000000000000F90
23412bd4904SSeiya Nuta            Other:           0x0000000000000000
23512bd4904SSeiya Nuta            ImportName:      ''
23612bd4904SSeiya Nuta          - TerminalSize:    3
23712bd4904SSeiya Nuta            NodeOffset:      58
23812bd4904SSeiya Nuta            Name:            b
23912bd4904SSeiya Nuta            Flags:           0x0000000000000000
24012bd4904SSeiya Nuta            Address:         0x0000000000001000
24112bd4904SSeiya Nuta            Other:           0x0000000000000000
24212bd4904SSeiya Nuta            ImportName:      ''
24312bd4904SSeiya Nuta          - TerminalSize:    3
24412bd4904SSeiya Nuta            NodeOffset:      63
24512bd4904SSeiya Nuta            Name:            a
24612bd4904SSeiya Nuta            Flags:           0x0000000000000000
24712bd4904SSeiya Nuta            Address:         0x0000000000001004
24812bd4904SSeiya Nuta            Other:           0x0000000000000000
24912bd4904SSeiya Nuta            ImportName:      ''
25012bd4904SSeiya Nuta  NameList:
25112bd4904SSeiya Nuta    - n_strx:          2
25212bd4904SSeiya Nuta      n_type:          0x0F
25312bd4904SSeiya Nuta      n_sect:          1
25412bd4904SSeiya Nuta      n_desc:          16
25512bd4904SSeiya Nuta      n_value:         4294967296
25612bd4904SSeiya Nuta    - n_strx:          22
25712bd4904SSeiya Nuta      n_type:          0x0F
25812bd4904SSeiya Nuta      n_sect:          4
25912bd4904SSeiya Nuta      n_desc:          0
26012bd4904SSeiya Nuta      n_value:         4294971396
26112bd4904SSeiya Nuta    - n_strx:          25
26212bd4904SSeiya Nuta      n_type:          0x0F
26312bd4904SSeiya Nuta      n_sect:          3
26412bd4904SSeiya Nuta      n_desc:          0
26512bd4904SSeiya Nuta      n_value:         4294971392
26612bd4904SSeiya Nuta    - n_strx:          28
26712bd4904SSeiya Nuta      n_type:          0x0F
26812bd4904SSeiya Nuta      n_sect:          1
26912bd4904SSeiya Nuta      n_desc:          0
27012bd4904SSeiya Nuta      n_value:         4294971248
27112bd4904SSeiya Nuta    - n_strx:          33
27212bd4904SSeiya Nuta      n_type:          0x0F
27312bd4904SSeiya Nuta      n_sect:          1
27412bd4904SSeiya Nuta      n_desc:          0
27512bd4904SSeiya Nuta      n_value:         4294971280
27612bd4904SSeiya Nuta    - n_strx:          39
27712bd4904SSeiya Nuta      n_type:          0x01
27812bd4904SSeiya Nuta      n_sect:          0
27912bd4904SSeiya Nuta      n_desc:          256
28012bd4904SSeiya Nuta      n_value:         0
28112bd4904SSeiya Nuta  StringTable:
28212bd4904SSeiya Nuta    - ' '
28312bd4904SSeiya Nuta    - __mh_execute_header
28412bd4904SSeiya Nuta    - _a
28512bd4904SSeiya Nuta    - _b
28612bd4904SSeiya Nuta    - _foo
28712bd4904SSeiya Nuta    - _main
28812bd4904SSeiya Nuta    - dyld_stub_binder
28912bd4904SSeiya Nuta...
29012bd4904SSeiya Nuta
29112bd4904SSeiya Nuta# CHECK: FileType: Executable (0x2)
29212bd4904SSeiya Nuta# CHECK: Name: __text
29312bd4904SSeiya Nuta# CHECK: Name: __unwind_info
29412bd4904SSeiya Nuta# CHECK: Name: __data
29512bd4904SSeiya Nuta# CHECK: Name: __common
296