## Check we are able to set custom sh_size field ## for different sections. # RUN: yaml2obj --docnum=1 %s -o %t1 # RUN: llvm-readelf --sections %t1 | FileCheck %s --check-prefix=CASE1 # CASE1: Section Headers: # CASE1-NEXT: [Nr] Name Type Address Off Size # CASE1-NEXT: [ 0] NULL 0000000000000000 000000 000000 # CASE1-NEXT: [ 1] .dynsym DYNSYM 0000000000000000 000040 000001 # CASE1-NEXT: [ 2] .symtab SYMTAB 0000000000000000 000058 000002 # CASE1-NEXT: [ 3] .dynamic DYNAMIC 0000000000000000 000070 000003 # CASE1-NEXT: [ 4] .rela RELA 0000000000000000 000070 000004 # CASE1-NEXT: [ 5] .nobits NOBITS 0000000000000000 000070 000005 # CASE1-NEXT: [ 6] .group GROUP 0000000000000000 000070 000006 # CASE1-NEXT: [ 7] .gnu.version VERSYM 0000000000000000 000070 000007 # CASE1-NEXT: [ 8] .gnu.version_r VERNEED 0000000000000000 000070 000008 # CASE1-NEXT: [ 9] .gnu.version_d VERDEF 0000000000000000 000070 000009 # CASE1-NEXT: [10] .regular PROGBITS 0000000000000000 000070 00000a # CASE1-NEXT: [11] .strtab STRTAB 0000000000000000 000070 00000b --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Sections: - Name: .dynsym Type: SHT_DYNSYM ShSize: 0x000000001 - Name: .symtab Type: SHT_SYMTAB ShSize: 0x000000002 - Name: .dynamic Type: SHT_DYNAMIC ShSize: 0x000000003 - Name: .rela Type: SHT_RELA ShSize: 0x000000004 - Name: .nobits Type: SHT_NOBITS ShSize: 0x000000005 - Name: .group Type: SHT_GROUP ShSize: 0x000000006 Members: - Name: .gnu.version Type: SHT_GNU_versym Entries: [ ] ShSize: 0x000000007 - Name: .gnu.version_r Type: SHT_GNU_verneed ShSize: 0x000000008 Dependencies: - Name: .gnu.version_d Type: SHT_GNU_verdef ShSize: 0x000000009 Entries: - Name: .regular Type: SHT_PROGBITS ShSize: 0x00000000A - Name: .strtab Type: SHT_STRTAB ShSize: 0x00000000B ## Here we check that defining ShSize does not actually change ## the content and also does not affect file size. # RUN: yaml2obj --docnum=2 %s -o %t2 # RUN: yaml2obj --docnum=3 %s -o %t3 # RUN: od -t x1 -v %t2 > %t.txt # RUN: od -t x1 -v %t3 >> %t.txt # RUN: FileCheck %s --input-file=%t.txt --ignore-case --check-prefix=CASE2 # CASE2: [[OFFSET:.*]] fe fe fe fe fe fe fe fe # CASE2: [[FILESIZE:.*]]{{$}} # CASE2: [[OFFSET]] fe fe fe fe fe fe fe fe # CASE2: [[FILESIZE]]{{$}} --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Sections: - Name: .foo Type: SHT_PROGBITS Content: "fefefefefefefefe" --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Sections: - Name: .foo Type: SHT_PROGBITS ShSize: 1 Content: "fefefefefefefefe" ## Check we can define sh_size larger than section content size ## and thus create overlaping sections. # RUN: yaml2obj --docnum=4 %s -o %t4 # RUN: llvm-readobj --sections --section-data %t4 | FileCheck %s --check-prefix=CASE4 # CASE4: Name: .foo # CASE4: SectionData ( # CASE4-NEXT: 0000: AAAABBBB |....| # CASE4: Name: .bar # CASE4: SectionData ( # CASE4-NEXT: 0000: BBBB |..| --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Sections: - Name: .foo Type: SHT_PROGBITS Content: "aaaa" ShSize: 4 - Name: .bar Type: SHT_PROGBITS Content: "bbbb" ## Check we can set both Size and ShSize and the number of the actual ## bytes written is equal to Size in this case. # RUN: yaml2obj --docnum=5 %s -o %t5 # RUN: od -t x1 -v %t5 | FileCheck %s --ignore-case --check-prefix=CASE5 # CASE5: aa aa 00 00 bb bb --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Sections: - Name: .foo Type: SHT_PROGBITS Content: "aaaa" - Name: .bar Type: SHT_PROGBITS Size: 2 ShSize: 4 - Name: .zed Type: SHT_PROGBITS Content: "bbbb"