Introduced DBG_VALUE struct to manipulate debugger/debuggee address space.
Added watch (hardware assisted debugging) and whatis (type of expr) commands.
Fixed some issues in local vars handling (stabs parsing & registers optimization).
diff --git a/debugger/stack.c b/debugger/stack.c
index 46a2d1d..07f2a95 100644
--- a/debugger/stack.c
+++ b/debugger/stack.c
@@ -57,23 +57,24 @@
void DEBUG_InfoStack(void)
{
#ifdef __i386__
- DBG_ADDR addr;
-
- addr.type = NULL;
- addr.seg = DEBUG_context.SegSs;
- addr.off = DEBUG_context.Esp;
+ DBG_VALUE value;
+
+ value.type = NULL;
+ value.cookie = DV_TARGET;
+ value.addr.seg = DEBUG_context.SegSs;
+ value.addr.off = DEBUG_context.Esp;
fprintf(stderr,"Stack dump:\n");
- switch (DEBUG_GetSelectorType(addr.seg)) {
+ switch (DEBUG_GetSelectorType(value.addr.seg)) {
case 32: /* 32-bit mode */
- DEBUG_ExamineMemory( &addr, 24, 'x' );
+ DEBUG_ExamineMemory( &value, 24, 'x' );
break;
case 16: /* 16-bit mode */
- addr.off &= 0xffff;
- DEBUG_ExamineMemory( &addr, 24, 'w' );
+ value.addr.off &= 0xffff;
+ DEBUG_ExamineMemory( &value, 24, 'w' );
break;
default:
- fprintf(stderr, "Bad segment (%ld)\n", addr.seg);
+ fprintf(stderr, "Bad segment (%ld)\n", value.addr.seg);
}
fprintf(stderr,"\n");
#endif
@@ -317,7 +318,7 @@
if (noisy) fprintf( stderr, "Bad stack frame %p\n", (STACK32FRAME*)next_switch );
return;
}
- code.type = NULL;
+
code.seg = 0;
code.off = frame32.retaddr;
@@ -352,7 +353,6 @@
return;
}
- code.type = NULL;
code.seg = frame16.cs;
code.off = frame16.ip;