Compiler projects using llvm
## Check we are able to describe the content of a section
## using the ContentArray key.

## Check we are able to use ContentArray to create multi-line descriptions
## of section contents with comments on the same line.
# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s

# CHECK:      Section {
# CHECK:        Index: 1
# CHECK-NEXT:   Name: .foo
# CHECK-NEXT:   Type: SHT_PROGBITS
# CHECK-NEXT:   Flags [
# CHECK-NEXT:   ]
# CHECK-NEXT:   Address: 0x0
# CHECK-NEXT:   Offset: 0x40
# CHECK-NEXT:   Size: 16
# CHECK-NEXT:   Link: 0
# CHECK-NEXT:   Info: 0
# CHECK-NEXT:   AddressAlignment: 0
# CHECK-NEXT:   EntrySize: 0
# CHECK-NEXT:   SectionData (
# CHECK-NEXT:     0000: 11223344 55667788 99AABBCC DDEEFF00
# CHECK-NEXT:   )
# CHECK-NEXT: }

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_DYN
Sections:
  - Name:         .foo
    Type:         SHT_PROGBITS
    ContentArray: [ 0x11, 0x22, 0x33, 0x44,                                ## .long 11223344
                    0x55, 0x66,                                            ## .short 5566.
                    0x77,                                                  ## .byte 0x77
                    0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00 ] ## .quad 0x8899aabbccddeeff00

## Check we do not allow using 'Content' and 'ContentArray' at the same time.
# RUN: not yaml2obj --docnum=2 %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=BOTH
# BOTH: error: Content and ContentArray can't be used together

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_DYN
Sections:
  - Name:         .foo
    Type:         SHT_PROGBITS
    Content:      [ 0x0 ]
    ContentArray: [ 0x1 ]

## Check how the "Size" and the "ContentArray" keys can be used together.

## Case A: check that we report an error when the the value of "Size" is less than the content size.
# RUN: not yaml2obj --docnum=3 -DSIZE=1 %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=SIZE-LESS
# SIZE-LESS: error: Section size must be greater than or equal to the content size

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_DYN
Sections:
  - Name:         .foo
    Type:         SHT_PROGBITS
    ContentArray: [ 0x11, 0x22 ]
    Size:         [[SIZE]]

## Case B: check we are able to produce an output when the value of "Size" is equal
##         to the content size. In this case the "Size" key has no effect.
# RUN: yaml2obj --docnum=3 -DSIZE=2 %s -o %t3.eq
# RUN: llvm-readobj --sections --section-data %t3.eq | FileCheck %s --check-prefix=SIZE-EQ

# SIZE-EQ:      Name: .foo
# SIZE-EQ:      SectionData (
# SIZE-EQ-NEXT:   0000: 1122 |
# SIZE-EQ-NEXT: )

## Case C: check we are able to produce an output when the value of "Size" is greater
##         than the content size. In this case zeroes are added as padding after the
##         specified content.
# RUN: yaml2obj --docnum=3 -DSIZE=3 %s -o %t4.gr
# RUN: llvm-readobj --sections --section-data %t4.gr | FileCheck %s --check-prefix=SIZE-GR

# SIZE-GR:      Name: .foo
# SIZE-GR:      SectionData (
# SIZE-GR-NEXT:   0000: 112200 |
# SIZE-GR-NEXT: )