Fixed winedbg watchpoints.
diff --git a/debugger/break.c b/debugger/break.c index 2a1e4e9..9209713 100644 --- a/debugger/break.c +++ b/debugger/break.c
@@ -553,15 +553,15 @@ */ static int DEBUG_FindTriggeredWatchpoint(LPDWORD oldval) { - int i; int found = -1; +#ifdef __i386__ + int i; /* Method 1 => get triggered watchpoint from context (doesn't work on Linux * 2.2.x) */ for (i = 0; i < next_bp; i++) { -#ifdef __i386__ DWORD val = 0; if (breakpoints[i].refcount && breakpoints[i].enabled && @@ -576,10 +576,9 @@ return i; } } -#endif } - /* Method 1 failed, trying method2 */ + /* Method 1 failed, trying method 2 */ /* Method 2 => check if value has changed among registered watchpoints * this really sucks, but this is how gdb 4.18 works on my linux box @@ -587,7 +586,6 @@ */ for (i = 0; i < next_bp; i++) { -#ifdef __i386__ DWORD val = 0; if (breakpoints[i].refcount && breakpoints[i].enabled && @@ -601,13 +599,13 @@ breakpoints[i].u.w.oldval = val; found = i; /* cannot break, because two watch points may have been triggered on - * the same acces + * the same access * only one will be reported to the user (FIXME ?) */ } } -#endif } +#endif return found; } @@ -667,30 +665,32 @@ */ static BOOL DEBUG_ShallBreak( int bpnum ) { - if ( breakpoints[bpnum].condition != NULL ) - { - DBG_VALUE value = DEBUG_EvalExpr(breakpoints[bpnum].condition); + if ( breakpoints[bpnum].condition != NULL ) + { + DBG_VALUE value = DEBUG_EvalExpr(breakpoints[bpnum].condition); - if ( value.type == NULL ) - { - /* - * Something wrong - unable to evaluate this expression. - */ - DEBUG_Printf(DBG_CHN_MESG, "Unable to evaluate expression "); - DEBUG_DisplayExpr(breakpoints[bpnum].condition); - DEBUG_Printf(DBG_CHN_MESG, "\nTurning off condition\n"); - DEBUG_AddBPCondition(bpnum, NULL); - } - else if( !DEBUG_GetExprValue( &value, NULL) ) - { - return FALSE; - } - } + if ( value.type == NULL ) + { + /* + * Something wrong - unable to evaluate this expression. + */ + DEBUG_Printf(DBG_CHN_MESG, "Unable to evaluate expression "); + DEBUG_DisplayExpr(breakpoints[bpnum].condition); + DEBUG_Printf(DBG_CHN_MESG, "\nTurning off condition\n"); + DEBUG_AddBPCondition(bpnum, NULL); + } + else if( !DEBUG_GetExprValue( &value, NULL) ) + { + return FALSE; + } + } - if ( breakpoints[bpnum].skipcount > 0 && --breakpoints[bpnum].skipcount > 0 ) - return FALSE; + if ( breakpoints[bpnum].skipcount > 0 && --breakpoints[bpnum].skipcount > 0 ) + return FALSE; - return (breakpoints[bpnum].u.b.func) ? (breakpoints[bpnum].u.b.func)() : TRUE; + if ((breakpoints[bpnum].type == DBG_BREAK) && breakpoints[bpnum].u.b.func) + return breakpoints[bpnum].u.b.func(); + return TRUE; } /***********************************************************************