wine/ programs/winedbg/types.c programs/winedb ...

Alexandre Julliard julliard at wine.codeweavers.com
Thu Nov 17 06:53:42 CST 2005


ChangeSet ID:	21317
CVSROOT:	/opt/cvs-commit
Module name:	wine
Changes by:	julliard at winehq.org	2005/11/17 06:53:41

Modified files:
	programs/winedbg: types.c dbg.y 
	dlls/dbghelp   : type.c dbghelp_private.h dbghelp.c 

Log message:
	Eric Pouech <eric.pouech at wanadoo.fr>
	Dbghelp describes the types of function arguments with a specific
	symbol-type (symt) which links both to arguments' type and to function
	prototype
	- added this new type to dbghelp
	- implemented its use in winedbg

Patch: http://cvs.winehq.org/patch.py?id=21317

Old revision  New revision  Changes     Path
 1.15          1.16          +1 -0       wine/programs/winedbg/types.c
 1.29          1.30          +1 -1       wine/programs/winedbg/dbg.y
 1.13          1.14          +16 -4      wine/dlls/dbghelp/type.c
 1.17          1.18          +7 -0       wine/dlls/dbghelp/dbghelp_private.h
 1.12          1.13          +0 -2       wine/dlls/dbghelp/dbghelp.c

Index: wine/programs/winedbg/types.c
diff -u -p wine/programs/winedbg/types.c:1.15 wine/programs/winedbg/types.c:1.16
--- wine/programs/winedbg/types.c:1.15	17 Nov 2005 12:53:41 -0000
+++ wine/programs/winedbg/types.c	17 Nov 2005 12:53:41 -0000
@@ -627,6 +627,7 @@ int types_print_type(const struct dbg_ty
                     for (i = 0; i < min(fcp->Count, count); i++)
                     {
                         subtype.id = fcp->ChildId[i];
+                        types_get_info(&subtype, TI_GET_TYPE, &subtype.id);
                         types_print_type(&subtype, FALSE);
                         if (i < min(fcp->Count, count) - 1 || count > 256) dbg_printf(", ");
                     }
Index: wine/programs/winedbg/dbg.y
diff -u -p wine/programs/winedbg/dbg.y:1.29 wine/programs/winedbg/dbg.y:1.30
--- wine/programs/winedbg/dbg.y:1.29	17 Nov 2005 12:53:41 -0000
+++ wine/programs/winedbg/dbg.y	17 Nov 2005 12:53:41 -0000
@@ -136,7 +136,7 @@ command:
     | tSOURCE pathname          { parser($2); }
     | tSYMBOLFILE pathname     	{ symbol_read_symtable($2, 0); }
     | tSYMBOLFILE pathname expr_rvalue { symbol_read_symtable($2, $3); }
-    | tWHATIS expr_lvalue       { types_print_type(&$2.type, FALSE); dbg_printf("\n"); }
+    | tWHATIS expr_lvalue       { dbg_printf("type = "); types_print_type(&$2.type, FALSE); dbg_printf("\n"); }
     | tATTACH tNUM     		{ dbg_attach_debuggee($2, FALSE, TRUE); }
     | tDETACH                   { dbg_detach_debuggee(); }
     | tMINIDUMP pathname        { minidump_write($2, (dbg_curr_thread && dbg_curr_thread->in_exception) ? &dbg_curr_thread->excpt_record : NULL);}
Index: wine/dlls/dbghelp/type.c
diff -u -p wine/dlls/dbghelp/type.c:1.13 wine/dlls/dbghelp/type.c:1.14
--- wine/dlls/dbghelp/type.c:1.13	17 Nov 2005 12:53:41 -0000
+++ wine/dlls/dbghelp/type.c	17 Nov 2005 12:53:41 -0000
@@ -316,12 +316,18 @@ BOOL symt_add_function_signature_paramet
                                            struct symt_function_signature* sig_type,
                                            struct symt* param)
 {
-    struct symt**       p;
+    struct symt**                       p;
+    struct symt_function_arg_type*      arg;
 
     assert(sig_type->symt.tag == SymTagFunctionType);
+    arg = pool_alloc(&module->pool, sizeof(*arg));
+    if (!arg) return FALSE;
+    arg->symt.tag = SymTagFunctionArgType;
+    arg->arg_type = param;
+    arg->container = &sig_type->symt;
     p = vector_add(&sig_type->vchildren, &module->pool);
-    if (!p) return FALSE; /* FIXME we leak e */
-    *p = param;
+    if (!p) return FALSE; /* FIXME we leak arg */
+    *p = &arg->symt;
 
     return TRUE;
 }
@@ -620,6 +626,9 @@ BOOL symt_get_info(const struct symt* ty
         case SymTagThunk:
             X(DWORD) = (DWORD)((const struct symt_thunk*)type)->container;
             break;
+        case SymTagFunctionArgType:
+            X(DWORD) = (DWORD)((const struct symt_function_arg_type*)type)->container;
+            break;
         default:
             FIXME("Unsupported sym-tag %s for get-lexical-parent\n", 
                   symt_get_tag_str(type->tag));
@@ -702,7 +711,10 @@ BOOL symt_get_info(const struct symt* ty
         case SymTagFunction:
             X(DWORD) = (DWORD)((const struct symt_function*)type)->type;
             break;
-            /* FIXME: should also work for enums and FunctionArgType */
+            /* FIXME: should also work for enums */
+        case SymTagFunctionArgType:
+            X(DWORD) = (DWORD)((const struct symt_function_arg_type*)type)->arg_type;
+            break;
         default:
             FIXME("Unsupported sym-tag %s for get-type\n", 
                   symt_get_tag_str(type->tag));
Index: wine/dlls/dbghelp/dbghelp_private.h
diff -u -p wine/dlls/dbghelp/dbghelp_private.h:1.17 wine/dlls/dbghelp/dbghelp_private.h:1.18
--- wine/dlls/dbghelp/dbghelp_private.h:1.17	17 Nov 2005 12:53:41 -0000
+++ wine/dlls/dbghelp/dbghelp_private.h	17 Nov 2005 12:53:41 -0000
@@ -222,6 +222,13 @@ struct symt_function_signature
     struct vector               vchildren;
 };
 
+struct symt_function_arg_type
+{
+    struct symt                 symt;
+    struct symt*                arg_type;
+    struct symt*                container;
+};
+
 struct symt_pointer
 {
     struct symt                 symt;
Index: wine/dlls/dbghelp/dbghelp.c
diff -u -p wine/dlls/dbghelp/dbghelp.c:1.12 wine/dlls/dbghelp/dbghelp.c:1.13
--- wine/dlls/dbghelp/dbghelp.c:1.12	17 Nov 2005 12:53:41 -0000
+++ wine/dlls/dbghelp/dbghelp.c	17 Nov 2005 12:53:41 -0000
@@ -30,8 +30,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbghelp);
 /* TODO
  *  - support for symbols' types is still partly missing
  *      + C++ support
- *      + funcargtype:s are (partly) wrong: they should be a specific struct (like
- *        typedef) pointing to the actual type (and not a direct access)
  *      + we should store the underlying type for an enum in the symt_enum struct
  *      + for enums, we store the names & values (associated to the enum type), 
  *        but those values are not directly usable from a debugger (that's why, I



More information about the wine-cvs mailing list