No longer directly accessing debuggee memory.
Execution context (mode, steps...) are now linked to a thread.
Removed some X11 crst hacks.
Rewrote info/walk commands.
Removed direct debugger invocation code (and moved the rest to the new
winedbg.c file).
diff --git a/debugger/hash.c b/debugger/hash.c
index 8d79102..35aaf6b 100644
--- a/debugger/hash.c
+++ b/debugger/hash.c
@@ -14,7 +14,6 @@
#include "neexe.h"
#include "module.h"
#include "process.h"
-#include "selectors.h"
#include "debugger.h"
#include "toolhelp.h"
@@ -335,7 +334,7 @@
* Get the address of a named symbol.
*/
BOOL DEBUG_GetSymbolValue( const char * name, const int lineno,
- DBG_ADDR *addr, int bp_flag )
+ DBG_ADDR *addr, int bp_flag )
{
char buffer[256];
struct name_hash *nh;
@@ -450,7 +449,7 @@
if (!nh) return FALSE;
nh->addr = *addr;
nh->flags &= SYM_INVALID;
- DBG_FIX_ADDR_SEG( &nh->addr, DS_reg(&DEBUG_context) );
+ DEBUG_FixAddress( &nh->addr, DEBUG_context.SegDs );
return TRUE;
}
@@ -477,6 +476,7 @@
char * lineinfo, *sourcefile;
int i;
char linebuff[16];
+ unsigned val;
if( rtn != NULL )
{
@@ -637,9 +637,9 @@
{
strcat(arglist, ", ");
}
+ DEBUG_READ_MEM_VERBOSE(ptr, &val, sizeof(val));
+ sprintf(argtmp, "%s=0x%x", nearest->local_vars[i].name, val);
- sprintf(argtmp, "%s=0x%x", nearest->local_vars[i].name,
- *ptr);
strcat(arglist, argtmp);
}
if( arglist[0] == '(' )
@@ -1367,13 +1367,26 @@
/* FIXME: what if regno == 0 ($eax) */
if( curr_func->local_vars[i].regno != 0 )
{
+#if 0
+ /* FIXME: NEWDBG NIY */
+ /* this is a hack: addr points to the current processor context
+ * (as defined while entering the debugger), and uses a pointer
+ * to main memory (thus sharing the process address space *AND*
+ * the debugger address space, which is not good with address
+ * space separation in place)
+ */
/*
* Register variable. Point to DEBUG_context field.
*/
addr->seg = 0;
- addr->off = ((DWORD)&DEBUG_context) + reg_ofs[curr_func->local_vars[i].regno];
+ addr->off = ((DWORD)DEBUG_context) + reg_ofs[curr_func->local_vars[i].regno];
addr->type = curr_func->local_vars[i].type;
-
+#else
+ fprintf(stderr, "No longer supported: value of register variable\n");
+ addr->seg = 0;
+ addr->off = 0;
+ addr->type = NULL;
+#endif
return TRUE;
}
@@ -1395,7 +1408,7 @@
unsigned int eip;
int i;
unsigned int * ptr;
- int rtn = FALSE;
+ unsigned int val;
if( DEBUG_GetCurrentFrame(&curr_func, &eip, &ebp) == FALSE )
{
@@ -1433,16 +1446,14 @@
}
else
{
- ptr = (unsigned int *) (ebp + curr_func->local_vars[i].offset);
+ DEBUG_READ_MEM_VERBOSE((void*)(ebp + curr_func->local_vars[i].offset),
+ &val, sizeof(val));
fprintf(stderr, "%s:%s == 0x%8.8x\n",
- curr_func->name, curr_func->local_vars[i].name,
- *ptr);
+ curr_func->name, curr_func->local_vars[i].name, val);
}
}
- rtn = TRUE;
-
- return (rtn);
+ return TRUE;
}
int