| ## Show that if --only-section is given, llvm-objcopy removes all sections |
| ## except ones specified in the option. |
| |
| # RUN: yaml2obj %s -o %t |
| |
| ## Specify all sections. The output file should be the same as the input. |
| # RUN: llvm-objcopy -j __TEXT,__text -j __DATA,__data -j __TEXT,__const %t %t2 |
| # RUN: cmp %t %t2 |
| |
| ## Specify one section. The output file should contain only that section. |
| # RUN: llvm-objcopy --only-section __TEXT,__text %t %t3 |
| # RUN: llvm-readobj --sections --section-data --macho-segment %t3 \ |
| # RUN: | FileCheck %s --check-prefix=ONLY-TEXT-SECTION |
| |
| # ONLY-TEXT-SECTION: Sections [ |
| # ONLY-TEXT-SECTION-NEXT: Section { |
| # ONLY-TEXT-SECTION-NEXT: Index: 0 |
| # ONLY-TEXT-SECTION-NEXT: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) |
| # ONLY-TEXT-SECTION-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| # ONLY-TEXT-SECTION-NEXT: Address: 0x0 |
| # ONLY-TEXT-SECTION-NEXT: Size: 0x4 |
| # ONLY-TEXT-SECTION-NEXT: Offset: 184 |
| # ONLY-TEXT-SECTION-NEXT: Alignment: 0 |
| # ONLY-TEXT-SECTION-NEXT: RelocationOffset: 0x0 |
| # ONLY-TEXT-SECTION-NEXT: RelocationCount: 0 |
| # ONLY-TEXT-SECTION-NEXT: Type: Regular (0x0) |
| # ONLY-TEXT-SECTION-NEXT: Attributes [ (0x800004) |
| # ONLY-TEXT-SECTION-NEXT: PureInstructions (0x800000) |
| # ONLY-TEXT-SECTION-NEXT: SomeInstructions (0x4) |
| # ONLY-TEXT-SECTION-NEXT: ] |
| # ONLY-TEXT-SECTION-NEXT: Reserved1: 0x0 |
| # ONLY-TEXT-SECTION-NEXT: Reserved2: 0x0 |
| # ONLY-TEXT-SECTION-NEXT: Reserved3: 0x0 |
| # ONLY-TEXT-SECTION-NEXT: SectionData ( |
| # ONLY-TEXT-SECTION-NEXT: 0000: AABBCCDD |....| |
| # ONLY-TEXT-SECTION-NEXT: ) |
| # ONLY-TEXT-SECTION-NEXT: } |
| # ONLY-TEXT-SECTION-NEXT: ] |
| # ONLY-TEXT-SECTION-NEXT: Segment { |
| # ONLY-TEXT-SECTION-NEXT: Cmd: LC_SEGMENT_64 |
| # ONLY-TEXT-SECTION-NEXT: Name: |
| # ONLY-TEXT-SECTION-NEXT: Size: 152 |
| # ONLY-TEXT-SECTION-NEXT: vmaddr: 0x0 |
| # ONLY-TEXT-SECTION-NEXT: vmsize: 0x4 |
| # ONLY-TEXT-SECTION-NEXT: fileoff: 184 |
| # ONLY-TEXT-SECTION-NEXT: filesize: 4 |
| # ONLY-TEXT-SECTION-NEXT: maxprot: rwx |
| # ONLY-TEXT-SECTION-NEXT: initprot: rwx |
| # ONLY-TEXT-SECTION-NEXT: nsects: 1 |
| # ONLY-TEXT-SECTION-NEXT: flags: 0x0 |
| # ONLY-TEXT-SECTION-NEXT: } |
| |
| ## Remove all sections if the specified section name is not present in the input. |
| # RUN: llvm-objcopy --only-section __TEXT,__nonexistent %t %t4 2>&1 |
| # RUN: llvm-readobj --sections --section-data --macho-segment %t4 \ |
| # RUN: | FileCheck %s --check-prefix=NONEXISTENT-SECTION |
| |
| # NONEXISTENT-SECTION: Sections [ |
| # NONEXISTENT-SECTION-NEXT: ] |
| # NONEXISTENT-SECTION-NEXT: Segment { |
| # NONEXISTENT-SECTION-NEXT: Cmd: LC_SEGMENT_64 |
| # NONEXISTENT-SECTION-NEXT: Name: |
| # NONEXISTENT-SECTION-NEXT: Size: 72 |
| # NONEXISTENT-SECTION-NEXT: vmaddr: 0x0 |
| # NONEXISTENT-SECTION-NEXT: vmsize: 0x0 |
| # NONEXISTENT-SECTION-NEXT: fileoff: 104 |
| # NONEXISTENT-SECTION-NEXT: filesize: 0 |
| # NONEXISTENT-SECTION-NEXT: maxprot: rwx |
| # NONEXISTENT-SECTION-NEXT: initprot: rwx |
| # NONEXISTENT-SECTION-NEXT: nsects: 0 |
| # NONEXISTENT-SECTION-NEXT: flags: 0x0 |
| # NONEXISTENT-SECTION-NEXT: } |
| |
| ## Use wildcard to specify all sections under the __TEXT segment. |
| # RUN: llvm-objcopy --only-section "__TEXT,*" %t %t5 2>&1 |
| # RUN: llvm-readobj --file-header --sections %t5 \ |
| # RUN: | FileCheck %s --check-prefix=WILDCARD |
| |
| ## Make sure that it doesn't care about the segment/section name separator ",". |
| # RUN: llvm-objcopy --only-section "__TEXT*" %t %t6 2>&1 |
| # RUN: cmp %t5 %t6 |
| |
| # WILDCARD: NumOfLoadCommands: 1 |
| # WILDCARD: Sections [ |
| # WILDCARD: Index: 0 |
| # WILDCARD-NEXT: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) |
| # WILDCARD: Index: 1 |
| # WILDCARD-NEXT: Name: __const (5F 5F 63 6F 6E 73 74 00 00 00 00 00 00 00 00 00) |
| # WILDCARD-NOT: Index: 2 |
| # WILDCARD: ] |
| |
| --- !mach-o |
| FileHeader: |
| magic: 0xFEEDFACF |
| cputype: 0x01000007 |
| cpusubtype: 0x00000003 |
| filetype: 0x00000001 |
| ncmds: 1 |
| sizeofcmds: 312 |
| flags: 0x00002000 |
| reserved: 0x00000000 |
| LoadCommands: |
| - cmd: LC_SEGMENT_64 |
| cmdsize: 312 |
| segname: '' |
| vmaddr: 0 |
| vmsize: 12 |
| fileoff: 344 |
| filesize: 12 |
| maxprot: 7 |
| initprot: 7 |
| nsects: 3 |
| flags: 0 |
| Sections: |
| - sectname: __text |
| segname: __TEXT |
| addr: 0x0000000000000000 |
| content: 'AABBCCDD' |
| size: 4 |
| offset: 344 |
| align: 0 |
| reloff: 0x00000000 |
| nreloc: 0 |
| flags: 0x80000400 |
| reserved1: 0x00000000 |
| reserved2: 0x00000000 |
| reserved3: 0x00000000 |
| - sectname: __data |
| segname: __DATA |
| addr: 0x0000000000000004 |
| content: 'DDAADDAA' |
| size: 4 |
| offset: 348 |
| align: 0 |
| reloff: 0x00000000 |
| nreloc: 0 |
| flags: 0x00000000 |
| reserved1: 0x00000000 |
| reserved2: 0x00000000 |
| reserved3: 0x00000000 |
| - sectname: __const |
| segname: __TEXT |
| addr: 0x0000000000000008 |
| content: 'EEFFEEFF' |
| size: 4 |
| offset: 352 |
| align: 0 |
| reloff: 0x00000000 |
| nreloc: 0 |
| flags: 0x00000000 |
| reserved1: 0x00000000 |
| reserved2: 0x00000000 |
| reserved3: 0x00000000 |