* breakpoint.h (struct breakpoint): Move the cond
	field to...
	(struct bp_location): Here.
	* breakpoint.c (condition_command, bpstat_stop_status)
	(print_one_breakpoint, allocate_bp_location)
	(solib_load_unload_1, create_fork_vfork_event_catchpoint)
	(create_exec_event_catchpoint, create_breakpoints)
	(break_command_1, watch_command_1, handle_gnu_v3_exceptions)
	(create_ada_exception_breakpoint, set_breakpoint_sal)
	(delete_breakpoint, breakpoint_re_set_one): Adjust.
	* tui/tui-winsource.c (tui_update_breakpoint_info): Adjust.
This commit is contained in:
Vladimir Prus 2007-09-22 19:06:59 +00:00
parent 4f8d1dc6a5
commit 511a6cd4e1
4 changed files with 50 additions and 34 deletions

View File

@ -1,3 +1,18 @@
2007-09-22 Vladimir Prus <vladimir@codesourcery.com>
gdb/
* breakpoint.h (struct breakpoint): Move the cond
field to...
(struct bp_location): Here.
* breakpoint.c (condition_command, bpstat_stop_status)
(print_one_breakpoint, allocate_bp_location)
(solib_load_unload_1, create_fork_vfork_event_catchpoint)
(create_exec_event_catchpoint, create_breakpoints)
(break_command_1, watch_command_1, handle_gnu_v3_exceptions)
(create_ada_exception_breakpoint, set_breakpoint_sal)
(delete_breakpoint, breakpoint_re_set_one): Adjust.
* tui/tui-winsource.c (tui_update_breakpoint_info): Adjust.
2007-09-22 Vladimir Prus <vladimir@codesourcery.com>
Associate bp_stat with bp_location, not breakpoint.

View File

