## Test that yaml2obj emits .debug_pubtypes section.

## a) Generate the '.debug_pubtypes' section from the 'DWARF' entry.

## Generate and verify a 32-bit little endian .debug_pubtypes section.

# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2LSB %s -o %t1.le.o
# RUN: llvm-readobj --sections --section-data %t1.le.o | \
# RUN:   FileCheck -DSIZE=30 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF32-LE

#            SHDR: Index: 1
#       SHDR-NEXT: Name: .debug_pubtypes (1)
#       SHDR-NEXT: Type: SHT_PROGBITS (0x1)
#       SHDR-NEXT: Flags [ (0x0)
#       SHDR-NEXT: ]
#       SHDR-NEXT: Address: 0x0
#       SHDR-NEXT: Offset: 0x40
#       SHDR-NEXT: Size: [[SIZE]]
#       SHDR-NEXT: Link: 0
#       SHDR-NEXT: Info: 0
#       SHDR-NEXT: AddressAlignment: [[ADDRALIGN]]
#       SHDR-NEXT: EntrySize: 0
# DWARF32-LE-NEXT: SectionData (
# DWARF32-LE-NEXT:   0000: 34120000 02003412 00002143 00007856 |4.....4...!C..xV|
##                         ^-------                            unit_length (4-byte)
##                                  ^---                       version (2-byte)
##                                      ^--------              debug_info_offset (4-byte)
##                                               ^--------     debug_info_length (4-byte)
##                                                        ^--- offset (4-byte)
##
# DWARF32-LE-NEXT:   0010: 34126162 63002143 65876465 6600     |4.abc.!Ce.def.|
##                         ----
##                             ^--------                       name "abc\0"
##                                      ^--------              offset (4-byte)
##                                               ^--------     name "def\0"
# DWARF32-LE-NEXT: )

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  [[ENDIAN]]
  Type:  ET_EXEC
DWARF:
  debug_pubtypes:
    Format:     [[FORMAT=DWARF32]]
    Length:     0x1234
    Version:    2
    UnitOffset: 0x1234
    UnitSize:   0x4321
    Entries:
      - DieOffset: 0x12345678
        Name:      abc
      - DieOffset: 0x87654321
        Name:      def

## Generate and verify a 32-bit big endian .debug_pubtypes section.

# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2MSB %s -o %t1.be.o
# RUN: llvm-readobj --sections --section-data %t1.be.o | \
# RUN:   FileCheck -DSIZE=30 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF32-BE

# DWARF32-BE-NEXT: SectionData (
# DWARF32-BE-NEXT:   0000: 00001234 00020000 12340000 43211234 |...4.....4..C!.4|
##                         ^-------                            unit_length (4-byte)
##                                  ^---                       version (2-byte)
##                                      ^--------              debug_info_offset (4-byte)
##                                               ^--------     debug_info_length (4-byte)
##                                                        ^--- offset (4-byte)
##
# DWARF32-BE-NEXT:   0010: 56786162 63008765 43216465 6600     |Vxabc..eC!def.|
##                         ----
##                             ^--------                       name "abc\0"
##                                      ^--------              offset (4-byte)
##                                               ^--------     name "def\0"
# DWARF32-BE-NEXT: )

## b) Generate the .debug_pubtypes section from raw section content.

# RUN: yaml2obj --docnum=2 %s -o %t2.o
# RUN: llvm-readobj --sections --section-data %t2.o | \
# RUN:   FileCheck %s -DADDRALIGN=0 -DSIZE=3 --check-prefixes=SHDR,ARBITRARY-CONTENT

#      ARBITRARY-CONTENT: SectionData (
# ARBITRARY-CONTENT-NEXT:   0000: 112233
# ARBITRARY-CONTENT-NEXT: )

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_EXEC
Sections:
  - Name:    .debug_pubtypes
    Type:    SHT_PROGBITS
    Content: "112233"

## c) Generate the .debug_pubtypes section when the "Size" is specified.

