15ad0103dSFangrui Song# RUN: yaml2obj --docnum=1 %s -o %t1 25ad0103dSFangrui Song# RUN: llvm-objcopy --only-keep-debug %t1 %t1.dbg 35ad0103dSFangrui Song# RUN: llvm-readelf -S -l -x .note1 -x .note2 -x .debug_abbrev -x .debug_frame -x .debug_info %t1.dbg | FileCheck %s 4*3787de40SJohn McIver## --only-keep-debug suppresses the default --strip-all. 5*3787de40SJohn McIver# RUN: llvm-strip --only-keep-debug %t1 6*3787de40SJohn McIver# RUN: llvm-readelf -S -l -x .note1 -x .note2 -x .debug_abbrev -x .debug_frame -x .debug_info %t1 | FileCheck %s 75ad0103dSFangrui Song 85ad0103dSFangrui Song## Check that SHT_NOTE and .debug* are kept, but others are changed to SHT_NOBITS. 95ad0103dSFangrui Song## SHT_NOBITS sections do not occupy space in the output. 105ad0103dSFangrui Song 115ad0103dSFangrui Song# CHECK: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 125ad0103dSFangrui Song# CHECK: [ 1] .note1 NOTE 0000000000000400 000400 000001 00 A 0 0 1024 135ad0103dSFangrui Song# CHECK-NEXT: [ 2] .note2 NOTE 0000000000000401 000401 000001 00 A 0 0 0 145ad0103dSFangrui Song# CHECK-NEXT: [ 3] .text NOBITS 0000000000000402 000402 000001 00 AX 0 0 0 155ad0103dSFangrui Song# CHECK-NEXT: [ 4] .tdata NOBITS 0000000000001480 000480 000007 00 WAT 0 0 128 165ad0103dSFangrui Song# CHECK-NEXT: [ 5] .tbss NOBITS 0000000000001487 000480 000005 00 WAT 0 0 0 175ad0103dSFangrui Song# CHECK-NEXT: [ 6] .bss NOBITS 00000000000014a0 000480 00003f 00 WA 0 0 32 185ad0103dSFangrui Song## objcopy sets sh_offset to 0x402. We don't do this to keep sh_offset non-decreasing. 195ad0103dSFangrui Song# CHECK-NEXT: [ 7] .debug_abbrev PROGBITS 0000000000000000 000480 000001 00 0 0 0 205ad0103dSFangrui Song# CHECK-NEXT: [ 8] .debug_frame PROGBITS 0000000000000000 000488 000001 00 0 0 8 215ad0103dSFangrui Song# CHECK-NEXT: [ 9] .debug_info PROGBITS 0000000000000000 000489 000001 00 0 0 0 225ad0103dSFangrui Song# CHECK-NEXT: [10] .strtab STRTAB 0000000000000000 00048a 000001 00 0 0 1 235ad0103dSFangrui Song# CHECK-NEXT: [11] .shstrtab STRTAB 0000000000000000 00048b 000060 00 0 0 1 245ad0103dSFangrui Song 255ad0103dSFangrui Song# CHECK: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 265ad0103dSFangrui Song# CHECK-NEXT: LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x000402 0x000403 R E 0x1000 27b236b4cbSGeorgii Rymar# CHECK-NEXT: LOAD 0x000480 0x0000000000001480 0x0000000000001480 0x000000 0x00005f RW 0x1000 28b236b4cbSGeorgii Rymar# CHECK-NEXT: TLS 0x000480 0x0000000000001480 0x0000000000001480 0x000000 0x00000c RW 0x80 29b236b4cbSGeorgii Rymar# CHECK-NEXT: NOTE 0x000400 0x0000000000000400 0x0000000000000400 0x000002 0x000002 0x400 305ad0103dSFangrui Song 315ad0103dSFangrui Song## Contents of SHT_NOTE and .debug* are kept. 325ad0103dSFangrui Song 335ad0103dSFangrui Song# CHECK: Hex dump of section '.note1': 345ad0103dSFangrui Song# CHECK-NEXT: 0x00000400 01 355ad0103dSFangrui Song# CHECK: Hex dump of section '.note2': 365ad0103dSFangrui Song# CHECK-NEXT: 0x00000401 02 375ad0103dSFangrui Song# CHECK: Hex dump of section '.debug_abbrev': 385ad0103dSFangrui Song# CHECK-NEXT: 0x00000000 03 395ad0103dSFangrui Song# CHECK: Hex dump of section '.debug_frame': 405ad0103dSFangrui Song# CHECK-NEXT: 0x00000000 04 415ad0103dSFangrui Song# CHECK: Hex dump of section '.debug_info': 425ad0103dSFangrui Song# CHECK-NEXT: 0x00000000 05 435ad0103dSFangrui Song 445ad0103dSFangrui Song--- !ELF 455ad0103dSFangrui SongFileHeader: 465ad0103dSFangrui Song Class: ELFCLASS64 475ad0103dSFangrui Song Data: ELFDATA2LSB 485ad0103dSFangrui Song Type: ET_DYN 495ad0103dSFangrui Song Machine: EM_X86_64 505ad0103dSFangrui SongSections: 515ad0103dSFangrui Song - Name: .note1 525ad0103dSFangrui Song Type: SHT_NOTE 535ad0103dSFangrui Song Flags: [ SHF_ALLOC ] 545ad0103dSFangrui Song Address: 0x400 555ad0103dSFangrui Song AddressAlign: 0x400 565ad0103dSFangrui Song Content: 01 575ad0103dSFangrui Song - Name: .note2 585ad0103dSFangrui Song Type: SHT_NOTE 595ad0103dSFangrui Song Flags: [ SHF_ALLOC ] 605ad0103dSFangrui Song Address: 0x401 615ad0103dSFangrui Song Content: 02 625ad0103dSFangrui Song - Name: .text 635ad0103dSFangrui Song Type: SHT_PROGBITS 645ad0103dSFangrui Song Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 655ad0103dSFangrui Song Address: 0x402 665ad0103dSFangrui Song Content: c3 675ad0103dSFangrui Song - Name: .tdata 685ad0103dSFangrui Song Type: SHT_PROGBITS 695ad0103dSFangrui Song Flags: [ SHF_ALLOC, SHF_WRITE, SHF_TLS ] 705ad0103dSFangrui Song Address: 0x1480 # Ensure Address=0x1000+Offset 715ad0103dSFangrui Song AddressAlign: 0x80 725ad0103dSFangrui Song # An arbitrary non-zero Size tests that .tdata does not occupy space 735ad0103dSFangrui Song # and we can rewrite p_filesz of PT_TLS. 745ad0103dSFangrui Song Size: 7 755ad0103dSFangrui Song - Name: .tbss 765ad0103dSFangrui Song Type: SHT_NOBITS 775ad0103dSFangrui Song Flags: [ SHF_ALLOC, SHF_WRITE, SHF_TLS ] 785ad0103dSFangrui Song Address: 0x1487 # Ensure Address=0x1000+Offset 795ad0103dSFangrui Song Size: 5 805ad0103dSFangrui Song - Name: .bss 815ad0103dSFangrui Song Type: SHT_NOBITS 825ad0103dSFangrui Song Flags: [ SHF_ALLOC, SHF_WRITE ] 835ad0103dSFangrui Song Address: 0x14a0 # Ensure Address=0x1000+Offset 845ad0103dSFangrui Song AddressAlign: 0x20 855ad0103dSFangrui Song # An arbitrary non-zero Size tests that .bss does not occupy space. 865ad0103dSFangrui Song Size: 63 875ad0103dSFangrui Song - Name: .debug_abbrev 885ad0103dSFangrui Song Type: SHT_PROGBITS 895ad0103dSFangrui Song Content: 03 905ad0103dSFangrui Song - Name: .debug_frame 915ad0103dSFangrui Song Type: SHT_PROGBITS 925ad0103dSFangrui Song # AddressAlign tests the file offset assignment leaves a gap. 935ad0103dSFangrui Song AddressAlign: 0x8 945ad0103dSFangrui Song Content: 04 955ad0103dSFangrui Song - Name: .debug_info 965ad0103dSFangrui Song Type: SHT_PROGBITS 975ad0103dSFangrui Song Content: 05 985ad0103dSFangrui SongProgramHeaders: 995ad0103dSFangrui Song - Type: PT_LOAD 1005ad0103dSFangrui Song Flags: [ PF_R, PF_X ] 1015ad0103dSFangrui Song Offset: 0 1025ad0103dSFangrui Song Align: 0x1000 103a7a447beSGeorgii Rymar FirstSec: .note1 104a7a447beSGeorgii Rymar LastSec: .text 1055ad0103dSFangrui Song - Type: PT_LOAD 1065ad0103dSFangrui Song Flags: [ PF_R, PF_W ] 1075ad0103dSFangrui Song VAddr: 0x1480 # Ensure Offset=VAddr (mod Align) if Offset changes 1085ad0103dSFangrui Song Align: 0x1000 109a7a447beSGeorgii Rymar FirstSec: .tdata 110a7a447beSGeorgii Rymar LastSec: .bss 1115ad0103dSFangrui Song - Type: PT_TLS 1125ad0103dSFangrui Song Flags: [ PF_R, PF_W ] 1135ad0103dSFangrui Song VAddr: 0x1480 # Ensure Offset=VAddr (mod Align) if Offset changes 114a7a447beSGeorgii Rymar FirstSec: .tdata 115a7a447beSGeorgii Rymar LastSec: .tbss 1165ad0103dSFangrui Song - Type: PT_NOTE 1175ad0103dSFangrui Song VAddr: 0x400 118a7a447beSGeorgii Rymar FirstSec: .note1 119a7a447beSGeorgii Rymar LastSec: .note2 1205ad0103dSFangrui Song... 1215ad0103dSFangrui Song 1225ad0103dSFangrui Song# RUN: yaml2obj --docnum=2 %s -o %t2 1235ad0103dSFangrui Song# RUN: llvm-objcopy --only-keep-debug %t2 %t2.dbg 1245ad0103dSFangrui Song# RUN: llvm-readelf -S -l %t2.dbg | FileCheck --check-prefix=CHECK2 %s 1255ad0103dSFangrui Song 1265ad0103dSFangrui Song## Only the tail of a segment can be trimmed. .text still occupies space because 1275ad0103dSFangrui Song## it is followed by .note which is not SHT_NOBITS. 1285ad0103dSFangrui Song# CHECK2: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 1295ad0103dSFangrui Song# CHECK2: [ 1] .text NOBITS 0000000000000200 000200 000001 00 AX 0 0 512 1305ad0103dSFangrui Song# CHECK2-NEXT: [ 2] .note NOTE 0000000000000201 000201 000001 00 A 0 0 0 1315ad0103dSFangrui Song# CHECK2-NEXT: [ 3] .debug_info PROGBITS 0000000000000000 000220 000001 00 0 0 32 1325ad0103dSFangrui Song# CHECK2-NEXT: [ 4] .strtab STRTAB 0000000000000000 000221 000001 00 0 0 1 1335ad0103dSFangrui Song# CHECK2-NEXT: [ 5] .shstrtab STRTAB 0000000000000000 000222 00002b 00 0 0 1 1345ad0103dSFangrui Song 135b3336bfaSFangrui Song## Check that p_offset or p_filesz of PT_PHDR are not modified. 1365ad0103dSFangrui Song# CHECK2: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 137b236b4cbSGeorgii Rymar# CHECK2-NEXT: PHDR 0x000040 0x0000000000000040 0x0000000000000040 0x0000a8 0x0000a8 R 0x8 1385ad0103dSFangrui Song# CHECK2-NEXT: LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x000202 0x000202 R E 0x1000 139b3336bfaSFangrui Song# CHECK2-NEXT: LOAD 0x000000 0x0000000000000202 0x0000000000000202 0x000000 0x00000e RW 0x1 1405ad0103dSFangrui Song 1415ad0103dSFangrui Song--- !ELF 1425ad0103dSFangrui SongFileHeader: 1435ad0103dSFangrui Song Class: ELFCLASS64 1445ad0103dSFangrui Song Data: ELFDATA2LSB 1455ad0103dSFangrui Song Type: ET_DYN 1465ad0103dSFangrui Song Machine: EM_X86_64 1475ad0103dSFangrui SongSections: 1485ad0103dSFangrui Song - Name: .text 1495ad0103dSFangrui Song Type: SHT_PROGBITS 1505ad0103dSFangrui Song Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 1515ad0103dSFangrui Song Address: 0x200 1525ad0103dSFangrui Song AddressAlign: 0x200 1535ad0103dSFangrui Song Content: c3 1545ad0103dSFangrui Song - Name: .note 1555ad0103dSFangrui Song Type: SHT_NOTE 1565ad0103dSFangrui Song Flags: [ SHF_ALLOC ] 1575ad0103dSFangrui Song Address: 0x201 1585ad0103dSFangrui Song Content: 01 1595ad0103dSFangrui Song - Name: .debug_info 1605ad0103dSFangrui Song Type: SHT_PROGBITS 1615ad0103dSFangrui Song AddressAlign: 0x20 1625ad0103dSFangrui Song Content: 02 1635ad0103dSFangrui SongProgramHeaders: 1645ad0103dSFangrui Song - Type: PT_PHDR 1655ad0103dSFangrui Song Flags: [ PF_R ] 1665ad0103dSFangrui Song Offset: 0x40 1675ad0103dSFangrui Song VAddr: 0x40 1685ad0103dSFangrui Song # 3 * sizeof(Elf64_Phdr) = 0xa8 1695ad0103dSFangrui Song FileSize: 0xa8 1705ad0103dSFangrui Song MemSize: 0xa8 1715ad0103dSFangrui Song Align: 8 1725ad0103dSFangrui Song - Type: PT_LOAD 1735ad0103dSFangrui Song Flags: [ PF_R, PF_X ] 1745ad0103dSFangrui Song Offset: 0 1755ad0103dSFangrui Song Align: 4096 176a7a447beSGeorgii Rymar FirstSec: .text 177a7a447beSGeorgii Rymar LastSec: .note 1785ad0103dSFangrui Song - Type: PT_LOAD 1795ad0103dSFangrui Song Flags: [ PF_R, PF_W ] 1805ad0103dSFangrui Song Offset: 0x202 1815ad0103dSFangrui Song VAddr: 0x202 1825ad0103dSFangrui Song FileSize: 14 1835ad0103dSFangrui Song MemSize: 14 1845ad0103dSFangrui Song... 1855ad0103dSFangrui Song 1865ad0103dSFangrui Song## If .symtab or .strtab has the SHF_ALLOC flag, it will be changed to SHT_NOBITS. 1875ad0103dSFangrui Song# RUN: yaml2obj --docnum=3 %s -o %t3 1885ad0103dSFangrui Song# RUN: llvm-objcopy --only-keep-debug %t3 %t3.dbg 1895ad0103dSFangrui Song# RUN: llvm-readelf -S -l %t3.dbg | FileCheck --check-prefix=CHECK3 %s 1905ad0103dSFangrui Song 1915ad0103dSFangrui Song# CHECK3: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 1925ad0103dSFangrui Song# CHECK3: [ 1] .dynsym NOBITS 0000000000000000 000040 000018 18 A 2 1 1024 19331f2ad9cSGeorgii Rymar# CHECK3-NEXT: [ 2] .dynstr NOBITS 0000000000000018 000040 000001 00 A 0 0 0 194d5e48f13SGeorgii Rymar# CHECK3-NEXT: [ 3] .symtab NOBITS 0000000000000019 000040 000018 00 A 4 1 0 19531f2ad9cSGeorgii Rymar# CHECK3-NEXT: [ 4] .strtab NOBITS 0000000000000031 000040 000001 00 A 0 0 0 1965ad0103dSFangrui Song# CHECK3-NEXT: [ 5] .shstrtab STRTAB 0000000000000000 000040 00002b 00 0 0 1 1975ad0103dSFangrui Song 1985ad0103dSFangrui Song--- !ELF 1995ad0103dSFangrui SongFileHeader: 2005ad0103dSFangrui Song Class: ELFCLASS64 2015ad0103dSFangrui Song Data: ELFDATA2LSB 2025ad0103dSFangrui Song Type: ET_DYN 2035ad0103dSFangrui Song Machine: EM_X86_64 2045ad0103dSFangrui SongSections: 2055ad0103dSFangrui Song - Name: .dynsym 2065ad0103dSFangrui Song Type: SHT_DYNSYM 2075ad0103dSFangrui Song Flags: [ SHF_ALLOC ] 2085ad0103dSFangrui Song Link: .dynstr 2095ad0103dSFangrui Song AddressAlign: 0x400 2105ad0103dSFangrui Song - Name: .dynstr 2115ad0103dSFangrui Song Type: SHT_STRTAB 2125ad0103dSFangrui Song Flags: [ SHF_ALLOC ] 2135ad0103dSFangrui Song - Name: .symtab 214d5e48f13SGeorgii Rymar## TODO: this should be SHT_SYMTAB, but currently llvm-objcopy reports an error: 215d5e48f13SGeorgii Rymar## error: Symbol table has link index of 4 which is not a string table 2165ad0103dSFangrui Song Type: SHT_STRTAB 2175ad0103dSFangrui Song Flags: [ SHF_ALLOC ] 2185ad0103dSFangrui Song Link: .strtab 2195ad0103dSFangrui Song - Name: .strtab 2205ad0103dSFangrui Song Type: SHT_STRTAB 2215ad0103dSFangrui Song Flags: [ SHF_ALLOC ] 2225ad0103dSFangrui SongDynamicSymbols: [] 2235ad0103dSFangrui SongSymbols: [] 22420de1822SFangrui Song 22520de1822SFangrui Song## PT_TLS and .tdata are empty. Test that we set its p_offset to the parent 22620de1822SFangrui Song## segment's p_offset. If we don't rewrite the p_offset of PT_TLS and the deleted 22720de1822SFangrui Song## bytes are large, p_offset can be larger than the file size, and trigger 22820de1822SFangrui Song## validation errors with subsequent tools. 22920de1822SFangrui Song# RUN: yaml2obj --docnum=4 %s -o %t4 23020de1822SFangrui Song# RUN: llvm-objcopy --only-keep-debug %t4 %t4.dbg 23120de1822SFangrui Song# RUN: llvm-readelf -S -l %t4.dbg | FileCheck --check-prefix=CHECK4 %s 23220de1822SFangrui Song 23320de1822SFangrui Song# CHECK4: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 23420de1822SFangrui Song# CHECK4: [ 1] .text NOBITS 0000000000000200 000200 000001 00 AX 0 0 0 23520de1822SFangrui Song# CHECK4-NEXT: [ 2] .tdata NOBITS 0000000000001240 000240 000000 00 WAT 0 0 64 23620de1822SFangrui Song# CHECK4-NEXT: [ 3] .got NOBITS 0000000000001240 000240 000008 00 WA 0 0 0 23720de1822SFangrui Song 23820de1822SFangrui Song# CHECK4: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 23920de1822SFangrui Song# CHECK4-NEXT: LOAD 0x000200 0x0000000000000200 0x0000000000000200 0x000000 0x000001 R E 0x1000 24020de1822SFangrui Song# CHECK4-NEXT: LOAD 0x000240 0x0000000000001240 0x0000000000001240 0x000000 0x000008 RW 0x1000 24120de1822SFangrui Song# CHECK4-NEXT: TLS 0x000240 0x0000000000001240 0x0000000000001240 0x000000 0x000000 R 0x40 24220de1822SFangrui Song 24320de1822SFangrui Song--- !ELF 24420de1822SFangrui SongFileHeader: 24520de1822SFangrui Song Class: ELFCLASS64 24620de1822SFangrui Song Data: ELFDATA2LSB 24720de1822SFangrui Song Type: ET_DYN 24820de1822SFangrui Song Machine: EM_X86_64 24920de1822SFangrui SongSections: 25020de1822SFangrui Song - Name: .text 25120de1822SFangrui Song Type: SHT_PROGBITS 25220de1822SFangrui Song Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 25320de1822SFangrui Song Address: 0x200 25420de1822SFangrui Song Size: 1 25520de1822SFangrui Song - Name: .tdata 25620de1822SFangrui Song Type: SHT_PROGBITS 25720de1822SFangrui Song Flags: [ SHF_ALLOC, SHF_WRITE, SHF_TLS ] 25820de1822SFangrui Song Address: 0x1240 # Ensure Address=0x1000+Offset 25920de1822SFangrui Song AddressAlign: 0x40 26020de1822SFangrui Song - Name: .got 26120de1822SFangrui Song Type: SHT_PROGBITS 26220de1822SFangrui Song Flags: [ SHF_ALLOC, SHF_WRITE ] 26320de1822SFangrui Song Size: 8 26420de1822SFangrui SongProgramHeaders: 26520de1822SFangrui Song - Type: PT_LOAD 26620de1822SFangrui Song Flags: [ PF_R, PF_X ] 26720de1822SFangrui Song VAddr: 0x200 26820de1822SFangrui Song Align: 0x1000 26920de1822SFangrui Song FirstSec: .text 27020de1822SFangrui Song LastSec: .text 27120de1822SFangrui Song ## Add .got so that the PT_LOAD does not have zero p_memsz. We don't add 27220de1822SFangrui Song ## sections to zero-sized segments so zero-sized segments may have strange 27320de1822SFangrui Song ## offsets. In practice, the Linux kernel errors when mmapping a p_memsz 27420de1822SFangrui Song ## PT_LOAD,so for practical so this assumption can generally be made. 27520de1822SFangrui Song - Type: PT_LOAD 27620de1822SFangrui Song Flags: [ PF_R, PF_W ] 27720de1822SFangrui Song VAddr: 0x1240 27820de1822SFangrui Song Align: 0x1000 27920de1822SFangrui Song FirstSec: .tdata 28020de1822SFangrui Song LastSec: .got 28120de1822SFangrui Song - Type: PT_TLS 28220de1822SFangrui Song Flags: [ PF_R ] 28320de1822SFangrui Song VAddr: 0x1240 28420de1822SFangrui Song FirstSec: .tdata 28520de1822SFangrui Song LastSec: .tdata 286b3336bfaSFangrui Song 287b3336bfaSFangrui Song## The offset and size fields of segments which contain no section and have no 288b3336bfaSFangrui Song## parent segment are set to zeros, so that we can decrease the file size. Such 289b3336bfaSFangrui Song## segments are not useful for debugging. 290b3336bfaSFangrui Song# RUN: yaml2obj --docnum=5 %s -o %t5 291b3336bfaSFangrui Song# RUN: llvm-objcopy --only-keep-debug %t5 %t5.dbg 292b3336bfaSFangrui Song# RUN: llvm-readelf -S -l %t5.dbg | FileCheck --check-prefix=CHECK5 %s 293b3336bfaSFangrui Song# RUN: llvm-objcopy --strip-sections %t5 %t5s 294b3336bfaSFangrui Song# RUN: llvm-objcopy --only-keep-debug %t5s %t5s.dbg 295b3336bfaSFangrui Song# RUN: llvm-readelf -S -l %t5s.dbg | FileCheck --check-prefix=CHECK5S %s 296b3336bfaSFangrui Song 297b3336bfaSFangrui Song# CHECK5: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 298b3336bfaSFangrui Song# CHECK5: [ 1] .foo NOBITS 0000000000000000 000078 001000 00 A 0 0 0 299b3336bfaSFangrui Song# CHECK5-NEXT: [ 2] .strtab STRTAB 0000000000000000 000078 000001 00 0 0 1 300b3336bfaSFangrui Song# CHECK5-NEXT: [ 3] .shstrtab STRTAB 0000000000000000 000079 000018 00 0 0 1 301b3336bfaSFangrui Song 302b3336bfaSFangrui Song# CHECK5: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 303b3336bfaSFangrui Song# CHECK5-NEXT: NULL 0x000000 0x0000000000000000 0x0000000000000000 0x000078 0x001000 0x1 304b3336bfaSFangrui Song# CHECK5-EMPTY: 305b3336bfaSFangrui Song 306b3336bfaSFangrui Song# CHECK5S: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 307b3336bfaSFangrui Song# CHECK5S-NEXT: NULL 0x000000 0x0000000000000000 0x0000000000000000 0x000078 0x001000 0x1 308b3336bfaSFangrui Song# CHECK5S-EMPTY: 309b3336bfaSFangrui Song--- !ELF 310b3336bfaSFangrui SongFileHeader: 311b3336bfaSFangrui Song Class: ELFCLASS64 312b3336bfaSFangrui Song Data: ELFDATA2LSB 313b3336bfaSFangrui Song Type: ET_DYN 314b3336bfaSFangrui SongSections: 315b3336bfaSFangrui Song - Name: .foo 316b3336bfaSFangrui Song Type: SHT_PROGBITS 317b3336bfaSFangrui Song Flags: [ SHF_ALLOC ] 318b3336bfaSFangrui Song Size: 0x01000 319b3336bfaSFangrui SongProgramHeaders: 320b3336bfaSFangrui Song - Type: PT_NULL 321b3336bfaSFangrui Song Flags: [] 322b3336bfaSFangrui Song FileSize: 0x01000 323b3336bfaSFangrui Song MemSize: 0x01000 32468616584SIgor Kudrin 32568616584SIgor Kudrin## Check that sections are placed correctly in a case when their order in the 32668616584SIgor Kudrin## section header table is different from their layout. 32768616584SIgor Kudrin# RUN: yaml2obj --docnum=6 %s -o %t6 32868616584SIgor Kudrin# RUN: llvm-objcopy --only-keep-debug %t6 %t6.dbg 32968616584SIgor Kudrin# RUN: llvm-readelf -S -l %t6.dbg | FileCheck --check-prefix=CHECK6 %s 33068616584SIgor Kudrin 33168616584SIgor Kudrin# CHECK6: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 33268616584SIgor Kudrin# CHECK6: [ 1] foo NOBITS 0000000000000008 001000 000008 00 A 0 0 4 33368616584SIgor Kudrin# CHECK6-NEXT: [ 2] bar NOBITS 0000000000000000 001000 000008 00 A 0 0 4 33468616584SIgor Kudrin# CHECK6-NEXT: [ 3] baz NOTE 0000000000000018 001008 000008 00 A 0 0 0 33568616584SIgor Kudrin# CHECK6-NEXT: [ 4] qux NOTE 0000000000000010 001000 000008 00 A 0 0 0 33668616584SIgor Kudrin 33768616584SIgor Kudrin# CHECK6: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 33868616584SIgor Kudrin# CHECK6-NEXT: LOAD 0x001000 0x0000000000000000 0x0000000000000000 0x000000 0x000010 R 0x1000 33968616584SIgor Kudrin# CHECK6-NEXT: LOAD 0x001000 0x0000000000000010 0x0000000000000010 0x000010 0x000010 R 0x1 34068616584SIgor Kudrin# CHECK6-EMPTY: 34168616584SIgor Kudrin 34268616584SIgor Kudrin--- !ELF 34368616584SIgor KudrinFileHeader: 34468616584SIgor Kudrin Class: ELFCLASS64 34568616584SIgor Kudrin Data: ELFDATA2LSB 34668616584SIgor Kudrin Type: ET_DYN 34768616584SIgor Kudrin Machine: EM_X86_64 34868616584SIgor KudrinProgramHeaders: 34968616584SIgor Kudrin - Type: PT_LOAD 35068616584SIgor Kudrin Flags: [ PF_R ] 35168616584SIgor Kudrin Offset: 0x1000 35268616584SIgor Kudrin VAddr: 0x0 35368616584SIgor Kudrin Align: 0x1000 35468616584SIgor Kudrin FileSize: 0x10 35568616584SIgor Kudrin MemSize: 0x10 35668616584SIgor Kudrin - Type: PT_LOAD 35768616584SIgor Kudrin Flags: [ PF_R ] 35868616584SIgor Kudrin Offset: 0x1010 35968616584SIgor Kudrin VAddr: 0x10 36068616584SIgor Kudrin FileSize: 0x10 36168616584SIgor Kudrin MemSize: 0x10 36268616584SIgor KudrinSections: 36368616584SIgor Kudrin - Name: bar 36468616584SIgor Kudrin Type: SHT_PROGBITS 36568616584SIgor Kudrin Flags: [ SHF_ALLOC ] 36668616584SIgor Kudrin Address: 0x0 36768616584SIgor Kudrin AddressAlign: 0x4 36868616584SIgor Kudrin Offset: 0x1000 36968616584SIgor Kudrin Content: 0000000000000000 37068616584SIgor Kudrin - Name: foo 37168616584SIgor Kudrin Type: SHT_PROGBITS 37268616584SIgor Kudrin Flags: [ SHF_ALLOC ] 37368616584SIgor Kudrin Address: 0x8 37468616584SIgor Kudrin AddressAlign: 0x4 37568616584SIgor Kudrin Offset: 0x1008 37668616584SIgor Kudrin Content: 0000000000000000 37768616584SIgor Kudrin - Name: qux 37868616584SIgor Kudrin Type: SHT_NOTE 37968616584SIgor Kudrin Flags: [ SHF_ALLOC ] 38068616584SIgor Kudrin Address: 0x10 38168616584SIgor Kudrin Offset: 0x1010 38268616584SIgor Kudrin Content: 0000000000000000 38368616584SIgor Kudrin - Name: baz 38468616584SIgor Kudrin Type: SHT_NOTE 38568616584SIgor Kudrin Flags: [ SHF_ALLOC ] 38668616584SIgor Kudrin Address: 0x18 38768616584SIgor Kudrin Offset: 0x1018 38868616584SIgor Kudrin Content: 0000000000000000 38968616584SIgor Kudrin - Type: SectionHeaderTable 39068616584SIgor Kudrin Sections: 39168616584SIgor Kudrin## Note: the order of section headers differs from their layout. 39268616584SIgor Kudrin - Name: foo 39368616584SIgor Kudrin - Name: bar 39468616584SIgor Kudrin - Name: baz 39568616584SIgor Kudrin - Name: qux 39668616584SIgor Kudrin - Name: .shstrtab 39768616584SIgor Kudrin - Name: .strtab 398