* breakpoint.c (insert_catchpoint): New function.

(insert_breakpoints): Use catch_exceptions to call
	insert_catchpoint.  Disable catchpoints if they fail to insert.
This commit is contained in:
Daniel Jacobowitz 2003-06-17 19:17:59 +00:00
parent 29239a8f68
commit 687595f963
2 changed files with 41 additions and 23 deletions

View File

@ -1,3 +1,9 @@
2003-06-17 Daniel Jacobowitz <drow@mvista.com>
* breakpoint.c (insert_catchpoint): New function.
(insert_breakpoints): Use catch_exceptions to call
insert_catchpoint. Disable catchpoints if they fail to insert.
2003-06-17 Daniel Jacobowitz <drow@mvista.com>
* symfile.c (reread_symbols): Clear sym_private.

View File

@ -703,6 +703,35 @@ read_memory_nobpt (CORE_ADDR memaddr, char *myaddr, unsigned len)
}
/* A wrapper function for inserting catchpoints. */
int
insert_catchpoint (struct ui_out *uo, void *args)
{
struct breakpoint *b = (struct breakpoint *) args;
int val = -1;
switch (b->type)
{
case bp_catch_fork:
val = target_insert_fork_catchpoint (PIDGET (inferior_ptid));
break;
case bp_catch_vfork:
val = target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
break;
case bp_catch_exec:
val = target_insert_exec_catchpoint (PIDGET (inferior_ptid));
break;
default:
warning ("Internal error, %s line %d.", __FILE__, __LINE__);
break;
}
if (val < 0)
throw_exception (RETURN_ERROR);
return 0;
}
/* insert_breakpoints is used when starting or continuing the program.
remove_breakpoints is used when the program stops.
Both return zero if successful,
@ -1054,32 +1083,15 @@ insert_breakpoints (void)
&& !b->inserted
&& !b->duplicate)
{
val = -1;
switch (b->type)
{
case bp_catch_fork:
val = target_insert_fork_catchpoint (PIDGET (inferior_ptid));
break;
case bp_catch_vfork:
val = target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
break;
case bp_catch_exec:
val = target_insert_exec_catchpoint (PIDGET (inferior_ptid));
break;
default:
warning ("Internal error, %s line %d.", __FILE__, __LINE__);
break;
}
char prefix[64];
sprintf (prefix, "warning: inserting catchpoint %d: ", b->number);
val = catch_exceptions (uiout, insert_catchpoint, b, prefix,
RETURN_MASK_ERROR);
if (val < 0)
{
fprintf_unfiltered (tmp_error_stream,
"Cannot insert catchpoint %d.", b->number);
}
b->enable_state = bp_disabled;
else
b->inserted = 1;
if (val)
return_val = val; /* remember failure */
}
}