## Check we are able to produce a valid SHT_GNU_versym
## section from its description.

# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-readobj -V %t1 | FileCheck %s

# CHECK:      VersionSymbols [
# CHECK-NEXT:   Symbol {
# CHECK-NEXT:     Version: 0
# CHECK-NEXT:     Name:
# CHECK-NEXT:   }
# CHECK-NEXT:   Symbol {
# CHECK-NEXT:     Version: 3
# CHECK-NEXT:     Name: f1@v1
# CHECK-NEXT:   }
# CHECK-NEXT:   Symbol {
# CHECK-NEXT:     Version: 4
# CHECK-NEXT:     Name: f2@v2
# CHECK-NEXT:   }
# CHECK-NEXT: ]
# CHECK-NEXT: VersionDefinitions [
# CHECK-NEXT: ]
# CHECK-NEXT: VersionRequirements [
# CHECK-NEXT:   Dependency {
# CHECK-NEXT:     Version: 1
# CHECK-NEXT:     Count: 2
# CHECK-NEXT:     FileName: dso.so.0
# CHECK-NEXT:     Entries [
# CHECK-NEXT:       Entry {
# CHECK-NEXT:         Hash: 1937
# CHECK-NEXT:         Flags [ (0x0)
# CHECK-NEXT:         ]
# CHECK-NEXT:         Index: 3
# CHECK-NEXT:         Name: v1
# CHECK-NEXT:       }
# CHECK-NEXT:       Entry {
# CHECK-NEXT:         Hash: 1938
# CHECK-NEXT:         Flags [ (0x0)
# CHECK-NEXT:         ]
# CHECK-NEXT:         Index: 4
# CHECK-NEXT:         Name: v2
# CHECK-NEXT:       }
# CHECK-NEXT:     ]
# CHECK-NEXT:   }
# CHECK-NEXT: ]

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_EXEC
  Entry: 0x0000000000201000
Sections:
  - Name:            .gnu.version
    Type:            SHT_GNU_versym
    Flags:           [ SHF_ALLOC ]
    Address:         0x0000000000200210
    AddressAlign:    0x0000000000000002
    EntSize:         0x0000000000000002
    Entries:         [ 0, 3, 4 ]
  - Name:            .gnu.version_r
    Type:            SHT_GNU_verneed
    Flags:           [ SHF_ALLOC ]
    Address:         0x0000000000200250
    AddressAlign:    0x0000000000000004
    Dependencies:
      - Version:         1
        File:            dso.so.0
        Entries:
          - Name:            v1
            Hash:            1937
            Flags:           0
            Other:           3
          - Name:            v2
            Hash:            1938
            Flags:           0
            Other:           4
DynamicSymbols:
  - Name:    f1
    Binding: STB_GLOBAL
  - Name:    f2
    Binding: STB_GLOBAL
...

## Check we are able to set custom sh_entsize field for SHT_GNU_versym section.
## Check we link the SHT_GNU_versym section to the .dynsym section by default.

# RUN: yaml2obj --docnum=2 %s -o %t2
# RUN: llvm-readelf -S %t2 | FileCheck %s -DLINK=2 --check-prefix=FIELDS

# FIELDS: Section Headers:
# FIELDS:   [Nr] Name         Type   Address          Off    Size   ES Flg Lk
# FIELDS:   [ 1] .gnu.version VERSYM 0000000000000000 000040 000000 03     [[LINK]]
# FIELDS:   [ 2] .dynsym      DYNSYM 0000000000000000 000040 000018 18   A 3

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  OSABI: ELFOSABI_FREEBSD
  Type:  ET_DYN
Sections:
  - Name:    .gnu.version
    Type:    SHT_GNU_versym
    EntSize: 0x0000000000000003
    Entries: [ ]
    Link:    [[LINK=<none>]]
## Needed to emit the .dynsym section.
DynamicSymbols: []

## Check we are able to set the sh_link field to an arbitrary value.

# RUN: yaml2obj --docnum=2 -DLINK=0xff %s -o %t2.link
# RUN: llvm-readelf -S %t2.link | FileCheck %s -DLINK=255 --check-prefix=FIELDS

