xref: /llvm-project/llvm/test/tools/llvm-objcopy/MachO/add-multiple-sections.test (revision 4d54c6fc5ad5653afbded1d8fedbe2423dbb7233)
1*4d54c6fcSCornelius Aschermann## This test verifies that llvm-objcopy can add multiple sections to a Mach-O binary.
2*4d54c6fcSCornelius Aschermann
3*4d54c6fcSCornelius Aschermann# RUN: yaml2obj %s -o %t
4*4d54c6fcSCornelius Aschermann# RUN: echo -n FOOabcdefg > %t.foo.data
5*4d54c6fcSCornelius Aschermann# RUN: echo -n BARabcdefg > %t.bar.data
6*4d54c6fcSCornelius Aschermann
7*4d54c6fcSCornelius Aschermann## Case 1: Add a new section twice into an existing segment.
8*4d54c6fcSCornelius Aschermann# RUN: llvm-objcopy --add-section __TEXT,__foo=%t.foo.data %t %t.foo.1
9*4d54c6fcSCornelius Aschermann# RUN: llvm-objcopy --add-section __TEXT,__bar=%t.bar.data %t.foo.1 %t.foo.bar.1
10*4d54c6fcSCornelius Aschermann# RUN: llvm-readobj --sections --section-data %t.foo.bar.1 \
11*4d54c6fcSCornelius Aschermann# RUN:   | FileCheck %s -check-prefix=CASE1
12*4d54c6fcSCornelius Aschermann
13*4d54c6fcSCornelius Aschermann## Case 2: Add two new sections into an existing segment.
14*4d54c6fcSCornelius Aschermann# RUN: llvm-objcopy --add-section __TEXT,__foo=%t.foo.data --add-section __TEXT,__bar=%t.bar.data %t %t.foo.bar.2
15*4d54c6fcSCornelius Aschermann# RUN: llvm-readobj --sections --section-data %t.foo.bar.2 \
16*4d54c6fcSCornelius Aschermann# RUN:   | FileCheck %s -check-prefix=CASE1
17*4d54c6fcSCornelius Aschermann
18*4d54c6fcSCornelius Aschermann## Case 3: Add two new sections into two different segments.
19*4d54c6fcSCornelius Aschermann# RUN: llvm-objcopy --add-section __FOO,__foo=%t.foo.data --add-section __BAR,__bar=%t.bar.data %t %t.foo.bar.3
20*4d54c6fcSCornelius Aschermann# RUN: llvm-readobj --sections --section-data %t.foo.bar.3 \
21*4d54c6fcSCornelius Aschermann# RUN:   | FileCheck %s -check-prefix=CASE3
22*4d54c6fcSCornelius Aschermann
23*4d54c6fcSCornelius Aschermann--- !mach-o
24*4d54c6fcSCornelius AschermannFileHeader:
25*4d54c6fcSCornelius Aschermann  magic:           0xFEEDFACF
26*4d54c6fcSCornelius Aschermann  cputype:         0x01000007
27*4d54c6fcSCornelius Aschermann  cpusubtype:      0x00000003
28*4d54c6fcSCornelius Aschermann  filetype:        0x00000001
29*4d54c6fcSCornelius Aschermann  ncmds:           1
30*4d54c6fcSCornelius Aschermann  sizeofcmds:      152
31*4d54c6fcSCornelius Aschermann  flags:           0x00002000
32*4d54c6fcSCornelius Aschermann  reserved:        0x00000000
33*4d54c6fcSCornelius AschermannLoadCommands:
34*4d54c6fcSCornelius Aschermann  - cmd:             LC_SEGMENT_64
35*4d54c6fcSCornelius Aschermann    cmdsize:         152
36*4d54c6fcSCornelius Aschermann    segname:         __TEXT
37*4d54c6fcSCornelius Aschermann    vmaddr:          0
38*4d54c6fcSCornelius Aschermann    vmsize:          4
39*4d54c6fcSCornelius Aschermann    fileoff:         184
40*4d54c6fcSCornelius Aschermann    filesize:        4
41*4d54c6fcSCornelius Aschermann    maxprot:         7
42*4d54c6fcSCornelius Aschermann    initprot:        7
43*4d54c6fcSCornelius Aschermann    nsects:          1
44*4d54c6fcSCornelius Aschermann    flags:           0
45*4d54c6fcSCornelius Aschermann    Sections:
46*4d54c6fcSCornelius Aschermann      - sectname:        __text
47*4d54c6fcSCornelius Aschermann        segname:         __TEXT
48*4d54c6fcSCornelius Aschermann        addr:            0x0000000000000000
49*4d54c6fcSCornelius Aschermann        content:         'AABBCCDD'
50*4d54c6fcSCornelius Aschermann        size:            4
51*4d54c6fcSCornelius Aschermann        offset:          184
52*4d54c6fcSCornelius Aschermann        align:           0
53*4d54c6fcSCornelius Aschermann        reloff:          0x00000000
54*4d54c6fcSCornelius Aschermann        nreloc:          0
55*4d54c6fcSCornelius Aschermann        flags:           0x80000400
56*4d54c6fcSCornelius Aschermann        reserved1:       0x00000000
57*4d54c6fcSCornelius Aschermann        reserved2:       0x00000000
58*4d54c6fcSCornelius Aschermann        reserved3:       0x00000000
59*4d54c6fcSCornelius Aschermann
60*4d54c6fcSCornelius Aschermann# CASE1:        Sections [
61*4d54c6fcSCornelius Aschermann# CASE1-NEXT:    Section {
62*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Index: 0
63*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
64*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
65*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Address: 0x0
66*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Size: 0x4
67*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Offset: 344
68*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Alignment: 0
69*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      RelocationOffset: 0x0
70*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      RelocationCount: 0
71*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Type: Regular (0x0)
72*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Attributes [ (0x800004)
73*4d54c6fcSCornelius Aschermann# CASE1-NEXT:        PureInstructions (0x800000)
74*4d54c6fcSCornelius Aschermann# CASE1-NEXT:        SomeInstructions (0x4)
75*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      ]
76*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Reserved1: 0x0
77*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Reserved2: 0x0
78*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Reserved3: 0x0
79*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      SectionData (
80*4d54c6fcSCornelius Aschermann# CASE1-NEXT:        0000: AABBCCDD                             |....|
81*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      )
82*4d54c6fcSCornelius Aschermann# CASE1-NEXT:    }
83*4d54c6fcSCornelius Aschermann# CASE1-NEXT:    Section {
84*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Index: 1
85*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Name: __foo (5F 5F 66 6F 6F 00 00 00 00 00 00 00 00 00 00 00)
86*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
87*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Address: 0x4
88*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Size: 0xA
89*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Offset: 348
90*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Alignment: 0
91*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      RelocationOffset: 0x0
92*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      RelocationCount: 0
93*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Type: Regular (0x0)
94*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Attributes [ (0x0)
95*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      ]
96*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Reserved1: 0x0
97*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Reserved2: 0x0
98*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Reserved3: 0x0
99*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      SectionData (
100*4d54c6fcSCornelius Aschermann# CASE1-NEXT:        0000: 464F4F61 62636465 6667               |FOOabcdefg|
101*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      )
102*4d54c6fcSCornelius Aschermann# CASE1-NEXT:    }
103*4d54c6fcSCornelius Aschermann# CASE1-NEXT:    Section {
104*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Index: 2
105*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Name: __bar (5F 5F 62 61 72 00 00 00 00 00 00 00 00 00 00 00)
106*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
107*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Address: 0xE
108*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Size: 0xA
109*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Offset: 358
110*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Alignment: 0
111*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      RelocationOffset: 0x0
112*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      RelocationCount: 0
113*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Type: Regular (0x0)
114*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Attributes [ (0x0)
115*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      ]
116*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Reserved1: 0x0
117*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Reserved2: 0x0
118*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      Reserved3: 0x0
119*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      SectionData (
120*4d54c6fcSCornelius Aschermann# CASE1-NEXT:        0000: 42415261 62636465 6667               |BARabcdefg|
121*4d54c6fcSCornelius Aschermann# CASE1-NEXT:      )
122*4d54c6fcSCornelius Aschermann# CASE1-NEXT:    }
123*4d54c6fcSCornelius Aschermann# CASE1-NEXT:  ]
124*4d54c6fcSCornelius Aschermann
125*4d54c6fcSCornelius Aschermann# CASE3:        Sections [
126*4d54c6fcSCornelius Aschermann# CASE3-NEXT:    Section {
127*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Index: 0
128*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
129*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
130*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Address: 0x0
131*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Size: 0x4
132*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Offset: 488
133*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Alignment: 0
134*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      RelocationOffset: 0x0
135*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      RelocationCount: 0
136*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Type: Regular (0x0)
137*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Attributes [ (0x800004)
138*4d54c6fcSCornelius Aschermann# CASE3-NEXT:        PureInstructions (0x800000)
139*4d54c6fcSCornelius Aschermann# CASE3-NEXT:        SomeInstructions (0x4)
140*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      ]
141*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Reserved1: 0x0
142*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Reserved2: 0x0
143*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Reserved3: 0x0
144*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      SectionData (
145*4d54c6fcSCornelius Aschermann# CASE3-NEXT:        0000: AABBCCDD                             |....|
146*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      )
147*4d54c6fcSCornelius Aschermann# CASE3-NEXT:    }
148*4d54c6fcSCornelius Aschermann# CASE3-NEXT:    Section {
149*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Index: 1
150*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Name: __foo (5F 5F 66 6F 6F 00 00 00 00 00 00 00 00 00 00 00)
151*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Segment: __FOO (5F 5F 46 4F 4F 00 00 00 00 00 00 00 00 00 00 00)
152*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Address: 0xB8
153*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Size: 0xA
154*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Offset: 492
155*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Alignment: 0
156*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      RelocationOffset: 0x0
157*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      RelocationCount: 0
158*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Type: Regular (0x0)
159*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Attributes [ (0x0)
160*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      ]
161*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Reserved1: 0x0
162*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Reserved2: 0x0
163*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Reserved3: 0x0
164*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      SectionData (
165*4d54c6fcSCornelius Aschermann# CASE3-NEXT:        0000: 464F4F61 62636465 6667               |FOOabcdefg|
166*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      )
167*4d54c6fcSCornelius Aschermann# CASE3-NEXT:    }
168*4d54c6fcSCornelius Aschermann# CASE3-NEXT:    Section {
169*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Index: 2
170*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Name: __bar (5F 5F 62 61 72 00 00 00 00 00 00 00 00 00 00 00)
171*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Segment: __BAR (5F 5F 42 41 52 00 00 00 00 00 00 00 00 00 00 00)
172*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Address: 0x40B8
173*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Size: 0xA
174*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Offset: 502
175*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Alignment: 0
176*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      RelocationOffset: 0x0
177*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      RelocationCount: 0
178*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Type: Regular (0x0)
179*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Attributes [ (0x0)
180*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      ]
181*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Reserved1: 0x0
182*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Reserved2: 0x0
183*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      Reserved3: 0x0
184*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      SectionData (
185*4d54c6fcSCornelius Aschermann# CASE3-NEXT:        0000: 42415261 62636465 6667               |BARabcdefg|
186*4d54c6fcSCornelius Aschermann# CASE3-NEXT:      )
187*4d54c6fcSCornelius Aschermann# CASE3-NEXT:    }
188*4d54c6fcSCornelius Aschermann# CASE3-NEXT:  ]
189*4d54c6fcSCornelius Aschermann
190