Eric Pouech : dbghelp: Enhance support for constant values in dwarf debug information.

Alexandre Julliard julliard at winehq.org
Mon Oct 5 09:54:29 CDT 2009


Module: wine
Branch: master
Commit: 6a1b2a9ca55374e9dc117dcc8dc3847aac2c471e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6a1b2a9ca55374e9dc117dcc8dc3847aac2c471e

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Sat Oct  3 13:15:43 2009 +0200

dbghelp: Enhance support for constant values in dwarf debug information.

---

 dlls/dbghelp/dwarf.c  |   14 +++++++++++++-
 dlls/dbghelp/symbol.c |    1 +
 2 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index 7843e67..e5617c3 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -1393,12 +1393,24 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm,
             v.n1.n2.n3.byref = pool_strdup(&subpgm->ctx->module->pool, value.u.string);
             break;
 
-        case DW_FORM_data8:
         case DW_FORM_block:
         case DW_FORM_block1:
         case DW_FORM_block2:
         case DW_FORM_block4:
+            v.n1.n2.vt = VT_I4;
+            switch (value.u.block.size)
+            {
+            case 1:     v.n1.n2.n3.lVal = *(BYTE*)value.u.block.ptr;    break;
+            case 2:     v.n1.n2.n3.lVal = *(USHORT*)value.u.block.ptr;  break;
+            case 4:     v.n1.n2.n3.lVal = *(DWORD*)value.u.block.ptr;   break;
+            default:
+                v.n1.n2.vt = VT_I1 | VT_BYREF;
+                v.n1.n2.n3.byref = pool_alloc(&subpgm->ctx->module->pool, value.u.block.size);
+                memcpy(v.n1.n2.n3.byref, value.u.block.ptr, value.u.block.size);
+            }
+            break;
 
+        case DW_FORM_data8:
         default:
             FIXME("Unsupported form for const value %s (%lx)\n",
                   name.u.string, value.form);
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index 34d00b2..c322a62 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -703,6 +703,7 @@ static void symt_fill_sym_info(const struct module_pair* pair,
                 case VT_UI2: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.uiVal; break;
                 case VT_UI1: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.bVal; break;
                 case VT_I1 | VT_BYREF: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.byref; break;
+                case VT_EMPTY: sym_info->Value = 0; break;
                 default:
                     FIXME("Unsupported variant type (%u)\n", data->u.value.n1.n2.vt);
                     sym_info->Value = 0;




More information about the wine-cvs mailing list