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