1 ## The computed LMA of a section in a PT_LOAD equals sh_offset-p_offset+p_paddr.
2 ## The byte offset difference between two sections equals the difference between their LMAs.
4 ## Corollary: if two sections are in the same PT_LOAD, the byte offset
5 ## difference equals the difference between their sh_addr fields.
7 # RUN: yaml2obj --docnum=1 %s -o %t1
8 # RUN: llvm-objcopy -O binary %t1 %t1.out
9 # RUN: od -A x -t x2 %t1.out | FileCheck %s --check-prefix=CHECK1 --ignore-case
10 # RUN: wc -c %t1.out | FileCheck %s --check-prefix=SIZE1
12 # CHECK1: 000000 c3c3 c3c3 0000 0000 0000 0000 0000 0000
13 # CHECK1-NEXT: 000010 0000 0000 0000 0000 0000 0000 0000 0000
15 # CHECK1-NEXT: 001000 3232
27 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
33 Flags: [ SHF_ALLOC, SHF_WRITE ]
43 ## The computed LMA of a section not in a PT_LOAD equals its sh_addr.
45 # RUN: yaml2obj --docnum=2 %s -o %t2
46 # RUN: llvm-objcopy -O binary %t2 %t2.out
47 # RUN: od -A x -t x2 %t2.out | FileCheck %s --check-prefix=CHECK2 --ignore-case
48 # RUN: wc -c %t2.out | FileCheck %s --check-prefix=SIZE2
50 ## The computed LMA of .data is 0x4000. The minimum LMA of all non-empty sections is 0x1000.
51 ## The content of .data will be written at 0x4000-0x1000 = 0x3000.
52 # CHECK2: 000000 c3c3 c3c3 0000 0000 0000 0000 0000 0000
53 # CHECK2-NEXT: 000010 0000 0000 0000 0000 0000 0000 0000 0000
55 # CHECK2-NEXT: 003000 3232
67 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
68 ## Not in a PT_LOAD. LMA = sh_addr = 0x1000.
74 Flags: [ SHF_ALLOC, SHF_WRITE ]
75 ## LMA = sh_offset-p_offset+p_paddr = 0x2000-0x2000+0x4000 = 0x4000.
83 ## p_vaddr is increased from 0x2000 to 0x4000.
88 ## Check that we use sh_offset instead of sh_addr to decide where to write section contents.
90 # RUN: yaml2obj --docnum=3 %s -o %t3
91 # RUN: llvm-objcopy -O binary %t3 %t3.out
92 # RUN: od -A x -t x2 %t3.out | FileCheck %s --check-prefix=CHECK3 --ignore-case
93 # RUN: wc -c %t3.out | FileCheck %s --check-prefix=SIZE3
95 ## The minimum LMA of all non-empty sections is 0x1000.
96 ## The content of .data will be written at 0x3000-0x1000 = 0x2000.
97 # CHECK3: 000000 c3c3 c3c3 0000 0000 0000 0000 0000 0000
98 # CHECK3-NEXT: 000010 0000 0000 0000 0000 0000 0000 0000 0000
100 # CHECK3-NEXT: 002000 3232
112 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
113 ## Not in a PT_LOAD. LMA = sh_addr = 0x1000.
119 Flags: [ SHF_ALLOC, SHF_WRITE ]
120 ## sh_addr is increased from 0x2000 to 0x3000, but it is ignored.
121 ## LMA = sh_offset-p_offset+p_paddr = 0x2000-0x2000+0x3000 = 0x3000.
127 Flags: [ PF_R, PF_W ]
132 ## The first section (.text) is empty. Test that we skip its LMA until the first
133 ## non-empty section, otherwise we would leave a large number of leading zeroes.
134 # RUN: yaml2obj --docnum=4 %s -o %t4
135 # RUN: llvm-objcopy -O binary %t4 %t4.out
136 # RUN: od -A x -t x2 %t4.out | FileCheck %s --check-prefix=SKIPEMPTY
138 # SKIPEMPTY: 000000 3232
139 # SKIPEMPTY-NEXT: 000002
150 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
158 Flags: [ SHF_ALLOC, SHF_WRITE ]
161 ## The last section (.data) is empty. Test that we stop dumping after the last
162 ## non-empty section, otherwise we would leave a large number of trailing zeroes.
163 # RUN: yaml2obj --docnum=5 %s -o %t5
164 # RUN: llvm-objcopy -O binary %t5 %t5.out
165 # RUN: od -A x -t x2 %t5.out | FileCheck %s --check-prefix=SKIPEMPTY
176 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
185 Flags: [ SHF_ALLOC, SHF_WRITE ]
187 ## NOBITS sections should not appear in output.
188 # RUN: yaml2obj --docnum=6 %s -o %t6
189 # RUN: llvm-objcopy -O binary %t6 %t6.out
190 # RUN: od -A x -t x2 %t6.out | FileCheck %s --check-prefix=SKIPNOBITS --ignore-case
192 # SKIPNOBITS: 000000 c3c3 c3c3
193 # SKIPNOBITS-NEXT: 000004
213 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
218 ## If .bss is converted to non-SHT_NOBITS, align its new offset. This may affect
220 # RUN: yaml2obj --docnum=7 %s -o %t7
221 # RUN: llvm-objcopy -O binary --set-section-flags .bss=alloc,contents %t7 %t7.out
222 # RUN: od -A x -t x2 %t7.out | FileCheck %s --check-prefix=FILLNOBITS --ignore-case
224 # FILLNOBITS: 000000 c3c3 0000 0000 0000 0000 0000 0000 0000
225 # FILLNOBITS-NEXT: 000010 0000 00
226 # FILLNOBITS-NEXT: 000013
237 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
244 ## sh_offset is not aligned.
250 Flags: [ PF_R, PF_W, PF_X ]
258 ## Test that sections do not move relative to their physical addresses if
259 ## the physical address is not aligned. This behavior matches GNU objcopy
260 ## and is important for embedded images where the physical address is
261 ## used to store the initial data image. Without converting the type of a
262 ## NOBITS section, don't align the offset. This matches GNU objcopy when
263 ## the physical address of a section is not aligned.
265 # RUN: yaml2obj --docnum=8 %s -o %t8
266 # RUN: llvm-objcopy -O binary --only-section=.text --only-section=.data %t8 %t8.out
267 # RUN: od -A x -t x1 %t8.out | FileCheck %s --check-prefix=PHYSUNALIGNED --ignore-case
269 # PHYSUNALIGNED: 000000 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 00
270 # PHYSUNALIGNED-NEXT: 000010 11 22 33 44 bd ac cd ab
280 Flags: [ PF_X, PF_R ]
287 Flags: [ PF_W, PF_R ]
292 ## PAddr is not aligned by sh_addralign(.data)
297 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
301 Content: 112233445566778899aabbccddeeff0011223344
304 Flags: [ SHF_WRITE, SHF_ALLOC ]