190 lines · plain
1## This test verifies that llvm-objcopy can add multiple sections to a Mach-O binary.2 3# RUN: yaml2obj %s -o %t4# RUN: echo -n FOOabcdefg > %t.foo.data5# RUN: echo -n BARabcdefg > %t.bar.data6 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.19# RUN: llvm-objcopy --add-section __TEXT,__bar=%t.bar.data %t.foo.1 %t.foo.bar.110# RUN: llvm-readobj --sections --section-data %t.foo.bar.1 \11# RUN: | FileCheck %s -check-prefix=CASE112 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.215# RUN: llvm-readobj --sections --section-data %t.foo.bar.2 \16# RUN: | FileCheck %s -check-prefix=CASE117 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.320# RUN: llvm-readobj --sections --section-data %t.foo.bar.3 \21# RUN: | FileCheck %s -check-prefix=CASE322 23--- !mach-o24FileHeader:25 magic: 0xFEEDFACF26 cputype: 0x0100000727 cpusubtype: 0x0000000328 filetype: 0x0000000129 ncmds: 130 sizeofcmds: 15231 flags: 0x0000200032 reserved: 0x0000000033LoadCommands:34 - cmd: LC_SEGMENT_6435 cmdsize: 15236 segname: __TEXT37 vmaddr: 038 vmsize: 439 fileoff: 18440 filesize: 441 maxprot: 742 initprot: 743 nsects: 144 flags: 045 Sections:46 - sectname: __text47 segname: __TEXT48 addr: 0x000000000000000049 content: 'AABBCCDD'50 size: 451 offset: 18452 align: 053 reloff: 0x0000000054 nreloc: 055 flags: 0x8000040056 reserved1: 0x0000000057 reserved2: 0x0000000058 reserved3: 0x0000000059 60# CASE1: Sections [61# CASE1-NEXT: Section {62# CASE1-NEXT: Index: 063# 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: 0x066# CASE1-NEXT: Size: 0x467# CASE1-NEXT: Offset: 34468# CASE1-NEXT: Alignment: 069# CASE1-NEXT: RelocationOffset: 0x070# CASE1-NEXT: RelocationCount: 071# 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: 0x077# CASE1-NEXT: Reserved2: 0x078# CASE1-NEXT: Reserved3: 0x079# CASE1-NEXT: SectionData (80# CASE1-NEXT: 0000: AABBCCDD |....|81# CASE1-NEXT: )82# CASE1-NEXT: }83# CASE1-NEXT: Section {84# CASE1-NEXT: Index: 185# 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: 0x488# CASE1-NEXT: Size: 0xA89# CASE1-NEXT: Offset: 34890# CASE1-NEXT: Alignment: 091# CASE1-NEXT: RelocationOffset: 0x092# CASE1-NEXT: RelocationCount: 093# CASE1-NEXT: Type: Regular (0x0)94# CASE1-NEXT: Attributes [ (0x0)95# CASE1-NEXT: ]96# CASE1-NEXT: Reserved1: 0x097# CASE1-NEXT: Reserved2: 0x098# CASE1-NEXT: Reserved3: 0x099# 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: 2105# 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: 0xE108# CASE1-NEXT: Size: 0xA109# CASE1-NEXT: Offset: 358110# CASE1-NEXT: Alignment: 0111# CASE1-NEXT: RelocationOffset: 0x0112# CASE1-NEXT: RelocationCount: 0113# CASE1-NEXT: Type: Regular (0x0)114# CASE1-NEXT: Attributes [ (0x0)115# CASE1-NEXT: ]116# CASE1-NEXT: Reserved1: 0x0117# CASE1-NEXT: Reserved2: 0x0118# CASE1-NEXT: Reserved3: 0x0119# 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: 0128# 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: 0x0131# CASE3-NEXT: Size: 0x4132# CASE3-NEXT: Offset: 488133# CASE3-NEXT: Alignment: 0134# CASE3-NEXT: RelocationOffset: 0x0135# CASE3-NEXT: RelocationCount: 0136# 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: 0x0142# CASE3-NEXT: Reserved2: 0x0143# CASE3-NEXT: Reserved3: 0x0144# CASE3-NEXT: SectionData (145# CASE3-NEXT: 0000: AABBCCDD |....|146# CASE3-NEXT: )147# CASE3-NEXT: }148# CASE3-NEXT: Section {149# CASE3-NEXT: Index: 1150# 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: 0xB8153# CASE3-NEXT: Size: 0xA154# CASE3-NEXT: Offset: 492155# CASE3-NEXT: Alignment: 0156# CASE3-NEXT: RelocationOffset: 0x0157# CASE3-NEXT: RelocationCount: 0158# CASE3-NEXT: Type: Regular (0x0)159# CASE3-NEXT: Attributes [ (0x0)160# CASE3-NEXT: ]161# CASE3-NEXT: Reserved1: 0x0162# CASE3-NEXT: Reserved2: 0x0163# CASE3-NEXT: Reserved3: 0x0164# 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: 2170# 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: 0x40B8173# CASE3-NEXT: Size: 0xA174# CASE3-NEXT: Offset: 502175# CASE3-NEXT: Alignment: 0176# CASE3-NEXT: RelocationOffset: 0x0177# CASE3-NEXT: RelocationCount: 0178# CASE3-NEXT: Type: Regular (0x0)179# CASE3-NEXT: Attributes [ (0x0)180# CASE3-NEXT: ]181# CASE3-NEXT: Reserved1: 0x0182# CASE3-NEXT: Reserved2: 0x0183# CASE3-NEXT: Reserved3: 0x0184# CASE3-NEXT: SectionData (185# CASE3-NEXT: 0000: 42415261 62636465 6667 |BARabcdefg|186# CASE3-NEXT: )187# CASE3-NEXT: }188# CASE3-NEXT: ]189 190