From: Chris Bieneman Date: Tue, 7 Mar 2017 21:34:35 +0000 (+0000) Subject: [ObjectYAML] Fix issue with DWARF2 AddrSize 8 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f4f71cd77b30788f85c87b13934061d77eaa5b25;p=llvm [ObjectYAML] Fix issue with DWARF2 AddrSize 8 In my refactoring I introduced a bug where we were using the reference size instead of the offset size for DW_FORM_strp and similar forms. This patch resolves the error and adds a test case testing all the DWARF forms for DWARF2 AddrSize 8. There is similar coverage already in the DWARFDebugInfoTest sources that covers the parser. Once I migrate the DWARFGenerator APIs to be built on the YAML tools they will be fully covered under the same tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297230 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ObjectYAML/DWARFVisitor.cpp b/lib/ObjectYAML/DWARFVisitor.cpp index cb9ad7a4cb8..36a9f7638bd 100644 --- a/lib/ObjectYAML/DWARFVisitor.cpp +++ b/lib/ObjectYAML/DWARFVisitor.cpp @@ -34,10 +34,14 @@ void DWARFYAML::VisitorImpl::onVariableSizeValue(uint64_t U, unsigned Size) { } } +unsigned getOffsetSize(const DWARFYAML::Unit &Unit) { + return Unit.Length.isDWARF64() ? 8 : 4; +} + unsigned getRefSize(const DWARFYAML::Unit &Unit) { if (Unit.Version == 2) return Unit.AddrSize; - return Unit.Length.isDWARF64() ? 8 : 4; + return getOffsetSize(Unit); } template void DWARFYAML::VisitorImpl::traverseDebugInfo() { @@ -149,7 +153,7 @@ template void DWARFYAML::VisitorImpl::traverseDebugInfo() { case dwarf::DW_FORM_GNU_strp_alt: case dwarf::DW_FORM_line_strp: case dwarf::DW_FORM_strp_sup: - onVariableSizeValue(FormVal->Value, getRefSize(Unit)); + onVariableSizeValue(FormVal->Value, getOffsetSize(Unit)); break; case dwarf::DW_FORM_ref_sig8: onValue((uint64_t)FormVal->Value); diff --git a/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml b/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml new file mode 100644 index 00000000000..e91935bcdc1 --- /dev/null +++ b/test/ObjectYAML/MachO/DWARF2-AddrSize8-FormValues.yaml @@ -0,0 +1,507 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s + +--- !mach-o +FileHeader: + magic: 0xFEEDFACF + cputype: 0x01000007 + cpusubtype: 0x00000003 + filetype: 0x0000000A + ncmds: 5 + sizeofcmds: 1800 + flags: 0x00000000 + reserved: 0x00000000 +LoadCommands: + - 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: 180 + offset: 0x000020B3 + align: 0 + reloff: 0x00000000 + nreloc: 0 + flags: 0x00000000 + reserved1: 0x00000000 + reserved2: 0x00000000 + reserved3: 0x00000000 + - sectname: __debug_abbrev + segname: __DWARF + addr: 0x000000010000312C + size: 84 + offset: 0x00002167 + align: 0 + reloff: 0x00000000 + nreloc: 0 + flags: 0x00000000 + reserved1: 0x00000000 + reserved2: 0x00000000 + reserved3: 0x00000000 + - sectname: __debug_str + segname: __DWARF + addr: 0x0000000100003178 + size: 83 + offset: 0x000021BB + align: 0 + reloff: 0x00000000 + nreloc: 0 + flags: 0x00000000 + reserved1: 0x00000000 + reserved2: 0x00000000 + reserved3: 0x00000000 + - sectname: __apple_names + segname: __DWARF + addr: 0x0000000100003206 + size: 36 + offset: 0x0000221E + 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 +DWARF: + debug_str: + - World + debug_abbrev: + - Code: 0x00000001 + Tag: DW_TAG_compile_unit + Children: DW_CHILDREN_no + Attributes: + - Attribute: 0x2000 + Form: DW_FORM_addr + - Attribute: 0x2001 + Form: DW_FORM_block + - Attribute: DW_AT_MIPS_loop_begin + Form: DW_FORM_block1 + - Attribute: DW_AT_MIPS_tail_loop_begin + Form: DW_FORM_block2 + - Attribute: DW_AT_MIPS_epilog_begin + Form: DW_FORM_block4 + - Attribute: DW_AT_MIPS_loop_unroll_factor + Form: DW_FORM_data1 + - Attribute: DW_AT_MIPS_software_pipeline_depth + Form: DW_FORM_data2 + - Attribute: DW_AT_MIPS_linkage_name + Form: DW_FORM_data4 + - Attribute: DW_AT_MIPS_stride + Form: DW_FORM_data8 + - Attribute: DW_AT_MIPS_abstract_name + Form: DW_FORM_string + - Attribute: DW_AT_MIPS_clone_origin + Form: DW_FORM_strp + - Attribute: DW_AT_MIPS_has_inlines + Form: DW_FORM_ref_addr + - Attribute: DW_AT_MIPS_stride_byte + Form: DW_FORM_ref1 + - Attribute: DW_AT_MIPS_stride_elem + Form: DW_FORM_ref2 + - Attribute: DW_AT_MIPS_ptr_dopetype + Form: DW_FORM_ref4 + - Attribute: DW_AT_MIPS_allocatable_dopetype + Form: DW_FORM_ref8 + - Attribute: DW_AT_MIPS_assumed_shape_dopetype + Form: DW_FORM_ref_sig8 + - Attribute: DW_AT_MIPS_assumed_size + Form: DW_FORM_ref_udata + - Attribute: 0x2012 + Form: DW_FORM_flag + - Attribute: 0x2013 + Form: DW_FORM_flag + - Attribute: 0x2014 + Form: DW_FORM_flag_present + - Attribute: 0x2015 + Form: DW_FORM_sdata + - Attribute: 0x2017 + Form: DW_FORM_udata + - Attribute: 0x2018 + Form: DW_FORM_GNU_ref_alt + - Attribute: 0x2019 + Form: DW_FORM_sec_offset + - Attribute: 0x201A + Form: DW_FORM_addr + debug_info: + - Length: + TotalLength: 168 + Version: 2 + AbbrOffset: 0 + AddrSize: 8 + Entries: + - AbbrCode: 0x00000001 + Values: + - Value: 0x0123456789ABCDEF + - Value: 0x000000000000000A + BlockData: + - 0x01 + - 0x02 + - 0x03 + - 0x04 + - 0x05 + - 0x06 + - 0x07 + - 0x08 + - 0x09 + - 0x00 + - Value: 0x000000000000000A + BlockData: + - 0x01 + - 0x02 + - 0x03 + - 0x04 + - 0x05 + - 0x06 + - 0x07 + - 0x08 + - 0x09 + - 0x00 + - Value: 0x000000000000000A + BlockData: + - 0x01 + - 0x02 + - 0x03 + - 0x04 + - 0x05 + - 0x06 + - 0x07 + - 0x08 + - 0x09 + - 0x00 + - Value: 0x000000000000000A + BlockData: + - 0x01 + - 0x02 + - 0x03 + - 0x04 + - 0x05 + - 0x06 + - 0x07 + - 0x08 + - 0x09 + - 0x00 + - Value: 0x0000000000000001 + - Value: 0x0000000000002345 + - Value: 0x000000006789ABCD + - Value: 0x0011223344556677 + - Value: 0x0000000000000000 + CStr: Hello + - Value: 0x0000000000000000 + - Value: 0x0000000012345678 + - Value: 0x0000000000000001 + - Value: 0x0000000000002345 + - Value: 0x000000006789ABCD + - Value: 0x0011223344556677 + - Value: 0xAABBCCDDEEFF0011 + - Value: 0xFFFFFFFFFFFFFFFE + - Value: 0x0000000000000001 + - Value: 0x0000000000000000 + - Value: 0x0000000000000001 + - Value: 0x8000000000000000 + - Value: 0xFFFFFFFFFFFFFFFE + - Value: 0x0000000000000001 + - Value: 0x0000000000000002 + - Value: 0x0123456789ABCDEF +... + +#CHECK: debug_info: +#CHECK: - Length: +#CHECK: TotalLength: 168 +#CHECK: Version: 2 +#CHECK: AbbrOffset: 0 +#CHECK: AddrSize: 8 +#CHECK: Entries: +#CHECK: - AbbrCode: 0x00000001 +#CHECK: Values: +#CHECK: - Value: 0x0123456789ABCDEF +#CHECK: - Value: 0x000000000000000A +#CHECK: BlockData: +#CHECK: - 0x01 +#CHECK: - 0x02 +#CHECK: - 0x03 +#CHECK: - 0x04 +#CHECK: - 0x05 +#CHECK: - 0x06 +#CHECK: - 0x07 +#CHECK: - 0x08 +#CHECK: - 0x09 +#CHECK: - 0x00 +#CHECK: - Value: 0x000000000000000A +#CHECK: BlockData: +#CHECK: - 0x01 +#CHECK: - 0x02 +#CHECK: - 0x03 +#CHECK: - 0x04 +#CHECK: - 0x05 +#CHECK: - 0x06 +#CHECK: - 0x07 +#CHECK: - 0x08 +#CHECK: - 0x09 +#CHECK: - 0x00 +#CHECK: - Value: 0x000000000000000A +#CHECK: BlockData: +#CHECK: - 0x01 +#CHECK: - 0x02 +#CHECK: - 0x03 +#CHECK: - 0x04 +#CHECK: - 0x05 +#CHECK: - 0x06 +#CHECK: - 0x07 +#CHECK: - 0x08 +#CHECK: - 0x09 +#CHECK: - 0x00 +#CHECK: - Value: 0x000000000000000A +#CHECK: BlockData: +#CHECK: - 0x01 +#CHECK: - 0x02 +#CHECK: - 0x03 +#CHECK: - 0x04 +#CHECK: - 0x05 +#CHECK: - 0x06 +#CHECK: - 0x07 +#CHECK: - 0x08 +#CHECK: - 0x09 +#CHECK: - 0x00 +#CHECK: - Value: 0x0000000000000001 +#CHECK: - Value: 0x0000000000002345 +#CHECK: - Value: 0x000000006789ABCD +#CHECK: - Value: 0x0011223344556677 +#CHECK: CStr: Hello +#CHECK: - Value: 0x0000000000000000 +#CHECK: - Value: 0x0000000012345678 +#CHECK: - Value: 0x0000000000000001 +#CHECK: - Value: 0x0000000000002345 +#CHECK: - Value: 0x000000006789ABCD +#CHECK: - Value: 0x0011223344556677 +#CHECK: - Value: 0xAABBCCDDEEFF0011 +#CHECK: - Value: 0xFFFFFFFFFFFFFFFE +#CHECK: - Value: 0x0000000000000001 +#CHECK: - Value: 0x0000000000000000 +#CHECK: - Value: 0x0000000000000001 +#CHECK: - Value: 0xFFFFFFFFFFFFFFFE +#CHECK: - Value: 0x0000000000000001 +#CHECK: - Value: 0x0000000000000002 +#CHECK: - Value: 0x0123456789ABCDEF