David Heidelberg : dbghelp: Implement DW_TAG_unspecified_type.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Feb 12 10:13:41 CST 2015


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

Author: David Heidelberg <david at ixit.cz>
Date:   Tue Feb 10 23:15:56 2015 +0100

dbghelp: Implement DW_TAG_unspecified_type.

---

 dlls/dbghelp/dwarf.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index f1bd6cb..c54bfd3 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -1337,6 +1337,31 @@ static struct symt* dwarf2_parse_volatile_type(dwarf2_parse_context_t* ctx,
     return ref_type;
 }
 
+static struct symt* dwarf2_parse_unspecified_type(dwarf2_parse_context_t* ctx,
+                                           dwarf2_debug_info_t* di)
+{
+    struct attribute name;
+    struct attribute size;
+    struct symt_basic *basic;
+
+    TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di));
+
+    if (di->symt) return di->symt;
+
+    if (!dwarf2_find_attribute(ctx, di, DW_AT_name, &name))
+        name.u.string = "void";
+    size.u.uvalue = sizeof(void *);
+
+    basic = symt_new_basic(ctx->module, btVoid, name.u.string, size.u.uvalue);
+    di->symt = &basic->symt;
+
+    if (!ctx->symt_cache[sc_void])
+        ctx->symt_cache[sc_void] = di->symt;
+
+    if (dwarf2_get_di_children(ctx, di)) FIXME("Unsupported children\n");
+    return di->symt;
+}
+
 static struct symt* dwarf2_parse_reference_type(dwarf2_parse_context_t* ctx,
                                                 dwarf2_debug_info_t* di)
 {
@@ -2084,6 +2109,9 @@ static void dwarf2_load_one_entry(dwarf2_parse_context_t* ctx,
     case DW_TAG_volatile_type:
         dwarf2_parse_volatile_type(ctx, di);
         break;
+    case DW_TAG_unspecified_type:
+        dwarf2_parse_unspecified_type(ctx, di);
+        break;
     case DW_TAG_reference_type:
         dwarf2_parse_reference_type(ctx, di);
         break;




More information about the wine-cvs mailing list