@ -569,17 +569,17 @@ condition_command (char *arg, int from_tty)
ALL_BREAKPOINTS (b)
if (b->number == bnum)
{
if (b->cond)
struct bp_location *loc = b->loc;
if (loc->cond)
{
xfree (b->cond);
b->cond = 0;
xfree (loc->cond);
loc->cond = 0;
}
if (b->cond_string != NULL)
xfree (b->cond_string);
if (*p == 0)
{
b->cond = 0;
b->cond_string = NULL;
if (from_tty)
printf_filtered (_("Breakpoint %d now unconditional.\n"), bnum);
@ -592,7 +592,8 @@ condition_command (char *arg, int from_tty)
b->cond_string = savestring (arg, strlen (arg));
if (!b->pending)
{
b->cond = parse_exp_1 (&arg, block_for_pc (b->loc->address), 0);
b->loc->cond = parse_exp_1 (&arg,
block_for_pc (b->loc->address), 0);
if (*arg)
error (_("Junk at end of expression"));
}
@ -2923,19 +2924,19 @@ bpstat_stop_status (CORE_ADDR bp_addr, ptid_t ptid, int stopped_by_watchpoint)
{
int value_is_zero = 0;
if (b->cond)
if (b->loc->cond)
{
/* Need to select the frame, with all that implies
so that the conditions will have the right context. */
select_frame (get_current_frame ());
value_is_zero
= catch_errors (breakpoint_cond_eval, (b->cond),
= catch_errors (breakpoint_cond_eval, (b->loc->cond),
"Error in testing breakpoint condition:\n",
RETURN_MASK_ALL);
/* FIXME-someday, should give breakpoint # */
free_all_values ();
}
if (b->cond && value_is_zero)
if (b->loc->cond && value_is_zero)
{
bs->stop = 0;
/* Don't consider this a hit. */
@ -3606,14 +3607,14 @@ print_one_breakpoint (struct breakpoint *b,
ui_out_text (uiout, "\n");
}
if (b->cond && !ada_exception_catchpoint_p (b))
if (b->loc->cond && !ada_exception_catchpoint_p (b))
{
/* We do not print the condition for Ada exception catchpoints
because the condition is an internal implementation detail
that we do not want to expose to the user. */
annotate_field (7);
ui_out_text (uiout, "\tstop only if ");
print_expression (b->cond, stb->stream);
print_expression (b->loc->cond, stb->stream);
ui_out_field_stream (uiout, "cond", stb);
ui_out_text (uiout, "\n");
}
@ -4085,6 +4086,7 @@ allocate_bp_location (struct breakpoint *bpt, enum bptype bp_type)
memset (loc, 0, sizeof (*loc));
loc->owner = bpt;
loc->cond = NULL;
switch (bp_type)
{
@ -4604,7 +4606,6 @@ solib_load_unload_1 (char *hookname, int tempflag, char *dll_pathname,
b = set_raw_breakpoint (sals.sals[0], bp_kind);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->cond = NULL;
b->cond_string = (cond_string == NULL) ?
NULL : savestring (cond_string, strlen (cond_string));
b->thread = thread;
@ -4661,7 +4662,6 @@ create_fork_vfork_event_catchpoint (int tempflag, char *cond_string,
b = set_raw_breakpoint (sal, bp_kind);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->cond = NULL;
b->cond_string = (cond_string == NULL) ?
NULL : savestring (cond_string, strlen (cond_string));
b->thread = thread;
@ -4700,7 +4700,6 @@ create_exec_event_catchpoint (int tempflag, char *cond_string)
b = set_raw_breakpoint (sal, bp_catch_exec);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->cond = NULL;
b->cond_string = (cond_string == NULL) ?
NULL : savestring (cond_string, strlen (cond_string));
b->thread = thread;
@ -5033,7 +5032,7 @@ create_breakpoints (struct symtabs_and_lines sals, char **addr_string,
b = set_raw_breakpoint (sal, type);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->cond = cond[i];
b->loc->cond = cond[i];
b->thread = thread;
if (addr_string[i])
b->addr_string = addr_string[i];
@ -5056,7 +5055,7 @@ create_breakpoints (struct symtabs_and_lines sals, char **addr_string,
{
arg = pending_bp->cond_string;
b->cond_string = savestring (arg, strlen (arg));
b->cond = parse_exp_1 (&arg, block_for_pc (b->loc->address), 0);
b->loc->cond = parse_exp_1 (&arg, block_for_pc (b->loc->address), 0);
if (*arg)
error (_("Junk at end of pending breakpoint condition expression"));
}
@ -5399,7 +5398,7 @@ break_command_1 (char *arg, int flag, int from_tty, struct breakpoint *pending_b
: bp_breakpoint);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->cond = *cond;
b->loc->cond = *cond;
b->thread = thread;
b->addr_string = *addr_string;
b->cond_string = *cond_string;
@ -5792,7 +5791,7 @@ watch_command_1 (char *arg, int accessflag, int from_tty)
b->exp_valid_block = exp_valid_block;
b->exp_string = savestring (exp_start, exp_end - exp_start);
b->val = val;
b->cond = cond;
b->loc->cond = cond;
if (cond_start)
b->cond_string = savestring (cond_start, cond_end - cond_start);
else
@ -6352,7 +6351,6 @@ create_exception_catchpoint (int tempflag, char *cond_string,
b = set_raw_breakpoint (*sal, bptype);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->cond = NULL;
b->cond_string = (cond_string == NULL) ?
NULL : savestring (cond_string, strlen (cond_string));
b->thread = thread;
@ -6432,7 +6430,6 @@ handle_gnu_v3_exceptions (int tempflag, char *cond_string,
b = set_raw_breakpoint (sals.sals[0], bp_breakpoint);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->cond = NULL;
b->cond_string = (cond_string == NULL) ?
NULL : savestring (cond_string, strlen (cond_string));
b->thread = -1;
@ -6519,7 +6516,7 @@ create_ada_exception_breakpoint (struct symtab_and_line sal,
b->disposition = tempflag ? disp_del : disp_donttouch;
b->number = breakpoint_count;
b->ignore_count = 0;
b->cond = cond;
b->loc->cond = cond;
b->addr_string = addr_string;
b->language = language_ada;
b->cond_string = cond_string;
@ -6701,7 +6698,6 @@ set_breakpoint_sal (struct symtab_and_line sal)
b = set_raw_breakpoint (sal, bp_breakpoint);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->cond = 0;
b->thread = -1;
return b;
}
@ -7021,8 +7017,6 @@ delete_breakpoint (struct breakpoint *bpt)
}
free_command_lines (&bpt->commands);
if (bpt->cond)
xfree (bpt->cond);
if (bpt->cond_string != NULL)
xfree (bpt->cond_string);
if (bpt->addr_string != NULL)
@ -7062,6 +7056,8 @@ delete_breakpoint (struct breakpoint *bpt)
bp, we mark it as deleted before freeing its storage. */
bpt->type = bp_none;
if (bpt->loc->cond)
xfree (bpt->loc->cond);
xfree (bpt->loc);
xfree (bpt);
}
@ -7215,14 +7211,14 @@ breakpoint_re_set_one (void *bint)
if (b->cond_string != NULL)
{
s = b->cond_string;
if (b->cond)
if (b->loc->cond)
{
xfree (b->cond);
xfree (b->loc->cond);
/* Avoid re-freeing b->exp if an error during the call
to parse_exp_1. */
b->cond = NULL;
b->loc->cond = NULL;
}
b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
b->loc->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
}
/* We need to re-set the breakpoint if the address changes... */
@ -7314,14 +7310,14 @@ breakpoint_re_set_one (void *bint)
if (b->cond_string != NULL)
{
s = b->cond_string;
if (b->cond)
if (b->loc->cond)
{
xfree (b->cond);
xfree (b->loc->cond);
/* Avoid re-freeing b->exp if an error during the call
to parse_exp_1. */
b->cond = NULL;
b->loc->cond = NULL;
}
b->cond = parse_exp_1 (&s, (struct block *) 0, 0);
b->loc->cond = parse_exp_1 (&s, (struct block *) 0, 0);
}
if (breakpoint_enabled (b))
mention (b);

View File

@ -243,6 +243,13 @@ struct bp_location
than reference counting. */
struct breakpoint *owner;
/* Conditional. Break only if this expression's value is nonzero.
Unlike string form of condition, which is associated with breakpoint,
this is associated with location, since if breakpoint has several
locations, the evaluation of expression can be different for
different locations. */
struct expression *cond;
/* Nonzero if this breakpoint is now inserted. */
char inserted;
@ -341,8 +348,6 @@ struct breakpoint
/* Stack depth (address of frame). If nonzero, break only if fp
equals this. */
struct frame_id frame_id;
/* Conditional. Break only if this expression's value is nonzero. */
struct expression *cond;
/* String we used to set the breakpoint (malloc'd). */
char *addr_string;

View File

@ -449,7 +449,7 @@ tui_update_breakpoint_info (struct tui_win_info *win,
mode |= TUI_BP_ENABLED;
if (bp->hit_count)
mode |= TUI_BP_HIT;
if (bp->cond)
if (bp->loc->cond)
mode |= TUI_BP_CONDITIONAL;
if (bp->type == bp_hardware_breakpoint)
mode |= TUI_BP_HARDWARE;