[Alignment][NFC] Instructions::getLoadStoreAlignment
[llvm-complete.git] / test / tools / llvm-objcopy / ELF / preserve-segment-contents.test
blobf54e83204cf31cc293dc4b683c48f7ee5ee78241
1 # We want to preserve areas in segments that are not covered by section headers.
2 # This test shows that we do this for areas at the start of a segment, between
3 # sections in a segment, and after all sections in a segment.
4 # To create inputs with arbitrary data in segments, not covered by sections, we
5 # use yaml2obj to create segments with sections covering all areas, then remove
6 # some sections in those segments, and finally write over the areas of the
7 # removed sections using python.
9 # blob* sections are the sections that will be removed to create unlabelled
10 # areas and then overwritten with data to show we preserve the data.
12 # RUN: yaml2obj %s -o %t.base
13 # RUN: llvm-objcopy %t.base %t.stripped --regex -R blob.*
14 # Show that the removal leaves the bytes as zeroes, as desired, for all our
15 # test cases.
16 # RUN: od -t x1 -j 0x2000 -N 24 %t.stripped | FileCheck %s --ignore-case --check-prefix=CHECK1 -DPATTERN="00 00 00 00"
17 # RUN: od -t x1 -j 0x2100 -N 12 %t.stripped | FileCheck %s --ignore-case --check-prefix=CHECK2 -DPATTERN="00 00 00 00"
18 # RUN: od -t x1 -j 0x2200 -N 4  %t.stripped | FileCheck %s --ignore-case --check-prefix=CHECK3 -DPATTERN="00 00 00 00"
19 # RUN: od -t x1 -j 0x2300 -N 12 %t.stripped | FileCheck %s --ignore-case --check-prefix=CHECK4 -DPATTERN="00 00 00 00"
20 # RUN: od -t x1 -j 0x3000 -N 68 %t.stripped | FileCheck %s --ignore-case --check-prefix=CHECK5 -DPATTERN="00 00 00 00"
21 # RUN: od -t x1 -j 0x4000 -N 60 %t.stripped | FileCheck %s --ignore-case --check-prefix=CHECK6 -DPATTERN="00 00 00 00"
22 # RUN: od -t x1 -j 0x5000 -N 60 %t.stripped | FileCheck %s --ignore-case --check-prefix=CHECK7 -DPATTERN="00 00 00 00"
24 # RUN: cp %t.stripped %t.in
25 # RUN: echo "with open('%/t.in', 'rb+') as input:"                                 > %t.py
26 # RUN: echo "  for offset in ["                                                   >> %t.py
27 # RUN: echo "   0x2000, 0x2008, 0x200C, 0x2014, 0x2104, 0x2300,"                  >> %t.py
28 # RUN: echo "   0x3008, 0x3010, 0x3018, 0x3020, 0x3028, 0x302C, 0x3034, 0x303C,"  >> %t.py
29 # RUN: echo "   0x4000, 0x4008, 0x4010, 0x4014, 0x401C, 0x4024, 0x4034,"          >> %t.py
30 # RUN: echo "   0x5000, 0x5008, 0x5010, 0x501C, 0x5024, 0x502C, 0x5030, 0x5038]:" >> %t.py
31 # RUN: echo "    input.seek(offset)"                                              >> %t.py
32 # RUN: echo "    input.write(bytearray.fromhex('DEADBEEF'))"                      >> %t.py
33 # RUN: %python %t.py
34 # RUN: llvm-objcopy %t.in %t.out
35 # RUN: od -t x1 -j 0x2000 -N 24 %t.out | FileCheck %s --ignore-case --check-prefix=CHECK1 -DPATTERN="de ad be ef"
36 # RUN: od -t x1 -j 0x2100 -N 12 %t.out | FileCheck %s --ignore-case --check-prefix=CHECK2 -DPATTERN="de ad be ef"
37 # RUN: od -t x1 -j 0x2200 -N 4  %t.out | FileCheck %s --ignore-case --check-prefix=CHECK3 -DPATTERN="de ad be ef"
38 # RUN: od -t x1 -j 0x2300 -N 12 %t.out | FileCheck %s --ignore-case --check-prefix=CHECK4 -DPATTERN="de ad be ef"
39 # RUN: od -t x1 -j 0x3000 -N 68 %t.out | FileCheck %s --ignore-case --check-prefix=CHECK5 -DPATTERN="de ad be ef"
40 # RUN: od -t x1 -j 0x4000 -N 60 %t.out | FileCheck %s --ignore-case --check-prefix=CHECK6 -DPATTERN="de ad be ef"
41 # RUN: od -t x1 -j 0x5000 -N 60 %t.out | FileCheck %s --ignore-case --check-prefix=CHECK7 -DPATTERN="de ad be ef"
43 # CHECK1:      [[PATTERN]] 11 22 33 44 [[PATTERN]] [[PATTERN]]
44 # CHECK1-NEXT: 55 66 77 88 [[PATTERN]]
45 # CHECK2:      99 00 aa bb [[PATTERN]] cc dd ee ff
46 # CHECK3:      fe fe fe fe
47 # CHECK4:      [[PATTERN]] 00 00 00 00 00 00 00 00
48 # CHECK5:      ff ff ee ee dd dd cc cc [[PATTERN]] bb bb aa aa
49 # CHECK5-NEXT: [[PATTERN]] 00 00 99 99 [[PATTERN]] 88 88 77 77
50 # CHECK5-NEXT: [[PATTERN]] 66 66 55 55 [[PATTERN]] [[PATTERN]]
51 # CHECK5-NEXT: 44 44 33 33 [[PATTERN]] 22 22 11 11 [[PATTERN]]
52 # CHECK5-NEXT: 00 11 22 33
53 # CHECK6:      [[PATTERN]] 44 55 66 77 [[PATTERN]] 88 99 aa bb
54 # CHECK6-NEXT: [[PATTERN]] [[PATTERN]] cc dd ee ff [[PATTERN]]
55 # CHECK6-NEXT: ff ee dd cc [[PATTERN]] bb aa 99 88 77 66 55 44
56 # CHECK6-NEXT: 33 22 11 00 [[PATTERN]] 11 11 11 11
57 # CHECK7:      [[PATTERN]] 12 34 56 78 [[PATTERN]] 90 ab cd ef
58 # CHECK7-NEXT: [[PATTERN]] fe dc ba 09 87 65 43 21 [[PATTERN]]
59 # CHECK7-NEXT: 22 22 22 22 [[PATTERN]] 33 33 33 33 [[PATTERN]]
60 # CHECK7-NEXT: [[PATTERN]] 44 44 44 44 [[PATTERN]]
62 --- !ELF
63 FileHeader:
64   Class:   ELFCLASS64
65   Data:    ELFDATA2LSB
66   Type:    ET_EXEC
67   Machine: EM_X86_64
68 Sections:
69   - Name: blob1
70     Type: SHT_PROGBITS
71     Content: 'abbababa'
72     Address: 0x2000
73     AddressAlign: 0x2000
74   - Name: section1
75     Type: SHT_PROGBITS
76     Address: 0x2004
77     Content: '11223344'
78   - Name: blob2
79     Type: SHT_PROGBITS
80     Content: 'abbababa'
81     Address: 0x2008
82   - Name: section2
83     Type: SHT_NOBITS
84     Size: 4
85     Address: 0x200C
86   - Name: blob3
87     Type: SHT_PROGBITS
88     Content: 'abbababa'
89     Address: 0x2010
90   - Name: section3
91     Type: SHT_PROGBITS
92     Content: '55667788'
93     Address: 0x2014
94   - Name: blob4
95     Type: SHT_PROGBITS
96     Content: 'abbababa'
97     Address: 0x2018
98   - Name: section4
99     Type: SHT_PROGBITS
100     Content: '9900aabb'
101     Address: 0x2100
102     AddressAlign: 0x100
103   - Name: blob5
104     Type: SHT_PROGBITS
105     Content: 'abbababa'
106     Address: 0x2104
107   - Name: section5
108     Type: SHT_PROGBITS
109     Address: 0x2108
110     Content: 'ccddeeff'
111   - Name: section6
112     Type: SHT_PROGBITS
113     Content: 'fefefefe'
114     Address: 0x2200
115     AddressAlign: 0x100
116   - Name: blob6
117     Type: SHT_PROGBITS
118     Content: 'abbababa'
119     Address: 0x2300
120     AddressAlign: 0x100
121   - Name: sectionA
122     Type: SHT_PROGBITS
123     Content: 'ffffeeee'
124     Address: 0x3000
125     AddressAlign: 0x1000
126   - Name: sectionB
127     Type: SHT_PROGBITS
128     Content: 'ddddcccc'
129     Address: 0x3004
130   - Name: blobA
131     Type: SHT_PROGBITS
132     Content: 'abbababa'
133     Address: 0x3008
134   - Name: sectionC
135     Type: SHT_PROGBITS
136     Content: 'bbbbaaaa'
137     Address: 0x300C
138   - Name: blobB
139     Type: SHT_PROGBITS
140     Content: 'abbababa'
141     Address: 0x3010
142   - Name: sectionD
143     Type: SHT_PROGBITS
144     Content: '00009999'
145     Address: 0x3014
146   - Name: blobC
147     Type: SHT_PROGBITS
148     Content: 'abbababa'
149     Address: 0x3018
150   - Name: sectionE
151     Type: SHT_PROGBITS
152     Content: '88887777'
153     Address: 0x301C
154   - Name: blobD
155     Type: SHT_PROGBITS
156     Content: 'abbababa'
157     Address: 0x3020
158   - Name: sectionF
159     Type: SHT_PROGBITS
160     Content: '66665555'
161     Address: 0x3024
162   - Name: blobE
163     Type: SHT_PROGBITS
164     Content: 'abbababa'
165     Address: 0x3028
166   - Name: blobF
167     Type: SHT_PROGBITS
168     Content: 'abbababa'
169     Address: 0x302C
170   - Name: sectionG
171     Type: SHT_PROGBITS
172     Content: '44443333'
173     Address: 0x3030
174   - Name: blobG
175     Type: SHT_PROGBITS
176     Content: 'abbababa'
177     Address: 0x3034
178   - Name: sectionH
179     Type: SHT_PROGBITS
180     Content: '22221111'
181     Address: 0x3038
182   - Name: blobH
183     Type: SHT_PROGBITS
184     Content: 'abbababa'
185     Address: 0x303C
186   - Name: sectionI
187     Type: SHT_PROGBITS
188     Content: '00112233'
189     Address: 0x3040
190   - Name: blobz
191     Type: SHT_PROGBITS
192     Content: 'abbababa'
193     Address: 0x4000
194     AddressAlign: 0x1000
195   - Name: sectionz
196     Type: SHT_PROGBITS
197     Content: '44556677'
198     Address: 0x4004
199   - Name: bloby
200     Type: SHT_PROGBITS
201     Content: 'abbababa'
202     Address: 0x4008
203   - Name: sectiony
204     Type: SHT_PROGBITS
205     Content: '8899aabb'
206     Address: 0x400C
207   - Name: blobx
208     Type: SHT_PROGBITS
209     Content: 'abbababa'
210     Address: 0x4010
211   - Name: blobw
212     Type: SHT_PROGBITS
213     Content: 'abbababa'
214     Address: 0x4014
215   - Name: sectionx
216     Type: SHT_PROGBITS
217     Content: 'ccddeeff'
218     Address: 0x4018
219   - Name: blobv
220     Type: SHT_PROGBITS
221     Content: 'abbababa'
222     Address: 0x401C
223   - Name: sectionw
224     Type: SHT_PROGBITS
225     Content: 'ffeeddcc'
226     Address: 0x4020
227   - Name: blobu
228     Type: SHT_PROGBITS
229     Content: 'abbababa'
230     Address: 0x4024
231   - Name: sectionv
232     Type: SHT_PROGBITS
233     Content: 'bbaa9988'
234     Address: 0x4028
235   - Name: sectionu
236     Type: SHT_PROGBITS
237     Content: '77665544'
238     Address: 0x402C
239   - Name: sectiont
240     Type: SHT_PROGBITS
241     Content: '33221100'
242     Address: 0x4030
243   - Name: blobt
244     Type: SHT_PROGBITS
245     Content: 'abbababa'
246     Address: 0x4034
247   - Name: sections
248     Type: SHT_PROGBITS
249     Content: '11111111'
250     Address: 0x4038
251   - Name: bloba
252     Type: SHT_PROGBITS
253     Content: 'abbababa'
254     Address: 0x5000
255     AddressAlign: 0x1000
256   - Name: sectiona
257     Type: SHT_PROGBITS
258     Content: '12345678'
259     Address: 0x5004
260   - Name: blobb
261     Type: SHT_PROGBITS
262     Content: 'abbababa'
263     Address: 0x5008
264   - Name: sectionb
265     Type: SHT_PROGBITS
266     Content: '90abcdef'
267     Address: 0x500C
268   - Name: blobc
269     Type: SHT_PROGBITS
270     Content: 'abbababa'
271     Address: 0x5010
272   - Name: sectionc
273     Type: SHT_PROGBITS
274     Content: 'fedcba09'
275     Address: 0x5014
276   - Name: sectiond
277     Type: SHT_PROGBITS
278     Content: '87654321'
279     Address: 0x5018
280   - Name: blobd
281     Type: SHT_PROGBITS
282     Content: 'abbababa'
283     Address: 0x501C
284   - Name: sectione
285     Type: SHT_PROGBITS
286     Content: '22222222'
287     Address: 0x5020
288   - Name: blobe
289     Type: SHT_PROGBITS
290     Content: 'abbababa'
291     Address: 0x5024
292   - Name: sectionf
293     Type: SHT_PROGBITS
294     Content: '33333333'
295     Address: 0x5028
296   - Name: blobf
297     Type: SHT_PROGBITS
298     Content: 'abbababa'
299     Address: 0x502C
300   - Name: blobg
301     Type: SHT_PROGBITS
302     Content: 'abbababa'
303     Address: 0x5030
304   - Name: sectiong
305     Type: SHT_PROGBITS
306     Content: '44444444'
307     Address: 0x5034
308   - Name: blobh
309     Type: SHT_PROGBITS
310     Content: 'abbababa'
311     Address: 0x5038
312 ProgramHeaders:
313   # First segment has unlabelled space at start and end.
314   - Type:  0x6ABCDEF0 # Non-specific segment type.
315     VAddr: 0x2000
316     PAddr: 0x2000
317     Align: 0x2000
318     Sections:
319       - Section: blob1
320       - Section: section1
321       - Section: blob2
322       - Section: section2 # nobits
323       - Section: blob3
324       - Section: section3
325       - Section: blob4
326   # Second segment has sections at start and end.
327   - Type:  0x6ABCDEF0
328     VAddr: 0x2100
329     PAddr: 0x2100
330     Align: 0x100
331     Sections:
332       - Section: section4
333       - Section: blob5
334       - Section: section5
335   # Third segment is all covered by a section.
336   - Type:  0x6ABCDEF0
337     VAddr: 0x2200
338     PAddr: 0x2200
339     Align: 0x100
340     Sections:
341       - Section: section6
342   # Fourth segment has no sections (after removing blob headers).
343   - Type:  0x6ABCDEF0
344     VAddr: 0x2300
345     PAddr: 0x2300
346     Align: 0x100
347     Sections:
348       - Section: blob6
349   # Fifth segment is empty.
350   - Type:   0x6ABCDEF0
351     VAddr:  0x2308
352     PAddr:  0x2308
353     Offset: 0x2308
355   # The next few segments test behaviour of fully nested segments.
356   # Sixth segment is the "parent" segment.
357   - Type:  0x6ABCDEF0
358     VAddr: 0x3000
359     PAddr: 0x3000
360     Align: 0x1000
361     Sections:
362       - Section: sectionA
363       - Section: sectionB
364       - Section: blobA
365       - Section: sectionC
366       - Section: blobB
367       - Section: sectionD
368       - Section: blobC
369       - Section: sectionE
370       - Section: blobD
371       - Section: sectionF
372       - Section: blobE
373       - Section: blobF
374       - Section: sectionG
375       - Section: blobG
376       - Section: sectionH
377       - Section: blobH
378       - Section: sectionI
379   # Seventh segment is empty and nested.
380   - Type:   0x6ABCDEF0
381     VAddr:  0x3002
382     PAddr:  0x3002
383     Offset: 0x3002
384   # Eighth segment contains only a section and is nested.
385   - Type:  0x6ABCDEF0
386     VAddr: 0x3004
387     PAddr: 0x3004
388     Sections:
389       - Section: sectionB
390   # Ninth segment contains only unlabelled space and is nested.
391   - Type:  0x6ABCDEF0
392     VAddr: 0x3008
393     PAddr: 0x3008
394     Sections:
395       - Section: blobA
396   # Tenth segment contains two sections with space between and is nested.
397   - Type:  0x6ABCDEF0
398     VAddr: 0x300C
399     PAddr: 0x300C
400     Sections:
401       - Section: sectionC
402       - Section: blobB
403       - Section: sectionD
404   # Eleventh segment contains two sections with space between and at ends and is nested.
405   - Type:  0x6ABCDEF0
406     VAddr: 0x3018
407     PAddr: 0x3018
408     Sections:
409       - Section: blobC
410       - Section: sectionE
411       - Section: blobD
412       - Section: sectionF
413       - Section: blobE
414   # Twelfth segment contains one section with space at ends adjacent to space in parent segment.
415   - Type:     0x6ABCDEF0
416     VAddr:    0x302E
417     PAddr:    0x302E
418     Offset:   0x302E
419     FileSize: 8
420     Sections:
421       - Section: sectionG
422   # Thirteenth segment contains overlaps sections at either end in parent segment.
423   - Type:     0x6ABCDEF0
424     VAddr:    0x303A
425     PAddr:    0x303A
426     Offset:   0x303A
427     FileSize: 0x8
428     Sections:
429       - Section: blobH
431   # The next batch of segments are segments that only partially overlap other segments.
433   # Segment14: |-unlabelled-|-Sec-|
434   # Segment15:           |--|-Sec-|-unlabelled-|
435   - Type:  0x6ABCDEF0
436     VAddr: 0x4000
437     PAddr: 0x4000
438     Sections:
439       - Section: blobz
440       - Section: sectionz
441   - Type:   0x6ABCDEF0
442     VAddr:  0x4002
443     PAddr:  0x4002
444     Offset: 0x4002
445     Sections:
446       - Section: sectionz
447       - Section: bloby
449   # Segment16: |-Sec-|--|
450   # Segment17:    |--|----unlabelled---|
451   - Type:  0x6ABCDEF0
452     VAddr: 0x400C
453     PAddr: 0x400C
454     FileSize: 6
455     Sections:
456       - Section: sectiony
457   - Type:   0x6ABCDEF0
458     VAddr:  0x400E
459     PAddr:  0x400E
460     Offset: 0x400E
461     Sections:
462       - Section: blobx
464   # Segment18: |-unlabelled-|-Sec-|
465   # Segment19:              |-Sec-|-unlabelled-|
466   - Type:  0x6ABCDEF0
467     VAddr: 0x4014
468     PAddr: 0x4014
469     Sections:
470       - Section: blobw
471       - Section: sectionx
472   - Type:  0x6ABCDEF0
473     VAddr: 0x4018
474     PAddr: 0x4018
475     Sections:
476       - Section: sectionx
477       - Section: blobv
479   # Segment20: |-Sec-|
480   # Segment21:    |--|-unlabelled-|-Sec-|
481   - Type:  0x6ABCDEF0
482     VAddr: 0x4020
483     PAddr: 0x4020
484     Sections:
485       - Section: sectionw
486   - Type:   0x6ABCDEF0
487     VAddr:  0x4022
488     PAddr:  0x4022
489     Offset: 0x4022
490     Sections:
491       - Section: blobu
492       - Section: sectionv
494   # Segment22: |-Sec-|
495   # Segment23:    |--|-Sec-|
496   - Type:  0x6ABCDEF0
497     VAddr: 0x402C
498     PAddr: 0x402C
499     Sections:
500       - Section: sectionu
501   - Type:   0x6ABCDEF0
502     VAddr:  0x402E
503     PAddr:  0x402E
504     Offset: 0x402E
505     Sections:
506       - Section: sectiont
508   # Segment24: |-unlabelled-|--|
509   # Segment25:              |--Sec--|
510   - Type:  0x6ABCDEF0
511     VAddr: 0x4034
512     PAddr: 0x4034
513     FileSize: 6
514     Sections:
515       - Section: blobt
516   - Type:  0x6ABCDEF0
517     VAddr: 0x4038
518     PAddr: 0x4038
519     Sections:
520       - Section: sections
522   # The next batch of segments represent groups of three nested/overlapping segments,
523   # with one parent segment containing two overlapping segments.
525   # Segment26: |-unlabelled-|-Sec-|-unlabelled-|
526   # Segment27: |------------|--|
527   # Segment28:              |-Sec-|------------|
528   - Type:  0x6ABCDEF0
529     VAddr: 0x5000
530     PAddr: 0x5000
531     Align: 0x1000
532     Sections:
533       - Section: bloba
534       - Section: sectiona
535       - Section: blobb
536   - Type:  0x6ABCDEF0
537     VAddr: 0x5000
538     PAddr: 0x5000
539     FileSize: 6
540     Sections:
541       - Section: bloba
542   - Type:  0x6ABCDEF0
543     VAddr: 0x5004
544     PAddr: 0x5004
545     Sections:
546       - Section: sectiona
547       - Section: blobb
549   # Segment29: |-Sec-|-unlabelled-|-Sec-|
550   # Segment30: |-Sec-|--------|
551   # Segment31:          |---------|-Sec-|
552   - Type:  0x6ABCDEF0
553     VAddr: 0x500C
554     PAddr: 0x500C
555     Sections:
556       - Section: sectionb
557       - Section: blobc
558       - Section: sectionc
559   - Type:  0x6ABCDEF0
560     VAddr: 0x500C
561     PAddr: 0x500C
562     FileSize: 7
563     Sections:
564       - Section: sectionb
565   - Type:   0x6ABCDEF0
566     VAddr:  0x5011
567     PAddr:  0x5011
568     Offset: 0x5011
569     Sections:
570       - Section: sectionc
572   # Segment32: |-Sec-|-unlabelled-|-Sec-|
573   # Segment33: |-Sec-|------------|
574   # Segment34:       |------------|-Sec-|
575   - Type:  0x6ABCDEF0
576     VAddr: 0x5018
577     PAddr: 0x5018
578     Sections:
579       - Section: sectiond
580       - Section: blobd
581       - Section: sectione
582   - Type:  0x6ABCDEF0
583     VAddr: 0x5018
584     PAddr: 0x5018
585     Sections:
586       - Section: sectiond
587       - Section: blobd
588   - Type:  0x6ABCDEF0
589     VAddr: 0x501C
590     PAddr: 0x501C
591     Sections:
592       - Section: blobd
593       - Section: sectione
595   # Segment35: |-unlabelled-|-Sec-|-unlabelled-|
596   # Segment36: |------------|-Sec-|
597   # Segment37:              |-Sec-|------------|
598   - Type:  0x6ABCDEF0
599     VAddr: 0x5024
600     PAddr: 0x5024
601     Sections:
602       - Section: blobe
603       - Section: sectionf
604       - Section: blobf
605   - Type:  0x6ABCDEF0
606     VAddr: 0x5024
607     PAddr: 0x5024
608     Sections:
609       - Section: blobe
610       - Section: sectionf
611   - Type:  0x6ABCDEF0
612     VAddr: 0x5028
613     PAddr: 0x5028
614     Sections:
615       - Section: sectionf
616       - Section: blobf
618   # Segment38: |-unlabelled-|-Sec-|-unlabelled-|
619   # Segment39: |------------|---|
620   # Segment40:                |---|------------|
621   - Type:  0x6ABCDEF0
622     VAddr: 0x5030
623     PAddr: 0x5030
624     Sections:
625       - Section: blobg
626       - Section: sectiong
627       - Section: blobh
628   - Type:  0x6ABCDEF0
629     VAddr: 0x5030
630     PAddr: 0x5030
631     FileSize: 7
632     Sections:
633       - Section: blobg
634   - Type:   0x6ABCDEF0
635     VAddr:  0x5035
636     PAddr:  0x5035
637     Offset: 0x5035
638     Sections:
639       - Section: blobh