## For implicit string table sections, `Size` and/or `Content` fields can also ## be specified in YAML. Here we test the behavior in different cases. ## When no `Size` or `Content` is specified for a string table section, ## yaml2obj writes the default content. # RUN: yaml2obj --docnum=1 %s -o %t1 # RUN: llvm-objdump %t1 -s | FileCheck %s --check-prefix=CASE1 # CASE1: Contents of section .strtab: # CASE1-NEXT: 0000 00666f6f 00 .foo. --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .strtab Type: SHT_STRTAB ## Used to trigger adding string `foo` to the string table section. Symbols: - Name: foo ## For string table sections, `Size` can be used to override the ## implicit string table data. The content is filled with zeroes in this case. # RUN: yaml2obj --docnum=2 %s -o %t2 # RUN: llvm-readobj --section-data -S %t2 | FileCheck %s --check-prefix=CASE2 # CASE2: Name: .strtab # CASE2-NEXT: Type: SHT_STRTAB # CASE2-NEXT: Flags [ # CASE2-NEXT: ] # CASE2-NEXT: Address: 0x0 # CASE2-NEXT: Offset: 0x40 # CASE2-NEXT: Size: 2 # CASE2-NEXT: Link: 0 # CASE2-NEXT: Info: 0 # CASE2-NEXT: AddressAlignment: 0 # CASE2-NEXT: EntrySize: 0 # CASE2-NEXT: SectionData ( # CASE2-NEXT: 0000: 0000 # CASE2-NEXT: ) --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .strtab Type: SHT_STRTAB Size: 2 ## Used to trigger adding string `foo` to the string table section. Symbols: - Name: foo ## For string table sections, `Content` can be used to override the ## implicit string table data. # RUN: yaml2obj --docnum=3 %s -o %t3 # RUN: llvm-readobj --section-data -S %t3 | FileCheck %s --check-prefix=CASE3 # CASE3: Name: .strtab # CASE3-NEXT: Type: SHT_STRTAB # CASE3-NEXT: Flags [ # CASE3-NEXT: ] # CASE3-NEXT: Address: 0x0 # CASE3-NEXT: Offset: 0x40 # CASE3-NEXT: Size: 2 # CASE3-NEXT: Link: 0 # CASE3-NEXT: Info: 0 # CASE3-NEXT: AddressAlignment: 0 # CASE3-NEXT: EntrySize: 0 # CASE3-NEXT: SectionData ( # CASE3-NEXT: 0000: 0102 # CASE3-NEXT: ) --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .strtab Type: SHT_STRTAB Content: "0102" ## Used to trigger adding string `foo` to the string table section. Symbols: - Name: foo ## For string table sections, check we can specify both `Size` and `Content` ## when size is greater than content size. In this case zeroes are ## added as padding after the specified content. # RUN: yaml2obj --docnum=4 %s -o %t4 # RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE4 # CASE4: Name: .strtab # CASE4-NEXT: Type: SHT_STRTAB # CASE4-NEXT: Flags [ # CASE4-NEXT: ] # CASE4-NEXT: Address: 0x0 # CASE4-NEXT: Offset: 0x40 # CASE4-NEXT: Size: 3 # CASE4-NEXT: Link: 0 # CASE4-NEXT: Info: 0 # CASE4-NEXT: AddressAlignment: 0 # CASE4-NEXT: EntrySize: 0 # CASE4-NEXT: SectionData ( # CASE4-NEXT: 0000: 010200 # CASE4-NEXT: ) --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .strtab Type: SHT_STRTAB Content: "0102" Size: 3 ## Used to trigger adding string `foo` to the string table section. Symbols: - Name: foo ## For string table sections, check we can specify both `Size` and `Content` ## when size is equal to content size. # RUN: yaml2obj --docnum=5 %s -o %t5 # RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5 # CASE5: Name: .strtab # CASE5-NEXT: Type: SHT_STRTAB # CASE5-NEXT: Flags [ (0x0) # CASE5-NEXT: ] # CASE5-NEXT: Address: 0x0 # CASE5-NEXT: Offset: 0x40 # CASE5-NEXT: Size: 2 # CASE5-NEXT: Link: 0 # CASE5-NEXT: Info: 0 # CASE5-NEXT: AddressAlignment: 0 # CASE5-NEXT: EntrySize: 0 # CASE5-NEXT: SectionData ( # CASE5-NEXT: 0000: 0102 # CASE5-NEXT: ) --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .strtab Type: SHT_STRTAB Content: "0102" Size: 2 ## Used to trigger adding string `foo` to the string table section. Symbols: - Name: foo