## Check we can use the "Content" key with the "Size" key when the size is greater
## than or equal to the content size.
## Also, check that we set the sh_link field to 0 when there is no .dynsym section.

# RUN: not yaml2obj --docnum=3 -DSIZE=1 -DCONTENT="'0011'" %s 2>&1 | \
# RUN:   FileCheck %s --check-prefix=CONTENT-SIZE-ERR

# CONTENT-SIZE-ERR: error: Section size must be greater than or equal to the content size

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_DYN
Sections:
  - Name:    .gnu.version
    Type:    SHT_GNU_versym
    Size:    [[SIZE=<none>]]
    Content: [[CONTENT=<none>]]
    Entries: [[ENTRIES=<none>]]

# RUN: yaml2obj --docnum=3 -DSIZE=2 -DCONTENT="'0011'" %s -o %t.cont.size.eq.o
# RUN: llvm-readobj --sections --section-data %t.cont.size.eq.o | \
# RUN:   FileCheck %s --check-prefix=CHECK-CONTENT -DDATA="0011"

# RUN: yaml2obj --docnum=3 -DSIZE=3 -DCONTENT="'0011'" %s -o %t.cont.size.gr.o
# RUN: llvm-readobj --sections --section-data %t.cont.size.gr.o | \
# RUN:   FileCheck %s --check-prefix=CHECK-CONTENT -DDATA="001100"

# CHECK-CONTENT:        Name: .gnu.version
# CHECK-CONTENT-NEXT:   Type: SHT_GNU_versym (0x6FFFFFFF)
# CHECK-CONTENT-NEXT:   Flags [ (0x0)
# CHECK-CONTENT-NEXT:   ]
# CHECK-CONTENT-NEXT:   Address:
# CHECK-CONTENT-NEXT:   Offset:
# CHECK-CONTENT-NEXT:   Size:
# CHECK-CONTENT-NEXT:   Link: 0
# CHECK-CONTENT:        SectionData (
# CHECK-CONTENT-NEXT:   0000: [[DATA]] |
# CHECK-CONTENT-NEXT: )

## Check we can use the "Size" key alone to create the section.

# RUN: yaml2obj --docnum=3 -DSIZE=3 %s -o %t.size.o
# RUN: llvm-readobj --sections --section-data %t.size.o | \
# RUN:   FileCheck %s --check-prefix=CHECK-CONTENT -DDATA="000000"

## Check we can use the "Content" key alone to create the section.

# RUN: yaml2obj --docnum=3 -DCONTENT="'112233'" %s -o %t.content.o
# RUN: llvm-readobj --sections --section-data %t.content.o | \
# RUN:   FileCheck %s --check-prefix=CHECK-CONTENT -DDATA="112233"

## Check we can't use the "Entries" key together with the "Content" or "Size" keys.

# RUN: not yaml2obj --docnum=3 -DSIZE=0 -DENTRIES="[]" %s 2>&1 | \
# RUN:   FileCheck %s --check-prefix=ENTRIES-ERR
# RUN: not yaml2obj --docnum=3 -DCONTENT="'00'" -DENTRIES="[]" %s 2>&1 | \
# RUN:   FileCheck %s --check-prefix=ENTRIES-ERR

# ENTRIES-ERR: error: "Entries" cannot be used with "Content" or "Size"

## Check we set the sh_link field to 0 when the .dynsym section is excluded
## from the section header table.

# RUN: yaml2obj --docnum=4 %s -o %t4
# RUN: llvm-readelf --sections %t4 | FileCheck %s --check-prefix=EXCLUDED

# EXCLUDED: [Nr] Name         {{.*}} ES Flg Lk Inf
# EXCLUDED: [ 1] .gnu.version {{.*}} 02     0   0

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_DYN
Sections:
  - Name: .gnu.version
    Type: SHT_GNU_versym
  - Name: .dynsym
    Type: SHT_DYNSYM
  - Type: SectionHeaderTable
    Sections:
      - Name: .gnu.version
      - Name: .strtab
      - Name: .shstrtab
    Excluded:
      - Name: .dynsym
