| ## This test verifies that llvm-objcopy can add multiple sections to a Mach-O binary. |
| |
| # RUN: yaml2obj %s -o %t |
| # RUN: echo -n FOOabcdefg > %t.foo.data |
| # RUN: echo -n BARabcdefg > %t.bar.data |
| |
| ## Case 1: Add a new section twice into an existing segment. |
| # RUN: llvm-objcopy --add-section __TEXT,__foo=%t.foo.data %t %t.foo.1 |
| # RUN: llvm-objcopy --add-section __TEXT,__bar=%t.bar.data %t.foo.1 %t.foo.bar.1 |
| # RUN: llvm-readobj --sections --section-data %t.foo.bar.1 \ |
| # RUN: | FileCheck %s -check-prefix=CASE1 |
| |
| ## Case 2: Add two new sections into an existing segment. |
| # RUN: llvm-objcopy --add-section __TEXT,__foo=%t.foo.data --add-section __TEXT,__bar=%t.bar.data %t %t.foo.bar.2 |
| # RUN: llvm-readobj --sections --section-data %t.foo.bar.2 \ |
| # RUN: | FileCheck %s -check-prefix=CASE1 |
| |
| ## Case 3: Add two new sections into two different segments. |
| # RUN: llvm-objcopy --add-section __FOO,__foo=%t.foo.data --add-section __BAR,__bar=%t.bar.data %t %t.foo.bar.3 |
| # RUN: llvm-readobj --sections --section-data %t.foo.bar.3 \ |
| # RUN: | FileCheck %s -check-prefix=CASE3 |
| |
| --- !mach-o |
| FileHeader: |
| magic: 0xFEEDFACF |
| cputype: 0x01000007 |
| cpusubtype: 0x00000003 |
| filetype: 0x00000001 |
| ncmds: 1 |
| sizeofcmds: 152 |
| flags: 0x00002000 |
| reserved: 0x00000000 |
| LoadCommands: |
| - cmd: LC_SEGMENT_64 |
| cmdsize: 152 |
| segname: __TEXT |
| vmaddr: 0 |
| vmsize: 4 |
| fileoff: 184 |
| filesize: 4 |
| maxprot: 7 |
| initprot: 7 |
| nsects: 1 |
| flags: 0 |
| Sections: |
| - sectname: __text |
| segname: __TEXT |
| addr: 0x0000000000000000 |
| content: 'AABBCCDD' |
| size: 4 |
| offset: 184 |
| align: 0 |
| reloff: 0x00000000 |
| nreloc: 0 |
| flags: 0x80000400 |
| reserved1: 0x00000000 |
| reserved2: 0x00000000 |
| reserved3: 0x00000000 |
| |
| # CASE1: Sections [ |
| # CASE1-NEXT: Section { |
| # CASE1-NEXT: Index: 0 |
| # CASE1-NEXT: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) |
| # CASE1-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| # CASE1-NEXT: Address: 0x0 |
| # CASE1-NEXT: Size: 0x4 |
| # CASE1-NEXT: Offset: 344 |
| # CASE1-NEXT: Alignment: 0 |
| # CASE1-NEXT: RelocationOffset: 0x0 |
| # CASE1-NEXT: RelocationCount: 0 |
| # CASE1-NEXT: Type: Regular (0x0) |
| # CASE1-NEXT: Attributes [ (0x800004) |
| # CASE1-NEXT: PureInstructions (0x800000) |
| # CASE1-NEXT: SomeInstructions (0x4) |
| # CASE1-NEXT: ] |
| # CASE1-NEXT: Reserved1: 0x0 |
| # CASE1-NEXT: Reserved2: 0x0 |
| # CASE1-NEXT: Reserved3: 0x0 |
| # CASE1-NEXT: SectionData ( |
| # CASE1-NEXT: 0000: AABBCCDD |....| |
| # CASE1-NEXT: ) |
| # CASE1-NEXT: } |
| # CASE1-NEXT: Section { |
| # CASE1-NEXT: Index: 1 |
| # CASE1-NEXT: Name: __foo (5F 5F 66 6F 6F 00 00 00 00 00 00 00 00 00 00 00) |
| # CASE1-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| # CASE1-NEXT: Address: 0x4 |
| # CASE1-NEXT: Size: 0xA |
| # CASE1-NEXT: Offset: 348 |
| # CASE1-NEXT: Alignment: 0 |
| # CASE1-NEXT: RelocationOffset: 0x0 |
| # CASE1-NEXT: RelocationCount: 0 |
| # CASE1-NEXT: Type: Regular (0x0) |
| # CASE1-NEXT: Attributes [ (0x0) |
| # CASE1-NEXT: ] |
| # CASE1-NEXT: Reserved1: 0x0 |
| # CASE1-NEXT: Reserved2: 0x0 |
| # CASE1-NEXT: Reserved3: 0x0 |
| # CASE1-NEXT: SectionData ( |
| # CASE1-NEXT: 0000: 464F4F61 62636465 6667 |FOOabcdefg| |
| # CASE1-NEXT: ) |
| # CASE1-NEXT: } |
| # CASE1-NEXT: Section { |
| # CASE1-NEXT: Index: 2 |
| # CASE1-NEXT: Name: __bar (5F 5F 62 61 72 00 00 00 00 00 00 00 00 00 00 00) |
| # CASE1-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| # CASE1-NEXT: Address: 0xE |
| # CASE1-NEXT: Size: 0xA |
| # CASE1-NEXT: Offset: 358 |
| # CASE1-NEXT: Alignment: 0 |
| # CASE1-NEXT: RelocationOffset: 0x0 |
| # CASE1-NEXT: RelocationCount: 0 |
| # CASE1-NEXT: Type: Regular (0x0) |
| # CASE1-NEXT: Attributes [ (0x0) |
| # CASE1-NEXT: ] |
| # CASE1-NEXT: Reserved1: 0x0 |
| # CASE1-NEXT: Reserved2: 0x0 |
| # CASE1-NEXT: Reserved3: 0x0 |
| # CASE1-NEXT: SectionData ( |
| # CASE1-NEXT: 0000: 42415261 62636465 6667 |BARabcdefg| |
| # CASE1-NEXT: ) |
| # CASE1-NEXT: } |
| # CASE1-NEXT: ] |
| |
| # CASE3: Sections [ |
| # CASE3-NEXT: Section { |
| # CASE3-NEXT: Index: 0 |
| # CASE3-NEXT: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) |
| # CASE3-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| # CASE3-NEXT: Address: 0x0 |
| # CASE3-NEXT: Size: 0x4 |
| # CASE3-NEXT: Offset: 488 |
| # CASE3-NEXT: Alignment: 0 |
| # CASE3-NEXT: RelocationOffset: 0x0 |
| # CASE3-NEXT: RelocationCount: 0 |
| # CASE3-NEXT: Type: Regular (0x0) |
| # CASE3-NEXT: Attributes [ (0x800004) |
| # CASE3-NEXT: PureInstructions (0x800000) |
| # CASE3-NEXT: SomeInstructions (0x4) |
| # CASE3-NEXT: ] |
| # CASE3-NEXT: Reserved1: 0x0 |
| # CASE3-NEXT: Reserved2: 0x0 |
| # CASE3-NEXT: Reserved3: 0x0 |
| # CASE3-NEXT: SectionData ( |
| # CASE3-NEXT: 0000: AABBCCDD |....| |
| # CASE3-NEXT: ) |
| # CASE3-NEXT: } |
| # CASE3-NEXT: Section { |
| # CASE3-NEXT: Index: 1 |
| # CASE3-NEXT: Name: __foo (5F 5F 66 6F 6F 00 00 00 00 00 00 00 00 00 00 00) |
| # CASE3-NEXT: Segment: __FOO (5F 5F 46 4F 4F 00 00 00 00 00 00 00 00 00 00 00) |
| # CASE3-NEXT: Address: 0xB8 |
| # CASE3-NEXT: Size: 0xA |
| # CASE3-NEXT: Offset: 492 |
| # CASE3-NEXT: Alignment: 0 |
| # CASE3-NEXT: RelocationOffset: 0x0 |
| # CASE3-NEXT: RelocationCount: 0 |
| # CASE3-NEXT: Type: Regular (0x0) |
| # CASE3-NEXT: Attributes [ (0x0) |
| # CASE3-NEXT: ] |
| # CASE3-NEXT: Reserved1: 0x0 |
| # CASE3-NEXT: Reserved2: 0x0 |
| # CASE3-NEXT: Reserved3: 0x0 |
| # CASE3-NEXT: SectionData ( |
| # CASE3-NEXT: 0000: 464F4F61 62636465 6667 |FOOabcdefg| |
| # CASE3-NEXT: ) |
| # CASE3-NEXT: } |
| # CASE3-NEXT: Section { |
| # CASE3-NEXT: Index: 2 |
| # CASE3-NEXT: Name: __bar (5F 5F 62 61 72 00 00 00 00 00 00 00 00 00 00 00) |
| # CASE3-NEXT: Segment: __BAR (5F 5F 42 41 52 00 00 00 00 00 00 00 00 00 00 00) |
| # CASE3-NEXT: Address: 0x40B8 |
| # CASE3-NEXT: Size: 0xA |
| # CASE3-NEXT: Offset: 502 |
| # CASE3-NEXT: Alignment: 0 |
| # CASE3-NEXT: RelocationOffset: 0x0 |
| # CASE3-NEXT: RelocationCount: 0 |
| # CASE3-NEXT: Type: Regular (0x0) |
| # CASE3-NEXT: Attributes [ (0x0) |
| # CASE3-NEXT: ] |
| # CASE3-NEXT: Reserved1: 0x0 |
| # CASE3-NEXT: Reserved2: 0x0 |
| # CASE3-NEXT: Reserved3: 0x0 |
| # CASE3-NEXT: SectionData ( |
| # CASE3-NEXT: 0000: 42415261 62636465 6667 |BARabcdefg| |
| # CASE3-NEXT: ) |
| # CASE3-NEXT: } |
| # CASE3-NEXT: ] |
| |