[PATCH 4/4] [WineDbg]: added support for constant values passed by
dbghelp
Eric Pouech
eric.pouech at wanadoo.fr
Tue Dec 5 15:13:33 CST 2006
A+
---
programs/winedbg/symbol.c | 25 ++++++++++++++++++++++++-
1 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/programs/winedbg/symbol.c b/programs/winedbg/symbol.c
index 55e35ee..f714409 100644
--- a/programs/winedbg/symbol.c
+++ b/programs/winedbg/symbol.c
@@ -87,6 +87,29 @@ static BOOL fill_sym_lvalue(const SYMBOL
lvalue->cookie = DLV_TARGET;
lvalue->addr.Offset = (ULONG)((ULONG64)*pval + sym->Address);
}
+ else if (sym->Flags & SYMFLAG_VALUEPRESENT)
+ {
+ struct dbg_type type;
+ VARIANT v;
+ DWORD* pdw;
+
+ type.module = sym->ModBase;
+ type.id = sym->info;
+
+ /* FIXME: this won't work for pointers, as we always for the
+ * dereference to be in debuggee address space while here
+ * it's in debugger address space
+ */
+ if (!types_get_info(&type, TI_GET_VALUE, &v) || (v.n1.n2.vt & VT_BYREF))
+ {
+ snprintf(buffer, sz, "Couldn't dereference pointer for const value");
+ return FALSE;
+ }
+ pdw = (DWORD*)lexeme_alloc_size(sizeof(*pdw));
+ lvalue->cookie = DLV_HOST;
+ lvalue->addr.Offset = (ULONG)(DWORD_PTR)pdw;
+ *pdw = sym->Value;
+ }
else if (sym->Flags & SYMFLAG_LOCAL)
{
lvalue->cookie = DLV_TARGET;
@@ -125,7 +148,7 @@ static BOOL CALLBACK sgv_cb(SYMBOL_INFO*
{
struct sgv_data* sgv = (struct sgv_data*)ctx;
unsigned insp;
- char tmp[32];
+ char tmp[64];
if (sym->Flags & SYMFLAG_THUNK)
{
More information about the wine-patches
mailing list