[PATCH 05/13] [DbgHelp]: MSC types

Eric Pouech eric.pouech at wanadoo.fr
Sat Mar 18 06:32:44 CST 2006


- enforce the type records that can be accessed by symbols (these are
  anyway the high level ones)

A+
---

 dlls/dbghelp/msc.c |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c
index 559d325..8e269c7 100644
--- a/dlls/dbghelp/msc.c
+++ b/dlls/dbghelp/msc.c
@@ -752,6 +752,23 @@ static int codeview_parse_type_table(str
         retv = TRUE;
         type = (const union codeview_type*)(table + offset[curr_type - 0x1000]);
 
+        /* type records we're interested in are the ones referenced by symbols
+         * The known ranges are (X mark the ones we want):
+         *   X  0000-0016       for V1 types
+         *      0200-020c       for V1 types referenced by other types
+         *      0400-040f       for V1 types (complex lists & sets)
+         *   X  1000-100f       for V2 types
+         *      1200-120c       for V2 types referenced by other types
+         *      1400-140f       for V1 types (complex lists & sets)
+         *   X  1500-150d       for V3 types
+         *      8000-8010       for numeric leafes
+         */
+        if ((type->generic.id & 0x8600) &&
+            type->generic.id != LF_BITFIELD_V1 && /* still some cases to fix */
+            type->generic.id != LF_BITFIELD_V2 &&
+            type->generic.id != LF_FIELDLIST_V1 &&
+            type->generic.id != LF_FIELDLIST_V2)
+            continue;
         switch (type->generic.id)
         {
         case LF_MODIFIER_V1:
@@ -943,15 +960,6 @@ static int codeview_parse_type_table(str
                                                type->mfunction_v2.call);
             break;
 
-        case LF_ARGLIST_V1:
-        case LF_ARGLIST_V2:
-            {
-                static int once;
-                if (!once++) 
-                    FIXME("Not adding parameters' types to function signature\n");
-            }
-            break;
-
         default:
             FIXME("Unsupported type-id leaf %x\n", type->generic.id);
             dump(type, 2 + type->generic.len);





More information about the wine-patches mailing list