| ## This file contains test cases for generating .debug_pubnames/.debug_pubtypes |
| ## section in object files from the DWARF entry of Mach-O YAML inputs |
| |
| ## a) Test that yaml2obj emits the .debug_pubnames and .debug_pubtypes sections and |
| ## obj2yaml converts them back. |
| |
| # RUN: yaml2obj %s | obj2yaml | FileCheck %s |
| |
| --- !mach-o |
| FileHeader: |
| magic: 0xFEEDFACF |
| cputype: 0x01000007 |
| cpusubtype: 0x00000003 |
| filetype: 0x0000000A |
| ncmds: 1 |
| sizeofcmds: 1800 |
| flags: 0x00000000 |
| reserved: 0x00000000 |
| LoadCommands: |
| - cmd: LC_SEGMENT_64 |
| cmdsize: 232 |
| segname: __DWARF |
| vmaddr: 0 |
| vmsize: 0 |
| fileoff: 152 |
| filesize: 0xffff |
| maxprot: 0 |
| initprot: 0 |
| nsects: 2 |
| flags: 0 |
| Sections: |
| - sectname: __debug_pubnames |
| segname: __DWARF |
| addr: 0x0000000000000000 |
| size: 27 |
| offset: 0x00000152 |
| align: 0 |
| reloff: 0x00000000 |
| nreloc: 0 |
| flags: 0x00000000 |
| reserved1: 0x00000000 |
| reserved2: 0x00000000 |
| reserved3: 0x00000000 |
| - sectname: __debug_pubtypes |
| segname: __DWARF |
| addr: 0x0000000000000000 |
| size: 35 |
| offset: 0x00000720 |
| align: 0 |
| reloff: 0x00000000 |
| nreloc: 0 |
| flags: 0x00000000 |
| reserved1: 0x00000000 |
| reserved2: 0x00000000 |
| reserved3: 0x00000000 |
| DWARF: |
| debug_pubnames: |
| Length: 23 |
| Version: 2 |
| UnitOffset: 0 |
| UnitSize: 121 |
| Entries: |
| - DieOffset: 0x0000002A |
| Name: main |
| debug_pubtypes: |
| Length: 31 |
| Version: 2 |
| UnitOffset: 0 |
| UnitSize: 121 |
| Entries: |
| - DieOffset: 0x00000060 |
| Name: int |
| - DieOffset: 0x00000071 |
| Name: char |
| |
| # CHECK: DWARF: |
| # CHECK: debug_pubnames: |
| # CHECK-NEXT: Length: 0x17 |
| # CHECK-NEXT: Version: 2 |
| # CHECK-NEXT: UnitOffset: 0 |
| # CHECK-NEXT: UnitSize: 121 |
| # CHECK-NEXT: Entries: |
| # CHECK-NEXT: - DieOffset: 0x2A |
| # CHECK-NEXT: Name: main |
| # CHECK-NEXT: debug_pubtypes: |
| # CHECK-NEXT: Length: 0x1F |
| # CHECK-NEXT: Version: 2 |
| # CHECK-NEXT: UnitOffset: 0 |
| # CHECK-NEXT: UnitSize: 121 |
| # CHECK-NEXT: Entries: |
| # CHECK-NEXT: - DieOffset: 0x60 |
| # CHECK-NEXT: Name: int |
| # CHECK-NEXT: - DieOffset: 0x71 |
| # CHECK-NEXT: Name: char |
| # CHECK-NEXT: ... |
| |
| ## b) Test that yaml2obj will not emit the .debug_pubnames/.debug_pubtypes section's |
| ## contents, if the "debug_pubnames"/"debug_pubtypes" entry doesn't exist in the |
| ## "DWARF" entry. |
| |
| # RUN: yaml2obj --docnum=2 %s -o %t2 |
| # RUN: obj2yaml %t2 | FileCheck %s --check-prefix=EMPTY |
| |
| # EMPTY: Sections: |
| # EMPTY-NEXT: - sectname: __debug_pubnames |
| # EMPTY-NEXT: segname: __DWARF |
| # EMPTY-NEXT: addr: 0x0 |
| # EMPTY-NEXT: size: 0 |
| # EMPTY-NEXT: offset: 0x0 |
| # EMPTY-NEXT: align: 0 |
| # EMPTY-NEXT: reloff: 0x0 |
| # EMPTY-NEXT: nreloc: 0 |
| # EMPTY-NEXT: flags: 0x0 |
| # EMPTY-NEXT: reserved1: 0x0 |
| # EMPTY-NEXT: reserved2: 0x0 |
| # EMPTY-NEXT: reserved3: 0x0 |
| # EMPTY-NEXT: - sectname: __debug_pubtypes |
| # EMPTY-NEXT: segname: __DWARF |
| # EMPTY-NEXT: addr: 0x0 |
| # EMPTY-NEXT: size: 0 |
| # EMPTY-NEXT: offset: 0x720 |
| # EMPTY-NEXT: align: 0 |
| # EMPTY-NEXT: reloff: 0x0 |
| # EMPTY-NEXT: nreloc: 0 |
| # EMPTY-NEXT: flags: 0x0 |
| # EMPTY-NEXT: reserved1: 0x0 |
| # EMPTY-NEXT: reserved2: 0x0 |
| # EMPTY-NEXT: reserved3: 0x0 |
| # EMPTY-NEXT: ... |
| |
| --- !mach-o |
| FileHeader: |
| magic: 0xFEEDFACF |
| cputype: 0x01000007 |
| cpusubtype: 0x00000003 |
| filetype: 0x0000000A |
| ncmds: 1 |
| sizeofcmds: 1772 |
| flags: 0x00000000 |
| reserved: 0x00000000 |
| LoadCommands: |
| - cmd: LC_SEGMENT_64 |
| cmdsize: 232 |
| segname: __DWARF |
| vmaddr: 0x00000000 |
| vmsize: 0x00000000 |
| fileoff: 0 |
| filesize: 0 |
| maxprot: 0 |
| initprot: 0 |
| nsects: 2 |
| flags: 0 |
| Sections: |
| - sectname: __debug_pubnames |
| segname: __DWARF |
| addr: 0x0000000000000000 |
| size: 0 |
| offset: 0x00000000 |
| align: 0 |
| reloff: 0x00000000 |
| nreloc: 0 |
| flags: 0x00000000 |
| reserved1: 0x00000000 |
| reserved2: 0x00000000 |
| reserved3: 0x00000000 |
| - sectname: __debug_pubtypes |
| segname: __DWARF |
| addr: 0x0000000000000000 |
| size: 0 |
| offset: 0x00000720 |
| align: 0 |
| reloff: 0x00000000 |
| nreloc: 0 |
| flags: 0x00000000 |
| reserved1: 0x00000000 |
| reserved2: 0x00000000 |
| reserved3: 0x00000000 |
| DWARF: |
| |
| ## c) Test that obj2yaml is able to dump a __debug_pubnames section whose length field is greater than the section size. |
| |
| # RUN: yaml2obj --docnum=3 %s | obj2yaml | FileCheck %s --check-prefix=INVALID-LENGTH |
| |
| # INVALID-LENGTH: DWARF: |
| # INVALID-LENGTH-NEXT: debug_pubnames: |
| # INVALID-LENGTH-NEXT: Length: 0xDEADBEEF |
| # INVALID-LENGTH-NEXT: Version: 2 |
| # INVALID-LENGTH-NEXT: UnitOffset: 0 |
| # INVALID-LENGTH-NEXT: UnitSize: 121 |
| # INVALID-LENGTH-NEXT: Entries: |
| # INVALID-LENGTH-NEXT: - DieOffset: 0x2A |
| # INVALID-LENGTH-NEXT: Name: main |
| |
| --- !mach-o |
| FileHeader: |
| magic: 0xFEEDFACF |
| cputype: 0x01000007 |
| cpusubtype: 0x00000003 |
| filetype: 0x0000000A |
| ncmds: 1 |
| sizeofcmds: 1888 |
| flags: 0x00000000 |
| reserved: 0x00000000 |
| LoadCommands: |
| - cmd: LC_SEGMENT_64 |
| cmdsize: 152 |
| segname: __DWARF |
| vmaddr: 0x00000000 |
| vmsize: 0x00000000 |
| fileoff: 0 |
| filesize: 0xffff |
| maxprot: 0 |
| initprot: 0 |
| nsects: 1 |
| flags: 0 |
| Sections: |
| - sectname: __debug_pubnames |
| segname: __DWARF |
| addr: 0x0000000000000000 |
| size: 24 |
| offset: 0x000000b8 |
| align: 0 |
| reloff: 0x00000000 |
| nreloc: 0 |
| flags: 0x00000000 |
| reserved1: 0x00000000 |
| reserved2: 0x00000000 |
| reserved3: 0x00000000 |
| DWARF: |
| debug_pubnames: |
| Length: 0xdeadbeef |
| Version: 2 |
| UnitOffset: 0 |
| UnitSize: 121 |
| Entries: |
| - DieOffset: 0x0000002A |
| Name: main |