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