diff options
-rw-r--r-- | gdb/ChangeLog | 15 | ||||
-rw-r--r-- | gdb/breakpoint.c | 171 | ||||
-rw-r--r-- | gdb/breakpoint.h | 15 | ||||
-rw-r--r-- | gdb/mi/mi-cmd-break.c | 53 |
4 files changed, 115 insertions, 139 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e77c2ba..debc6e8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,18 @@ +2010-03-16 Vladimir Prus <vladimir@codesourcery.com> + + Simplify MI breakpoint setting. + + * breakpoint.c (break_command_really): Make nonstatic and + rename to... + (create_breakpoint): ...this. Rename prior function by this name + to... + (create_breakpoint_sal): ...this. + (create_breakpoints): Rename to... + (create_breakpoints_sal): ...this. + (set_breakpoint): Remove. + * breakpoint.h: Adjust to above changes. + * mi/mi-cmd-break.c (mi_cmd_break_insert): Simplify. + 2010-03-15 Stan Shebs <stan@codesourcery.com> * ax-gdb.c: Include cp-support.h. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 628f2f7..1b4ab57 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -6461,12 +6461,12 @@ bp_loc_is_permanent (struct bp_location *loc) as condition expression. */ static void -create_breakpoint (struct gdbarch *gdbarch, - struct symtabs_and_lines sals, char *addr_string, - char *cond_string, - enum bptype type, enum bpdisp disposition, - int thread, int task, int ignore_count, - struct breakpoint_ops *ops, int from_tty, int enabled) +create_breakpoint_sal (struct gdbarch *gdbarch, + struct symtabs_and_lines sals, char *addr_string, + char *cond_string, + enum bptype type, enum bpdisp disposition, + int thread, int task, int ignore_count, + struct breakpoint_ops *ops, int from_tty, int enabled) { struct breakpoint *b = NULL; int i; @@ -6724,13 +6724,13 @@ expand_line_sal_maybe (struct symtab_and_line sal) COND and SALS arrays and each of those arrays contents. */ static void -create_breakpoints (struct gdbarch *gdbarch, - struct symtabs_and_lines sals, char **addr_string, - char *cond_string, - enum bptype type, enum bpdisp disposition, - int thread, int task, int ignore_count, - struct breakpoint_ops *ops, int from_tty, - int enabled) +create_breakpoints_sal (struct gdbarch *gdbarch, + struct symtabs_and_lines sals, char **addr_string, + char *cond_string, + enum bptype type, enum bpdisp disposition, + int thread, int task, int ignore_count, + struct breakpoint_ops *ops, int from_tty, + int enabled) { int i; for (i = 0; i < sals.nelts; ++i) @@ -6738,9 +6738,9 @@ create_breakpoints (struct gdbarch *gdbarch, struct symtabs_and_lines expanded = expand_line_sal_maybe (sals.sals[i]); - create_breakpoint (gdbarch, expanded, addr_string[i], - cond_string, type, disposition, - thread, task, ignore_count, ops, from_tty, enabled); + create_breakpoint_sal (gdbarch, expanded, addr_string[i], + cond_string, type, disposition, + thread, task, ignore_count, ops, from_tty, enabled); } } @@ -6955,16 +6955,16 @@ find_condition_and_thread (char *tok, CORE_ADDR pc, COND_STRING and THREAD parameters. Returns true if any breakpoint was created; false otherwise. */ -static int -break_command_really (struct gdbarch *gdbarch, - char *arg, char *cond_string, int thread, - int parse_condition_and_thread, - int tempflag, int hardwareflag, int traceflag, - int ignore_count, - enum auto_boolean pending_break_support, - struct breakpoint_ops *ops, - int from_tty, - int enabled) +int +create_breakpoint (struct gdbarch *gdbarch, + char *arg, char *cond_string, int thread, + int parse_condition_and_thread, + int tempflag, int hardwareflag, int traceflag, + int ignore_count, + enum auto_boolean pending_break_support, + struct breakpoint_ops *ops, + int from_tty, + int enabled) { struct gdb_exception e; struct symtabs_and_lines sals; @@ -7103,9 +7103,10 @@ break_command_really (struct gdbarch *gdbarch, make_cleanup (xfree, cond_string); } } - create_breakpoints (gdbarch, sals, addr_string, cond_string, type_wanted, - tempflag ? disp_del : disp_donttouch, - thread, task, ignore_count, ops, from_tty, enabled); + create_breakpoints_sal (gdbarch, sals, addr_string, cond_string, + type_wanted, tempflag ? disp_del : disp_donttouch, + thread, task, ignore_count, ops, from_tty, + enabled); } else { @@ -7163,34 +7164,18 @@ break_command_1 (char *arg, int flag, int from_tty) int hardwareflag = flag & BP_HARDWAREFLAG; int tempflag = flag & BP_TEMPFLAG; - break_command_really (get_current_arch (), - arg, - NULL, 0, 1 /* parse arg */, - tempflag, hardwareflag, 0 /* traceflag */, - 0 /* Ignore count */, - pending_break_support, - NULL /* breakpoint_ops */, - from_tty, - 1 /* enabled */); + create_breakpoint (get_current_arch (), + arg, + NULL, 0, 1 /* parse arg */, + tempflag, hardwareflag, 0 /* traceflag */, + 0 /* Ignore count */, + pending_break_support, + NULL /* breakpoint_ops */, + from_tty, + 1 /* enabled */); } -void -set_breakpoint (struct gdbarch *gdbarch, - char *address, char *condition, - int hardwareflag, int tempflag, - int thread, int ignore_count, - int pending, int enabled) -{ - break_command_really (gdbarch, - address, condition, thread, - 0 /* condition and thread are valid. */, - tempflag, hardwareflag, 0 /* traceflag */, - ignore_count, - pending - ? AUTO_BOOLEAN_TRUE : AUTO_BOOLEAN_FALSE, - NULL, 0, enabled); -} /* Adjust SAL to the first instruction past the function prologue. The end of the prologue is determined using the line table from @@ -8054,14 +8039,14 @@ handle_gnu_v3_exceptions (int tempflag, char *cond_string, else trigger_func_name = "__cxa_throw"; - break_command_really (get_current_arch (), - trigger_func_name, cond_string, -1, - 0 /* condition and thread are valid. */, - tempflag, 0, 0, - 0, - AUTO_BOOLEAN_TRUE /* pending */, - &gnu_v3_exception_catchpoint_ops, from_tty, - 1 /* enabled */); + create_breakpoint (get_current_arch (), + trigger_func_name, cond_string, -1, + 0 /* condition and thread are valid. */, + tempflag, 0, 0, + 0, + AUTO_BOOLEAN_TRUE /* pending */, + &gnu_v3_exception_catchpoint_ops, from_tty, + 1 /* enabled */); return 1; } @@ -10026,32 +10011,32 @@ set_tracepoint_count (int num) void trace_command (char *arg, int from_tty) { - if (break_command_really (get_current_arch (), - arg, - NULL, 0, 1 /* parse arg */, - 0 /* tempflag */, 0 /* hardwareflag */, - 1 /* traceflag */, - 0 /* Ignore count */, - pending_break_support, - NULL, - from_tty, - 1 /* enabled */)) + if (create_breakpoint (get_current_arch (), + arg, + NULL, 0, 1 /* parse arg */, + 0 /* tempflag */, 0 /* hardwareflag */, + 1 /* traceflag */, + 0 /* Ignore count */, + pending_break_support, + NULL, + from_tty, + 1 /* enabled */)) set_tracepoint_count (breakpoint_count); } void ftrace_command (char *arg, int from_tty) { - if (break_command_really (get_current_arch (), - arg, - NULL, 0, 1 /* parse arg */, - 0 /* tempflag */, 1 /* hardwareflag */, - 1 /* traceflag */, - 0 /* Ignore count */, - pending_break_support, - NULL, - from_tty, - 1 /* enabled */)) + if (create_breakpoint (get_current_arch (), + arg, + NULL, 0, 1 /* parse arg */, + 0 /* tempflag */, 1 /* hardwareflag */, + 1 /* traceflag */, + 0 /* Ignore count */, + pending_break_support, + NULL, + from_tty, + 1 /* enabled */)) set_tracepoint_count (breakpoint_count); } @@ -10070,17 +10055,17 @@ create_tracepoint_from_upload (struct uploaded_tp *utp) /* In the absence of a source location, fall back to raw address. */ sprintf (buf, "*%s", paddress (get_current_arch(), utp->addr)); - if (!break_command_really (get_current_arch (), - buf, - NULL, 0, 1 /* parse arg */, - 0 /* tempflag */, - (utp->type == bp_fast_tracepoint) /* hardwareflag */, - 1 /* traceflag */, - 0 /* Ignore count */, - pending_break_support, - NULL, - 0 /* from_tty */, - utp->enabled /* enabled */)) + if (!create_breakpoint (get_current_arch (), + buf, + NULL, 0, 1 /* parse arg */, + 0 /* tempflag */, + (utp->type == bp_fast_tracepoint) /* hardwareflag */, + 1 /* traceflag */, + 0 /* Ignore count */, + pending_break_support, + NULL, + 0 /* from_tty */, + utp->enabled /* enabled */)) return NULL; set_tracepoint_count (breakpoint_count); diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index 73e2223..438cc6a 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -792,12 +792,15 @@ extern void awatch_command_wrapper (char *, int); extern void rwatch_command_wrapper (char *, int); extern void tbreak_command (char *, int); -extern void set_breakpoint (struct gdbarch *gdbarch, - char *address, char *condition, - int hardwareflag, int tempflag, - int thread, int ignore_count, - int pending, - int enabled); +extern int create_breakpoint (struct gdbarch *gdbarch, char *arg, + char *cond_string, int thread, + int parse_condition_and_thread, + int tempflag, int hardwareflag, int traceflag, + int ignore_count, + enum auto_boolean pending_break_support, + struct breakpoint_ops *ops, + int from_tty, + int enabled); extern void insert_breakpoints (void); diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c index 1164414..3ed652c 100644 --- a/gdb/mi/mi-cmd-break.c +++ b/gdb/mi/mi-cmd-break.c @@ -67,18 +67,20 @@ mi_cmd_break_insert (char *command, char **argv, int argc) { char *address = NULL; enum bp_type type = REG_BP; + int hardware = 0; int temp_p = 0; int thread = -1; int ignore_count = 0; char *condition = NULL; int pending = 0; int enabled = 1; + struct cleanup *back_to; struct gdb_exception e; struct gdb_events *old_hooks; enum opt { - HARDWARE_OPT, TEMP_OPT /*, REGEXP_OPT */ , CONDITION_OPT, + HARDWARE_OPT, TEMP_OPT, CONDITION_OPT, IGNORE_COUNT_OPT, THREAD_OPT, PENDING_OPT, DISABLE_OPT }; static struct mi_opt opts[] = @@ -108,13 +110,8 @@ mi_cmd_break_insert (char *command, char **argv, int argc) temp_p = 1; break; case HARDWARE_OPT: - type = HW_BP; + hardware = 1; break; -#if 0 - case REGEXP_OPT: - type = REGEXP_BP; - break; -#endif case CONDITION_OPT: condition = optarg; break; @@ -147,40 +144,16 @@ mi_cmd_break_insert (char *command, char **argv, int argc) mi_breakpoint_observers_installed = 1; } + back_to = make_cleanup_restore_integer (&mi_can_breakpoint_notify); mi_can_breakpoint_notify = 1; - /* Make sure we restore hooks even if exception is thrown. */ - TRY_CATCH (e, RETURN_MASK_ALL) - { - switch (type) - { - case REG_BP: - set_breakpoint (get_current_arch (), address, condition, - 0 /*hardwareflag */ , temp_p, - thread, ignore_count, - pending, enabled); - break; - case HW_BP: - set_breakpoint (get_current_arch (), address, condition, - 1 /*hardwareflag */ , temp_p, - thread, ignore_count, - pending, enabled); - break; -#if 0 - case REGEXP_BP: - if (temp_p) - error (_("mi_cmd_break_insert: Unsupported tempoary regexp breakpoint")); - else - rbreak_command_wrapper (address, FROM_TTY); - break; -#endif - default: - internal_error (__FILE__, __LINE__, - _("mi_cmd_break_insert: Bad switch.")); - } - } - mi_can_breakpoint_notify = 0; - if (e.reason < 0) - throw_exception (e); + create_breakpoint (get_current_arch (), address, condition, thread, + 0 /* condition and thread are valid. */, + temp_p, hardware, 0 /* traceflag */, + ignore_count, + pending ? AUTO_BOOLEAN_TRUE : AUTO_BOOLEAN_FALSE, + NULL, 0, enabled); + do_cleanups (back_to); + } enum wp_type |