## 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