From 804e6a3d3a2e0f93339c9cdca0768a4b3af6f28f Mon Sep 17 00:00:00 2001 From: Rainer Schuetze Date: Tue, 17 Feb 2015 08:27:59 +0100 Subject: * DWARF: fixed issues with DW_FORM_ref_addr, DW_AT_upper_bound and DW_AT_lower_bound * DWARF: translate __int128 to CV code 0x14, just a wild guesss --- CHANGES | 6 +- VERSION | 2 +- src/cv2pdb_vs12.sln | 192 ++++++++++++++++++++++++++-------------------------- src/dwarf2pdb.cpp | 1 + src/readDwarf.cpp | 22 ++++-- 5 files changed, 120 insertions(+), 103 deletions(-) diff --git a/CHANGES b/CHANGES index d922864..3f700f3 100644 --- a/CHANGES +++ b/CHANGES @@ -209,4 +209,8 @@ unreleased Version 0.22 2014-12-19 Version 0.33 * DWARF: revamped location expression evaluator by Vadim Chugunov - * \ No newline at end of file + +2015-02-17 Version 0.34 + + * DWARF: fixed issues with DW_FORM_ref_addr, DW_AT_upper_bound and DW_AT_lower_bound + * DWARF: translate __int128 to CV code 0x14, just a wild guesss diff --git a/VERSION b/VERSION index 444d19f..41cf16f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -VERSION = 0.33 +VERSION = 0.34 diff --git a/src/cv2pdb_vs12.sln b/src/cv2pdb_vs12.sln index 059df1d..240fcee 100644 --- a/src/cv2pdb_vs12.sln +++ b/src/cv2pdb_vs12.sln @@ -1,96 +1,96 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7F4A9B6A-05A2-45D0-AFC3-3754B7FB77B9}" - ProjectSection(SolutionItems) = preProject - ..\autoexp.expand = ..\autoexp.expand - ..\autoexp.visualizer = ..\autoexp.visualizer - ..\CHANGES = ..\CHANGES - ..\FEATURES = ..\FEATURES - ..\INSTALL = ..\INSTALL - ..\LICENSE = ..\LICENSE - ..\Makefile = ..\Makefile - ..\README = ..\README - ..\TODO = ..\TODO - ..\VERSION = ..\VERSION - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cv2pdb", "cv2pdb.vcxproj", "{5E2BD27D-446A-4C99-9829-135F7C000D90}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dviewhelper", "dviewhelper\dviewhelper.vcxproj", "{E4424774-A7A0-4502-8626-2723904D70EA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cvtest", "..\test\cvtest.vcxproj", "{CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}" -EndProject -Project("{002A2DE9-8BB6-484D-9802-7E4AD4084715}") = "test", "..\test\test.visualdproj", "{370E7494-D0CB-450F-B74A-4CEEDB19FBAE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug GDC|Win32 = Debug GDC|Win32 - Debug GDC|x64 = Debug GDC|x64 - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - Win32 COFF|Win32 = Win32 COFF|Win32 - Win32 COFF|x64 = Win32 COFF|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug GDC|Win32.ActiveCfg = Debug|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug GDC|Win32.Build.0 = Debug|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug GDC|x64.ActiveCfg = Debug|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug|Win32.ActiveCfg = Debug|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug|Win32.Build.0 = Debug|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug|x64.ActiveCfg = Debug|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Release|Win32.ActiveCfg = Release|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Release|Win32.Build.0 = Release|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Release|x64.ActiveCfg = Release|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Win32 COFF|Win32.ActiveCfg = Debug|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Win32 COFF|Win32.Build.0 = Debug|Win32 - {5E2BD27D-446A-4C99-9829-135F7C000D90}.Win32 COFF|x64.ActiveCfg = Release|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Debug GDC|Win32.ActiveCfg = Debug|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Debug GDC|Win32.Build.0 = Debug|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Debug GDC|x64.ActiveCfg = Debug|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Debug|Win32.ActiveCfg = Debug|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Debug|Win32.Build.0 = Debug|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Debug|x64.ActiveCfg = Debug|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Release|Win32.ActiveCfg = Release|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Release|Win32.Build.0 = Release|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Release|x64.ActiveCfg = Release|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Win32 COFF|Win32.ActiveCfg = Debug|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Win32 COFF|Win32.Build.0 = Debug|Win32 - {E4424774-A7A0-4502-8626-2723904D70EA}.Win32 COFF|x64.ActiveCfg = Release|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug GDC|Win32.ActiveCfg = Debug|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug GDC|Win32.Build.0 = Debug|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug GDC|x64.ActiveCfg = Debug|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug|Win32.ActiveCfg = Debug|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug|Win32.Build.0 = Debug|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug|x64.ActiveCfg = Debug|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Release|Win32.ActiveCfg = Release|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Release|Win32.Build.0 = Release|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Release|x64.ActiveCfg = Release|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Win32 COFF|Win32.ActiveCfg = Debug|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Win32 COFF|Win32.Build.0 = Debug|Win32 - {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Win32 COFF|x64.ActiveCfg = Release|Win32 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug GDC|Win32.ActiveCfg = Debug GDC|Win32 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug GDC|Win32.Build.0 = Debug GDC|Win32 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug GDC|x64.ActiveCfg = Debug GDC|x64 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug GDC|x64.Build.0 = Debug GDC|x64 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug|Win32.ActiveCfg = Debug|Win32 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug|Win32.Build.0 = Debug|Win32 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug|x64.ActiveCfg = Debug GDC|x64 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug|x64.Build.0 = Debug GDC|x64 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Release|Win32.ActiveCfg = Release|Win32 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Release|Win32.Build.0 = Release|Win32 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Release|x64.ActiveCfg = Release|x64 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Release|x64.Build.0 = Release|x64 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Win32 COFF|Win32.ActiveCfg = Win32 COFF|Win32 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Win32 COFF|Win32.Build.0 = Win32 COFF|Win32 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Win32 COFF|x64.ActiveCfg = Win32 COFF|x64 - {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Win32 COFF|x64.Build.0 = Win32 COFF|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7F4A9B6A-05A2-45D0-AFC3-3754B7FB77B9}" + ProjectSection(SolutionItems) = preProject + ..\autoexp.expand = ..\autoexp.expand + ..\autoexp.visualizer = ..\autoexp.visualizer + ..\CHANGES = ..\CHANGES + ..\FEATURES = ..\FEATURES + ..\INSTALL = ..\INSTALL + ..\LICENSE = ..\LICENSE + ..\Makefile = ..\Makefile + ..\README = ..\README + ..\TODO = ..\TODO + ..\VERSION = ..\VERSION + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cv2pdb", "cv2pdb.vcxproj", "{5E2BD27D-446A-4C99-9829-135F7C000D90}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dviewhelper", "dviewhelper\dviewhelper.vcxproj", "{E4424774-A7A0-4502-8626-2723904D70EA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cvtest", "..\test\cvtest.vcxproj", "{CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}" +EndProject +Project("{002A2DE9-8BB6-484D-9802-7E4AD4084715}") = "test", "..\test\test.visualdproj", "{370E7494-D0CB-450F-B74A-4CEEDB19FBAE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug GDC|Win32 = Debug GDC|Win32 + Debug GDC|x64 = Debug GDC|x64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + Win32 COFF|Win32 = Win32 COFF|Win32 + Win32 COFF|x64 = Win32 COFF|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug GDC|Win32.ActiveCfg = Debug|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug GDC|Win32.Build.0 = Debug|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug GDC|x64.ActiveCfg = Debug|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug|Win32.ActiveCfg = Debug|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug|Win32.Build.0 = Debug|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Debug|x64.ActiveCfg = Debug|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Release|Win32.ActiveCfg = Release|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Release|Win32.Build.0 = Release|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Release|x64.ActiveCfg = Release|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Win32 COFF|Win32.ActiveCfg = Debug|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Win32 COFF|Win32.Build.0 = Debug|Win32 + {5E2BD27D-446A-4C99-9829-135F7C000D90}.Win32 COFF|x64.ActiveCfg = Release|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Debug GDC|Win32.ActiveCfg = Debug|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Debug GDC|Win32.Build.0 = Debug|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Debug GDC|x64.ActiveCfg = Debug|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Debug|Win32.Build.0 = Debug|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Debug|x64.ActiveCfg = Debug|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Release|Win32.ActiveCfg = Release|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Release|Win32.Build.0 = Release|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Release|x64.ActiveCfg = Release|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Win32 COFF|Win32.ActiveCfg = Debug|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Win32 COFF|Win32.Build.0 = Debug|Win32 + {E4424774-A7A0-4502-8626-2723904D70EA}.Win32 COFF|x64.ActiveCfg = Release|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug GDC|Win32.ActiveCfg = Debug|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug GDC|Win32.Build.0 = Debug|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug GDC|x64.ActiveCfg = Debug|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug|Win32.ActiveCfg = Debug|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug|Win32.Build.0 = Debug|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Debug|x64.ActiveCfg = Debug|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Release|Win32.ActiveCfg = Release|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Release|Win32.Build.0 = Release|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Release|x64.ActiveCfg = Release|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Win32 COFF|Win32.ActiveCfg = Debug|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Win32 COFF|Win32.Build.0 = Debug|Win32 + {CCC0643D-7D3F-4D5E-AE0E-C871776E86AF}.Win32 COFF|x64.ActiveCfg = Release|Win32 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug GDC|Win32.ActiveCfg = Debug GDC|Win32 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug GDC|Win32.Build.0 = Debug GDC|Win32 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug GDC|x64.ActiveCfg = Debug GDC|x64 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug GDC|x64.Build.0 = Debug GDC|x64 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug|Win32.ActiveCfg = Debug|Win32 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug|Win32.Build.0 = Debug|Win32 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug|x64.ActiveCfg = Debug|x64 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Debug|x64.Build.0 = Debug|x64 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Release|Win32.ActiveCfg = Release|Win32 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Release|Win32.Build.0 = Release|Win32 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Release|x64.ActiveCfg = Release|x64 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Release|x64.Build.0 = Release|x64 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Win32 COFF|Win32.ActiveCfg = Win32 COFF|Win32 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Win32 COFF|Win32.Build.0 = Win32 COFF|Win32 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Win32 COFF|x64.ActiveCfg = Win32 COFF|x64 + {370E7494-D0CB-450F-B74A-4CEEDB19FBAE}.Win32 COFF|x64.Build.0 = Win32 COFF|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/dwarf2pdb.cpp b/src/dwarf2pdb.cpp index 28365ee..80d64a4 100644 --- a/src/dwarf2pdb.cpp +++ b/src/dwarf2pdb.cpp @@ -539,6 +539,7 @@ int CV2PDB::addDWARFBasicType(const char*name, int encoding, int byte_size) case 2: size = 1; break; case 4: size = 2; break; case 8: size = 3; break; + case 16: size = 4; break; // __int128? experimental, type exists with GCC for Win64 default: setError("unsupported integer type size"); } diff --git a/src/readDwarf.cpp b/src/readDwarf.cpp index 42af041..d7a9dc0 100644 --- a/src/readDwarf.cpp +++ b/src/readDwarf.cpp @@ -426,7 +426,7 @@ bool DIECursor::readNext(DWARF_InfoData& id, bool stopAtNull) case DW_FORM_sdata: a.type = Const; a.cons = SLEB128(ptr); break; case DW_FORM_udata: a.type = Const; a.cons = LEB128(ptr); break; case DW_FORM_string: a.type = String; a.string = (const char*)ptr; ptr += strlen(a.string) + 1; break; - case DW_FORM_strp: a.type = String; a.string = (const char*)(img->debug_str + RDsize(ptr, cu->address_size)); break; + case DW_FORM_strp: a.type = String; a.string = (const char*)(img->debug_str + RDsize(ptr, cu->isDWARF64() ? 8 : 4)); break; case DW_FORM_flag: a.type = Flag; a.flag = (*ptr++ != 0); break; case DW_FORM_flag_present: a.type = Flag; a.flag = true; break; case DW_FORM_ref1: a.type = Ref; a.ref = (byte*)cu + *ptr++; break; @@ -444,7 +444,11 @@ bool DIECursor::readNext(DWARF_InfoData& id, bool stopAtNull) switch (attr) { - case DW_AT_byte_size: assert(a.type == Const); id.byte_size = a.cons; break; + case DW_AT_byte_size: + assert(a.type == Const || a.type == Ref || a.type == ExprLoc); + if (a.type == Const) // TODO: other types not supported yet + id.byte_size = a.cons; + break; case DW_AT_sibling: assert(a.type == Ref); id.sibling = a.ref; break; case DW_AT_encoding: assert(a.type == Const); id.encoding = a.cons; break; case DW_AT_name: assert(a.type == String); id.name = a.string; break; @@ -458,13 +462,21 @@ bool DIECursor::readNext(DWARF_InfoData& id, bool stopAtNull) id.pchi = id.pclo + a.cons; else assert(false); - break; + break; case DW_AT_ranges: assert(a.type == SecOffset); id.ranges = a.sec_offset; break; case DW_AT_type: assert(a.type == Ref); id.type = a.ref; break; case DW_AT_inline: assert(a.type == Const); id.inlined = a.cons; break; case DW_AT_external: assert(a.type == Flag); id.external = a.flag; break; - case DW_AT_upper_bound: assert(a.type == Const); id.upper_bound = a.cons; break; - case DW_AT_lower_bound: assert(a.type == Const); id.lower_bound = a.cons; break; + case DW_AT_upper_bound: + assert(a.type == Const || a.type == Ref || a.type == ExprLoc); + if (a.type == Const) // TODO: other types not supported yet + id.upper_bound = a.cons; + break; + case DW_AT_lower_bound: + assert(a.type == Const || a.type == Ref || a.type == ExprLoc); + if (a.type == Const) // TODO: other types not supported yet + id.lower_bound = a.cons; + break; case DW_AT_containing_type: assert(a.type == Ref); id.containing_type = a.ref; break; case DW_AT_specification: assert(a.type == Ref); id.specification = a.ref; break; case DW_AT_data_member_location: id.member_location = a; break; -- cgit v0.12