This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[MI tracepoints 1/9] Simplify MI breakpoint setting


This patch is a revision of the one I've posted before at:

	http://thread.gmane.org/gmane.comp.gdb.patches/51469/

There, in the end, the only objection was that function break_command_really
is poorly named, so this patch makes the function named be create_breakpoint,
and renames prior create_breakpoint to create_breakpoint_sal, since that's
what it is. 

OK?


Thanks,

-- 
Vladimir Prus
CodeSourcery
vladimir@codesourcery.com
(650) 331-3385 x722
commit 04b04894782b96c235609f4151f4eb1d802a1f7c
Author: Vladimir Prus <vladimir@codesourcery.com>
Date:   Sat Aug 1 11:09:08 2009 +0400

    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.

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]