llvm/llvm/test/tools/obj2yaml/ELF/note-section.yaml

## Check how obj2yaml dumps SHT_NOTE sections.

## We can dump the Name, Desc and Type fields when the note section is valid.

# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=VALID

# VALID:      - Name: .note.foo
# VALID-NEXT:   Type: SHT_NOTE
# VALID-NEXT:   Notes:
# VALID-NEXT:    - Name: ''
# VALID-NEXT:      Desc: ''
# VALID-NEXT:      Type: 0x0
# VALID-NEXT: - Name: .note.bar
# VALID-NEXT:   Type: SHT_NOTE
# VALID-NEXT:   Notes:
# VALID-NEXT:     - Name: ABC
# VALID-NEXT:       Desc: '001122'
# VALID-NEXT:       Type: 0xAABBCCDD

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_DYN
Sections:
  - Name: .note.foo
    Type: SHT_NOTE
    Size: 12
  - Name: .note.bar
    Type: SHT_NOTE
    Notes:
      - Name: ABC
        Desc: '001122'
        Type: 0xAABBCCDD

## Check we dump hex digit pairs if the note section is invalid.

# RUN: yaml2obj --docnum=2 %s -o %t2
# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=INVALID

# INVALID:      - Name:    .note.tooShortNote
# INVALID-NEXT:   Type:    SHT_NOTE
# INVALID-NEXT:   Content: '0000000000000000000000'
# INVALID-NEXT: - Name:    .note.tooLongNameSize
# INVALID-NEXT:   Type:    SHT_NOTE
# INVALID-NEXT:   Content: 0100000000000000FF00000000
# INVALID-NEXT: - Name:    .note.tooLongDescSize
# INVALID-NEXT:   Type:    SHT_NOTE
# INVALID-NEXT:   Content: 0000000001000000FF00000000

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_DYN
Sections:
## Content is less than 12 bytes in size.
## (12 is the size of n_namesz, n_descsz and n_type 4-bytes fields that must always present).
  - Name: .note.tooShortNote
    Type: SHT_NOTE
    Size: 11
## We can't dump the Name, Desc and Type fields when the
## content is shorter than the computed size.
##
## Too long name size.
  - Name: .note.tooLongNameSize
    Type: SHT_NOTE
    Content: "0100000000000000ff00000000"
## Too long description size.
  - Name: .note.tooLongDescSize
    Type: SHT_NOTE
    Content: "0000000001000000ff00000000"

## Check we do not crash when dumping a description that has bytes
## on its bounds that do not fit into signed byte.
## This is a completely normal case, but we had a crash before.

# RUN: yaml2obj --docnum=3 %s -o %t3
# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=HEX-DESC

# HEX-DESC: Desc: FE0000FE

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2MSB
  Type:  ET_DYN
Sections:
  - Name:  .note.tag
    Type:  SHT_NOTE
    Flags: [ SHF_ALLOC ]
    Notes:
      - Desc: 'FE0000FE'
        Type: 0