## a) Test that yaml2macho is able to emit the .debug_aranges section and obj2yaml
## is able to convert it back.

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

--- !mach-o
FileHeader:      
  magic:           0xFEEDFACF
  cputype:         0x01000007
  cpusubtype:      0x00000003
  filetype:        0x0000000A
  ncmds:           7
  sizeofcmds:      1848
  flags:           0x00000000
  reserved:        0x00000000
LoadCommands:    
  - cmd:             LC_UUID
    cmdsize:         24
    uuid:            B4D48511-37F4-3ED4-AFA7-1683DCE69AC4
  - 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:         472
    segname:         __TEXT
    vmaddr:          4294967296
    vmsize:          4096
    fileoff:         0
    filesize:        0
    maxprot:         7
    initprot:        5
    nsects:          5
    flags:           0
    Sections:        
      - sectname:        __text
        segname:         __TEXT
        addr:            0x0000000100000F50
        size:            52
        offset:          0x00000000
        align:           4
        reloff:          0x00000000
        nreloc:          0
        flags:           0x80000400
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __stubs
        segname:         __TEXT
        addr:            0x0000000100000F84
        size:            6
        offset:          0x00000000
        align:           1
        reloff:          0x00000000
        nreloc:          0
        flags:           0x80000408
        reserved1:       0x00000000
        reserved2:       0x00000006
        reserved3:       0x00000000
      - sectname:        __stub_helper
        segname:         __TEXT
        addr:            0x0000000100000F8C
        size:            26
        offset:          0x00000000
        align:           2
        reloff:          0x00000000
        nreloc:          0
        flags:           0x80000400
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __cstring
        segname:         __TEXT
        addr:            0x0000000100000FA6
        size:            14
        offset:          0x00000000
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000002
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __unwind_info
        segname:         __TEXT
        addr:            0x0000000100000FB4
        size:            72
        offset:          0x00000000
        align:           2
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
  - cmd:             LC_SEGMENT_64
    cmdsize:         232
    segname:         __DATA
    vmaddr:          4294971392
    vmsize:          4096
    fileoff:         0
    filesize:        0
    maxprot:         7
    initprot:        3
    nsects:          2
    flags:           0
    Sections:        
      - sectname:        __nl_symbol_ptr
        segname:         __DATA
        addr:            0x0000000100001000
        size:            16
        offset:          0x00000000
        align:           3
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000006
        reserved1:       0x00000001
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __la_symbol_ptr
        segname:         __DATA
        addr:            0x0000000100001010
        size:            8
        offset:          0x00000000
        align:           3
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000007
        reserved1:       0x00000003
        reserved2:       0x00000000
        reserved3:       0x00000000
  - cmd:             LC_SEGMENT_64
    cmdsize:         72
    segname:         __LINKEDIT
    vmaddr:          4294975488
    vmsize:          4096
    fileoff:         4096
    filesize:        60
    maxprot:         7
    initprot:        1
    nsects:          0
    flags:           0
  - cmd:             LC_SEGMENT_64
    cmdsize:         952
    segname:         __DWARF
    vmaddr:          4294979584
    vmsize:          4096
    fileoff:         8192
    filesize:        764
    maxprot:         7
    initprot:        3
    nsects:          11
    flags:           0
    Sections:        
      - sectname:        __debug_line
        segname:         __DWARF
        addr:            0x0000000100003000
        size:            69
        offset:          0x00002000
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_pubnames
        segname:         __DWARF
        addr:            0x0000000100003045
        size:            27
        offset:          0x00002045
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_pubtypes
        segname:         __DWARF
        addr:            0x0000000100003060
        size:            35
        offset:          0x00002060
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_aranges
        segname:         __DWARF
        addr:            0x0000000100003083
        size:            48
        offset:          0x00002083
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_info
        segname:         __DWARF
        addr:            0x00000001000030B3
        size:            121
        offset:          0x000020B3
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_abbrev
        segname:         __DWARF
        addr:            0x000000010000312C
        size:            76
        offset:          0x0000212C
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __debug_str
        segname:         __DWARF
        addr:            0x0000000100003178
        size:            142
        offset:          0x00002178
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __apple_names
        segname:         __DWARF
        addr:            0x0000000100003206
        size:            60
        offset:          0x00002206
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __apple_namespac
        segname:         __DWARF
        addr:            0x0000000100003242
        size:            36
        offset:          0x00002242
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __apple_types
        segname:         __DWARF
        addr:            0x0000000100003266
        size:            114
        offset:          0x00002266
        align:           0
        reloff:          0x00000000
        nreloc:          0
        flags:           0x00000000
        reserved1:       0x00000000
        reserved2:       0x00000000
        reserved3:       0x00000000
      - sectname:        __apple_objc
        segname:         __DWARF
        addr:            0x00000001000032D8
        size:            36
        offset:          0x000022D8
        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:         4294971216
  StringTable:     
    - ''
    - ''
    - __mh_execute_header
    - _main
DWARF:           
  debug_aranges:   
    - Length:              44
      Version:             2
      CuOffset:            0
      AddressSize:         8
      SegmentSelectorSize: 0
      Descriptors:     
        - Address:         0x0000000100000F50
          Length:          52
...

#      CHECK:   debug_aranges:
# CHECK-NEXT:     - Length:              0x2C
# CHECK-NEXT:       Version:             2
# CHECK-NEXT:       CuOffset:            0x0
# CHECK-NEXT:       AddressSize:         0x8
# CHECK-NEXT:       Descriptors:
# CHECK-NEXT:         - Address: 0x100000F50
# CHECK-NEXT:           Length:  0x34

## b) Test that if the "debug_aranges" entry is empty, yaml2macho will only emit the
## section header.

# RUN: yaml2obj --docnum=2 %s -o %t2.o
# RUN: llvm-readobj --sections --section-data %t2.o | FileCheck %s --check-prefix=EMPTY-SECTION

#      EMPTY-SECTION: Index: 0
# EMPTY-SECTION-NEXT: Name: __debug_aranges (5F 5F 64 65 62 75 67 5F 61 72 61 6E 67 65 73 00)
# EMPTY-SECTION-NEXT: Segment: __DWARF (5F 5F 44 57 41 52 46 00 00 00 00 00 00 00 00 00)
# EMPTY-SECTION-NEXT: Address: 0x0
# EMPTY-SECTION-NEXT: Size: 0xC
# EMPTY-SECTION-NEXT: Offset: 528
# EMPTY-SECTION-NEXT: Alignment: 0
# EMPTY-SECTION-NEXT: RelocationOffset: 0x0
# EMPTY-SECTION-NEXT: RelocationCount: 0
# EMPTY-SECTION-NEXT: Type: Regular (0x0)
# EMPTY-SECTION-NEXT: Attributes [ (0x0)
# EMPTY-SECTION-NEXT: ]
# EMPTY-SECTION-NEXT: Reserved1: 0x0
# EMPTY-SECTION-NEXT: Reserved2: 0x0
# EMPTY-SECTION-NEXT: Reserved3: 0x0
# EMPTY-SECTION-NEXT: SectionData (
# EMPTY-SECTION-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_aranges
        segname:   __DWARF
        addr:      0x00
        size:      12
        offset:    528
        align:     0
        reloff:    0x00000000
        nreloc:    0
        flags:     0x00000000
        reserved1: 0x00000000
        reserved2: 0x00000000
        reserved3: 0x00000000
DWARF:
  debug_aranges: []
