diff options
Diffstat (limited to 'llvm/test/tools/llvm-objcopy/MachO/only-section.test')
-rw-r--r-- | llvm/test/tools/llvm-objcopy/MachO/only-section.test | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/MachO/only-section.test b/llvm/test/tools/llvm-objcopy/MachO/only-section.test new file mode 100644 index 00000000000..4e26031d2e5 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/MachO/only-section.test @@ -0,0 +1,153 @@ +## Show that if --only-section is given, llvm-objcopy removes all sections +## except ones specified in the option. + +# RUN: yaml2obj %s > %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 |