Index: breakpoint.c =================================================================== RCS file: /cvs/src/src/gdb/breakpoint.c,v retrieving revision 1.57 diff -u -p -r1.57 breakpoint.c --- breakpoint.c 2001/11/11 16:39:59 1.57 +++ breakpoint.c 2002/01/11 11:34:08 @@ -234,6 +234,19 @@ static int executing_breakpoint_commands B ? (TMP=B->next, 1): 0; \ B = TMP) +#ifndef REMOVE_HARDWARE_BREAKPOINT_AT_EXIT +#define REMOVE_HARDWARE_BREAKPOINT_AT_EXIT 0 +#endif + +#ifndef REMOVE_HARDWARE_WATCHPOINT_AT_EXIT +#define REMOVE_HARDWARE_WATCHPOINT_AT_EXIT 0 +#endif + + +#ifndef HARDWARE_REGISTERS_RESET +#define HARDWARE_REGISTERS_RESET {} +#endif + /* True if SHIFT_INST_REGS defined, false otherwise. */ int must_shift_inst_regs = @@ -1440,7 +1453,17 @@ breakpoint_init_inferior (enum inf_conte ALL_BREAKPOINTS_SAFE (b, temp) { - b->inserted = 0; + if ((((REMOVE_HARDWARE_BREAKPOINT_AT_EXIT) + && b->type == bp_hardware_breakpoint) + ||((REMOVE_HARDWARE_WATCHPOINT_AT_EXIT) + && (b->type == bp_hardware_watchpoint + || b->type == bp_access_watchpoint + || b->type == bp_read_watchpoint))) + && b->inserted + && context == inf_exited) + remove_breakpoint (b, mark_uninserted); + + b->inserted = 0; switch (b->type) { @@ -1487,6 +1510,8 @@ breakpoint_init_inferior (enum inf_conte warning ("You must reinsert them explicitly."); warning_needed = 0; } + if (context == inf_exited) + HARDWARE_REGISTER_RESET; } /* breakpoint_here_p (PC) returns non-zero if an enabled breakpoint Index: go32-nat.c =================================================================== RCS file: /cvs/src/src/gdb/go32-nat.c,v retrieving revision 1.26 diff -u -p -r1.26 go32-nat.c --- go32-nat.c 2001/12/06 08:15:37 1.26 +++ go32-nat.c 2002/01/11 11:34:08 @@ -670,7 +670,7 @@ go32_mourn_inferior (void) be nice if GDB itself would take care to remove all breakpoints at all times, but it doesn't, probably under an assumption that the OS cleans up when the debuggee exits. */ - i386_cleanup_dregs (); + // i386_cleanup_dregs (); go32_kill_inferior (); generic_mourn_inferior (); } Index: config/i386/nm-i386.h =================================================================== RCS file: /cvs/src/src/gdb/config/i386/nm-i386.h,v retrieving revision 1.2 diff -u -p -r1.2 nm-i386.h --- nm-i386.h 2001/03/23 16:17:45 1.2 +++ nm-i386.h 2002/01/11 11:34:08 @@ -115,6 +115,12 @@ extern int i386_remove_hw_breakpoint (C #define DECR_PC_AFTER_HW_BREAK 0 +#define REMOVE_HARDWARE_WATCHPOINT_AT_EXIT 1 + +#define REMOVE_HARDWARE_BREAKPOINT_AT_EXIT 1 + +#define HARDWARE_REGISTERS_RESET i386_cleanup_dregs () + #endif /* I386_USE_GENERIC_WATCHPOINTS */ #endif /* NM_I386_H */