| ## Show that if --remove-section is given, llvm-objcopy removes sections |
| ## specified by the option. |
| |
| # RUN: yaml2obj %s -o %t |
| |
| ## Remove only __TEXT,__text section. |
| # RUN: llvm-objcopy --remove-section __TEXT,__text %t %t2 |
| # RUN: llvm-readobj --sections --section-data %t2 \ |
| # RUN: | FileCheck %s --check-prefixes=COMMON,REMOVE-TEXT-ONLY |
| |
| ## Remove multiple sections. |
| # RUN: llvm-objcopy --remove-section __TEXT,__text --remove-section __DATA,__data %t %t3 |
| # RUN: llvm-readobj --sections --section-data %t3 \ |
| # RUN: | FileCheck %s --check-prefixes=COMMON,REMOVE-TEXT-AND-DATA |
| |
| # COMMON: Sections [ |
| # REMOVE-TEXT-ONLY-NEXT: Section { |
| # REMOVE-TEXT-ONLY-NEXT: Index: 0 |
| # REMOVE-TEXT-ONLY-NEXT: Name: __data (5F 5F 64 61 74 61 00 00 00 00 00 00 00 00 00 00) |
| # REMOVE-TEXT-ONLY-NEXT: Segment: __DATA (5F 5F 44 41 54 41 00 00 00 00 00 00 00 00 00 00) |
| # REMOVE-TEXT-ONLY-NEXT: Address: 0x4 |
| # REMOVE-TEXT-ONLY-NEXT: Size: 0x4 |
| # REMOVE-TEXT-ONLY-NEXT: Offset: 264 |
| # REMOVE-TEXT-ONLY-NEXT: Alignment: 0 |
| # REMOVE-TEXT-ONLY-NEXT: RelocationOffset: 0x0 |
| # REMOVE-TEXT-ONLY-NEXT: RelocationCount: 0 |
| # REMOVE-TEXT-ONLY-NEXT: Type: Regular (0x0) |
| # REMOVE-TEXT-ONLY-NEXT: Attributes [ (0x0) |
| # REMOVE-TEXT-ONLY-NEXT: ] |
| # REMOVE-TEXT-ONLY-NEXT: Reserved1: 0x0 |
| # REMOVE-TEXT-ONLY-NEXT: Reserved2: 0x0 |
| # REMOVE-TEXT-ONLY-NEXT: Reserved3: 0x0 |
| # REMOVE-TEXT-ONLY-NEXT: SectionData ( |
| # REMOVE-TEXT-ONLY-NEXT: 0000: DDAADDAA |....| |
| # REMOVE-TEXT-ONLY-NEXT: ) |
| # REMOVE-TEXT-ONLY-NEXT: } |
| # COMMON-NEXT: Section { |
| # REMOVE-TEXT-ONLY-NEXT: Index: 1 |
| # REMOVE-TEXT-AND-DATA-NEXT: Index: 0 |
| # COMMON-NEXT: Name: __const (5F 5F 63 6F 6E 73 74 00 00 00 00 00 00 00 00 00) |
| # COMMON-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| # COMMON-NEXT: Address: 0x8 |
| # COMMON-NEXT: Size: 0x4 |
| # REMOVE-TEXT-ONLY-NEXT: Offset: 268 |
| # REMOVE-TEXT-AND-DATA-NEXT: Offset: 184 |
| # COMMON-NEXT: Alignment: 0 |
| # COMMON-NEXT: RelocationOffset: 0x0 |
| # COMMON-NEXT: RelocationCount: 0 |
| # COMMON-NEXT: Type: Regular (0x0) |
| # COMMON-NEXT: Attributes [ (0x0) |
| # COMMON-NEXT: ] |
| # COMMON-NEXT: Reserved1: 0x0 |
| # COMMON-NEXT: Reserved2: 0x0 |
| # COMMON-NEXT: Reserved3: 0x0 |
| # COMMON-NEXT: SectionData ( |
| # COMMON-NEXT: 0000: EEFFEEFF |....| |
| # COMMON-NEXT: ) |
| # COMMON-NEXT: } |
| # COMMON-NEXT: ] |
| |
| ## Keep all sections if the specified section name is not present in the |
| ## input. The output file should be the same as the input. |
| # RUN: llvm-objcopy --remove-section __TEXT,__foo %t %t4 |
| # RUN: cmp %t %t4 |
| |
| --- !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 |