## 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
