1## This test verifies that llvm-objcopy can add multiple sections to a Mach-O binary. 2 3# RUN: yaml2obj %s -o %t 4# RUN: echo -n FOOabcdefg > %t.foo.data 5# RUN: echo -n BARabcdefg > %t.bar.data 6 7## Case 1: Add a new section twice into an existing segment. 8# RUN: llvm-objcopy --add-section __TEXT,__foo=%t.foo.data %t %t.foo.1 9# RUN: llvm-objcopy --add-section __TEXT,__bar=%t.bar.data %t.foo.1 %t.foo.bar.1 10# RUN: llvm-readobj --sections --section-data %t.foo.bar.1 \ 11# RUN: | FileCheck %s -check-prefix=CASE1 12 13## Case 2: Add two new sections into an existing segment. 14# RUN: llvm-objcopy --add-section __TEXT,__foo=%t.foo.data --add-section __TEXT,__bar=%t.bar.data %t %t.foo.bar.2 15# RUN: llvm-readobj --sections --section-data %t.foo.bar.2 \ 16# RUN: | FileCheck %s -check-prefix=CASE1 17 18## Case 3: Add two new sections into two different segments. 19# RUN: llvm-objcopy --add-section __FOO,__foo=%t.foo.data --add-section __BAR,__bar=%t.bar.data %t %t.foo.bar.3 20# RUN: llvm-readobj --sections --section-data %t.foo.bar.3 \ 21# RUN: | FileCheck %s -check-prefix=CASE3 22 23--- !mach-o 24FileHeader: 25 magic: 0xFEEDFACF 26 cputype: 0x01000007 27 cpusubtype: 0x00000003 28 filetype: 0x00000001 29 ncmds: 1 30 sizeofcmds: 152 31 flags: 0x00002000 32 reserved: 0x00000000 33LoadCommands: 34 - cmd: LC_SEGMENT_64 35 cmdsize: 152 36 segname: __TEXT 37 vmaddr: 0 38 vmsize: 4 39 fileoff: 184 40 filesize: 4 41 maxprot: 7 42 initprot: 7 43 nsects: 1 44 flags: 0 45 Sections: 46 - sectname: __text 47 segname: __TEXT 48 addr: 0x0000000000000000 49 content: 'AABBCCDD' 50 size: 4 51 offset: 184 52 align: 0 53 reloff: 0x00000000 54 nreloc: 0 55 flags: 0x80000400 56 reserved1: 0x00000000 57 reserved2: 0x00000000 58 reserved3: 0x00000000 59 60# CASE1: Sections [ 61# CASE1-NEXT: Section { 62# CASE1-NEXT: Index: 0 63# CASE1-NEXT: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) 64# CASE1-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) 65# CASE1-NEXT: Address: 0x0 66# CASE1-NEXT: Size: 0x4 67# CASE1-NEXT: Offset: 344 68# CASE1-NEXT: Alignment: 0 69# CASE1-NEXT: RelocationOffset: 0x0 70# CASE1-NEXT: RelocationCount: 0 71# CASE1-NEXT: Type: Regular (0x0) 72# CASE1-NEXT: Attributes [ (0x800004) 73# CASE1-NEXT: PureInstructions (0x800000) 74# CASE1-NEXT: SomeInstructions (0x4) 75# CASE1-NEXT: ] 76# CASE1-NEXT: Reserved1: 0x0 77# CASE1-NEXT: Reserved2: 0x0 78# CASE1-NEXT: Reserved3: 0x0 79# CASE1-NEXT: SectionData ( 80# CASE1-NEXT: 0000: AABBCCDD |....| 81# CASE1-NEXT: ) 82# CASE1-NEXT: } 83# CASE1-NEXT: Section { 84# CASE1-NEXT: Index: 1 85# CASE1-NEXT: Name: __foo (5F 5F 66 6F 6F 00 00 00 00 00 00 00 00 00 00 00) 86# CASE1-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) 87# CASE1-NEXT: Address: 0x4 88# CASE1-NEXT: Size: 0xA 89# CASE1-NEXT: Offset: 348 90# CASE1-NEXT: Alignment: 0 91# CASE1-NEXT: RelocationOffset: 0x0 92# CASE1-NEXT: RelocationCount: 0 93# CASE1-NEXT: Type: Regular (0x0) 94# CASE1-NEXT: Attributes [ (0x0) 95# CASE1-NEXT: ] 96# CASE1-NEXT: Reserved1: 0x0 97# CASE1-NEXT: Reserved2: 0x0 98# CASE1-NEXT: Reserved3: 0x0 99# CASE1-NEXT: SectionData ( 100# CASE1-NEXT: 0000: 464F4F61 62636465 6667 |FOOabcdefg| 101# CASE1-NEXT: ) 102# CASE1-NEXT: } 103# CASE1-NEXT: Section { 104# CASE1-NEXT: Index: 2 105# CASE1-NEXT: Name: __bar (5F 5F 62 61 72 00 00 00 00 00 00 00 00 00 00 00) 106# CASE1-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) 107# CASE1-NEXT: Address: 0xE 108# CASE1-NEXT: Size: 0xA 109# CASE1-NEXT: Offset: 358 110# CASE1-NEXT: Alignment: 0 111# CASE1-NEXT: RelocationOffset: 0x0 112# CASE1-NEXT: RelocationCount: 0 113# CASE1-NEXT: Type: Regular (0x0) 114# CASE1-NEXT: Attributes [ (0x0) 115# CASE1-NEXT: ] 116# CASE1-NEXT: Reserved1: 0x0 117# CASE1-NEXT: Reserved2: 0x0 118# CASE1-NEXT: Reserved3: 0x0 119# CASE1-NEXT: SectionData ( 120# CASE1-NEXT: 0000: 42415261 62636465 6667 |BARabcdefg| 121# CASE1-NEXT: ) 122# CASE1-NEXT: } 123# CASE1-NEXT: ] 124 125# CASE3: Sections [ 126# CASE3-NEXT: Section { 127# CASE3-NEXT: Index: 0 128# CASE3-NEXT: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) 129# CASE3-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) 130# CASE3-NEXT: Address: 0x0 131# CASE3-NEXT: Size: 0x4 132# CASE3-NEXT: Offset: 488 133# CASE3-NEXT: Alignment: 0 134# CASE3-NEXT: RelocationOffset: 0x0 135# CASE3-NEXT: RelocationCount: 0 136# CASE3-NEXT: Type: Regular (0x0) 137# CASE3-NEXT: Attributes [ (0x800004) 138# CASE3-NEXT: PureInstructions (0x800000) 139# CASE3-NEXT: SomeInstructions (0x4) 140# CASE3-NEXT: ] 141# CASE3-NEXT: Reserved1: 0x0 142# CASE3-NEXT: Reserved2: 0x0 143# CASE3-NEXT: Reserved3: 0x0 144# CASE3-NEXT: SectionData ( 145# CASE3-NEXT: 0000: AABBCCDD |....| 146# CASE3-NEXT: ) 147# CASE3-NEXT: } 148# CASE3-NEXT: Section { 149# CASE3-NEXT: Index: 1 150# CASE3-NEXT: Name: __foo (5F 5F 66 6F 6F 00 00 00 00 00 00 00 00 00 00 00) 151# CASE3-NEXT: Segment: __FOO (5F 5F 46 4F 4F 00 00 00 00 00 00 00 00 00 00 00) 152# CASE3-NEXT: Address: 0xB8 153# CASE3-NEXT: Size: 0xA 154# CASE3-NEXT: Offset: 492 155# CASE3-NEXT: Alignment: 0 156# CASE3-NEXT: RelocationOffset: 0x0 157# CASE3-NEXT: RelocationCount: 0 158# CASE3-NEXT: Type: Regular (0x0) 159# CASE3-NEXT: Attributes [ (0x0) 160# CASE3-NEXT: ] 161# CASE3-NEXT: Reserved1: 0x0 162# CASE3-NEXT: Reserved2: 0x0 163# CASE3-NEXT: Reserved3: 0x0 164# CASE3-NEXT: SectionData ( 165# CASE3-NEXT: 0000: 464F4F61 62636465 6667 |FOOabcdefg| 166# CASE3-NEXT: ) 167# CASE3-NEXT: } 168# CASE3-NEXT: Section { 169# CASE3-NEXT: Index: 2 170# CASE3-NEXT: Name: __bar (5F 5F 62 61 72 00 00 00 00 00 00 00 00 00 00 00) 171# CASE3-NEXT: Segment: __BAR (5F 5F 42 41 52 00 00 00 00 00 00 00 00 00 00 00) 172# CASE3-NEXT: Address: 0x40B8 173# CASE3-NEXT: Size: 0xA 174# CASE3-NEXT: Offset: 502 175# CASE3-NEXT: Alignment: 0 176# CASE3-NEXT: RelocationOffset: 0x0 177# CASE3-NEXT: RelocationCount: 0 178# CASE3-NEXT: Type: Regular (0x0) 179# CASE3-NEXT: Attributes [ (0x0) 180# CASE3-NEXT: ] 181# CASE3-NEXT: Reserved1: 0x0 182# CASE3-NEXT: Reserved2: 0x0 183# CASE3-NEXT: Reserved3: 0x0 184# CASE3-NEXT: SectionData ( 185# CASE3-NEXT: 0000: 42415261 62636465 6667 |BARabcdefg| 186# CASE3-NEXT: ) 187# CASE3-NEXT: } 188# CASE3-NEXT: ] 189 190