## a) Test that obj2yaml is able to dump the __debug_str section.

# RUN: yaml2obj --docnum=1 %s | obj2yaml | FileCheck %s

--- !mach-o
FileHeader:      
  magic:           0xFEEDFACF
  cputype:         0x01000007
  cpusubtype:      0x00000003
  filetype:        0x0000000A
  ncmds:           6
  sizeofcmds:      1376
  flags:           0x00000000
  reserved:        0x00000000
LoadCommands:    
  - cmd:             LC_UUID
    cmdsize:         24
    uuid:            9304404B-E522-3BBA-A861-AF5938908725
  - cmd:             LC_SYMTAB
    cmdsize:         24
    symoff:          4096
    nsyms:           2
    stroff:          4128
    strsize:         28
  - cmd:             LC_SEGMENT_64
    cmdsize:         72
    segname:         __PAGEZERO
    vmaddr:          0
    vmsize:          4294967296
    fileoff:         0
    filesize:        0
    maxprot:         0
    initprot:        0
    nsects:          0
    flags:           0
  - cmd:             LC_SEGMENT_64
    cmdsize:         232
    segname:         __TEXT
    vmaddr:          4294967296
    vmsize:          4096
    fileoff:         0
    filesize:        0
    maxprot:         7
    initprot:        5
    nsects:          2
    flags:           0
    Sections:        
      - sectname:        __text
        segname:         __TEXT
        addr:            0x0000000100000FA0
        size:            22
        offset:          0x00000000
        align:           4
        reloff:          0x00000000
        nreloc:          0
        flags:           0x80000400
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __unwind_info
        segname:         __TEXT
        addr:            0x0000000100000FB8
        size:            72
        offset:          0x00000000
        align:           2
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
  - cmd:             LC_SEGMENT_64
    cmdsize:         72
    segname:         __LINKEDIT
    vmaddr:          4294971392
    vmsize:          4096
    fileoff:         4096
    filesize:        60
    maxprot:         7
    initprot:        1
    nsects:          0
    flags:           0
  - cmd:             LC_SEGMENT_64
    cmdsize:         952
    segname:         __DWARF
    vmaddr:          4294975488
    vmsize:          4096
    fileoff:         8192
    filesize:        765
    maxprot:         7
    initprot:        3
    nsects:          11
    flags:           0
    Sections:        
      - sectname:        __debug_line
        segname:         __DWARF
        addr:            0x0000000100002000
        size:            70
        offset:          0x00002000
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_pubnames
        segname:         __DWARF
        addr:            0x0000000100002046
        size:            27
        offset:          0x00002046
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_pubtypes
        segname:         __DWARF
        addr:            0x0000000100002061
        size:            35
        offset:          0x00002061
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_info
        segname:         __DWARF
        addr:            0x00000001000020B4
        size:            121
        offset:          0x000020B4
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_abbrev
        segname:         __DWARF
        addr:            0x000000010000212D
        size:            76
        offset:          0x0000212D
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_str
        segname:         __DWARF
        addr:            0x0000000100002179
        size:            142
        offset:          0x00002179
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __apple_names
        segname:         __DWARF
        addr:            0x0000000100002207
        size:            60
        offset:          0x00002207
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __apple_namespac
        segname:         __DWARF
        addr:            0x0000000100002243
        size:            36
        offset:          0x00002243
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __apple_types
        segname:         __DWARF
        addr:            0x0000000100002267
        size:            114
        offset:          0x00002267
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __apple_objc
        segname:         __DWARF
        addr:            0x00000001000022D9
        size:            36
        offset:          0x000022D9
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
LinkEditData:    
  NameList:        
    - n_strx:          2
      n_type:          0x0F
      n_sect:          1
      n_desc:          16
      n_value:         4294967296
    - n_strx:          22
      n_type:          0x0F
      n_sect:          1
      n_desc:          0
      n_value:         4294971296
  StringTable:     
    - ''
    - ''
    - __mh_execute_header
    - _main
DWARF:           
  debug_str:    
    - ''
    - 'clang version 4.0.0 (trunk 288677) (llvm/trunk 288676)'
    - hello_world.c
    - /Users/cbieneman/dev/open-source/llvm-build-rel
    - main
    - argc
    - argv
    - int
    - char
...

#CHECK: DWARF:           
#CHECK:   debug_str:    
#CHECK:     - ''
#CHECK:     - 'clang version 4.0.0 (trunk 288677) (llvm/trunk 288676)'
#CHECK:     - hello_world.c
#CHECK:     - '/Users/cbieneman/dev/open-source/llvm-build-rel'
#CHECK:     - main
#CHECK:     - argc
#CHECK:     - argv
#CHECK:     - int
#CHECK:     - char

## b) Test dumping an empty __debug_str section.

