190 lines
6.8 KiB
Plaintext
190 lines
6.8 KiB
Plaintext
|
## 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: ]
|
||
|
|