## 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