# RUN: yaml2obj --docnum=3 %s -o %t3.o
# RUN: llvm-readobj --sections --section-data %t3.o | \
# RUN:   FileCheck -DSIZE=16 -DADDRALIGN=0 %s --check-prefixes=SHDR,SIZE

#      SIZE: SectionData (
# SIZE-NEXT:   0000: 00000000 00000000 00000000 00000000  |................|
# SIZE-NEXT: )

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_EXEC
Sections:
  - Name: .debug_pubtypes
    Type: SHT_PROGBITS
    Size: 0x10

## d) Test that yaml2obj emits an error message when both the "Size" and the
## "debug_pubtypes" entry are specified at the same time.

# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=ERROR

# ERROR: yaml2obj: error: cannot specify section '.debug_pubtypes' contents in the 'DWARF' entry and the 'Content' or 'Size' in the 'Sections' entry at the same time

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_EXEC
Sections:
  - Name: .debug_pubtypes
    Type: SHT_PROGBITS
    Size: 0x10
DWARF:
  debug_pubtypes:
    Length:     0x1234
    Version:    2
    UnitOffset: 0x1234
    UnitSize:   0x4321
    Entries:    []

## e) Test that yaml2obj emits an error message when both the "Content" and the
## "debug_pubtypes" entry are specified at the same time.

# RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --check-prefix=ERROR

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_EXEC
Sections:
  - Name:    .debug_pubtypes
    Type:    SHT_PROGBITS
    Content: "00"
DWARF:
  debug_pubtypes:
    Length:     0x1234
    Version:    2
    UnitOffset: 0x1234
    UnitSize:   0x4321
    Entries:    []

## f) Test that all the properties can be overridden by the section header when
## the "debug_pubtypes" entry doesn't exist.

# RUN: yaml2obj --docnum=6 %s -o %t6.o
# RUN: llvm-readelf --sections %t6.o | FileCheck %s --check-prefix=OVERRIDDEN

#      OVERRIDDEN: [Nr] Name            Type   Address          Off    Size   ES Flg Lk Inf Al
#      OVERRIDDEN: [ 1] .debug_pubtypes STRTAB 0000000000002020 000050 00000e 01   A  2   1  2
# OVERRIDDEN-NEXT: [ 2] .sec            STRTAB 0000000000000000 00005e 000000 00      0   0  0

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_EXEC
Sections:
  - Name:         .debug_pubtypes
    Type:         SHT_STRTAB  ## SHT_PROGBITS by default.
    Flags:        [SHF_ALLOC] ## 0 by default.
    Link:         .sec        ## 0 by default.
    EntSize:      1           ## 0 by default.
    Info:         1           ## 0 by default.
    AddressAlign: 2           ## 0 by default.
    Address:      0x2020      ## 0x00 by default.
    Offset:       0x50        ## 0x40 for the first section.
    Size:         0x0e        ## Set the "Size" so that we can reuse the check tag "OVERRIDDEN".
  - Name:         .sec        ## Linked by .debug_pubtypes.
    Type:         SHT_STRTAB

## g) Test that all the properties can be overridden by the section header when
## the "debug_pubtypes" entry exists.

# RUN: yaml2obj --docnum=7 %s -o %t7.o
# RUN: llvm-readelf --sections %t7.o | FileCheck %s --check-prefix=OVERRIDDEN

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_EXEC
Sections:
  - Name:         .debug_pubtypes
    Type:         SHT_STRTAB  ## SHT_PROGBITS by default.
    Flags:        [SHF_ALLOC] ## 0 by default.
    Link:         .sec        ## 0 by default.
    EntSize:      1           ## 0 by default.
    Info:         1           ## 0 by default.
    AddressAlign: 2           ## 1 by default.
    Address:      0x2020      ## 0x00 by default.
    Offset:       0x50        ## 0x40 for the first section.
  - Name:         .sec        ## Linked by .debug_pubtypes.
    Type:         SHT_STRTAB
DWARF:
  debug_pubtypes:
    Length:     0x1234
    Version:    2
    UnitOffset: 0x1234
    UnitSize:   0x4321
    Entries:    []