# RUN: yaml2obj --docnum=2 -DCONTENT='[]' %s | obj2yaml | FileCheck %s --check-prefix=EMPTY-CONTENT

#      EMPTY-CONTENT: Sections:
# EMPTY-CONTENT-NEXT:   - sectname:  __debug_str
# EMPTY-CONTENT-NEXT:     segname:   __DWARF
# EMPTY-CONTENT-NEXT:     addr:      0x0
# EMPTY-CONTENT-NEXT:     size:      0
# EMPTY-CONTENT-NEXT:     offset:    0x210
# EMPTY-CONTENT-NEXT:     align:     0
# EMPTY-CONTENT-NEXT:     reloff:    0x0
# EMPTY-CONTENT-NEXT:     nreloc:    0
# EMPTY-CONTENT-NEXT:     flags:     0x0
# EMPTY-CONTENT-NEXT:     reserved1: 0x0
# EMPTY-CONTENT-NEXT:     reserved2: 0x0
# EMPTY-CONTENT-NEXT:     reserved3: 0x0
# EMPTY-CONTENT-NEXT: DWARF:
# EMPTY-CONTENT-NEXT:   debug_str: []

--- !mach-o
FileHeader:
  magic:      0xFEEDFACF
  cputype:    0x01000007
  cpusubtype: 0x00000003
  filetype:   0x0000000A
  ncmds:      1
  sizeofcmds: 232
  flags:      0x00000000
  reserved:   0x00000000
LoadCommands:
  - cmd:      LC_SEGMENT_64
    cmdsize:  152
    segname:  __DWARF
    vmaddr:   0x00
    vmsize:   0x00
    fileoff:  0x00
    filesize: 0x00
    maxprot:  0
    initprot: 0
    nsects:   1
    flags:    0
    Sections:
      - sectname:  __debug_str
        segname:   __DWARF
        addr:      0x00
        size:      [[SIZE=0]]
        offset:    0x210
        align:     0
        reloff:    0x00000000
        nreloc:    0
        flags:     0x00000000
        reserved1: 0x00000000
        reserved2: 0x00000000
        reserved3: 0x00000000
DWARF:
  debug_str:
    [[CONTENT]]

## c) Test generating and dumping a __debug_str section who only has an empty string.

# RUN: yaml2obj --docnum=2 -DCONTENT='[ "" ]' -DSIZE=1 %s | obj2yaml | FileCheck %s --check-prefix=EMPTY-STRING

#      EMPTY-STRING: DWARF:
# EMPTY-STRING-NEXT:   debug_str:
# EMPTY-STRING-NEXT:     - ''
# EMPTY-STRING-NEXT: ...

## d) Test generating and dumping a __debug_str section which contains a string without a null terminator.

# RUN: yaml2obj --docnum=3 %s | obj2yaml | FileCheck %s --check-prefix=NO-TERMINATOR

#  NO-TERMINATOR-NOT: DWARF:
#      NO-TERMINATOR: Sections:
# NO-TERMINATOR-NEXT:   - sectname:  __debug_str
# NO-TERMINATOR-NEXT:     segname:   __DWARF
# NO-TERMINATOR-NEXT:     addr:      0x0
# NO-TERMINATOR-NEXT:     size:      7
# NO-TERMINATOR-NEXT:     offset:    0x210
# NO-TERMINATOR-NEXT:     align:     0
# NO-TERMINATOR-NEXT:     reloff:    0x0
# NO-TERMINATOR-NEXT:     nreloc:    0
# NO-TERMINATOR-NEXT:     flags:     0x0
# NO-TERMINATOR-NEXT:     reserved1: 0x0
# NO-TERMINATOR-NEXT:     reserved2: 0x0
# NO-TERMINATOR-NEXT:     reserved3: 0x0
# NO-TERMINATOR-NEXT:     content:   '61626300616263'
# NO-TERMINATOR-NEXT: ...

--- !mach-o
FileHeader:
  magic:      0xFEEDFACF
  cputype:    0x01000007
  cpusubtype: 0x00000003
  filetype:   0x0000000A
  ncmds:      1
  sizeofcmds: 232
  flags:      0x00000000
  reserved:   0x00000000
LoadCommands:
  - cmd:      LC_SEGMENT_64
    cmdsize:  152
    segname:  __DWARF
    vmaddr:   0x00
    vmsize:   0x00
    fileoff:  0x00
    filesize: 0x00
    maxprot:  0
    initprot: 0
    nsects:   1
    flags:    0
    Sections:
      - sectname:  __debug_str
        segname:   __DWARF
        addr:      0x00
        size:      7
        offset:    0x210
        align:     0
        reloff:    0x00000000
        nreloc:    0
        flags:     0x00000000
        reserved1: 0x00000000
        reserved2: 0x00000000
        reserved3: 0x00000000
        content:   '61626300616263' ## "abc\0abc"
