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]

Re: [PATCH] Change Ada catchpoints to be bp_catchpoint


Pedro> Might want to add an is_ada_exception_catchpoint routine
Pedro> or some such and use it in print_one_breakpoint_location and
Pedro> print_one_breakpoint where is_exception_catchpoint is used,
Pedro> so that "maint info breakpoints" shows these catchpoints' locations.

Good idea.  I've added this and I'm checking it in.
New patch appended for the record.

Tom

commit f06f1252b0b8ef20adb4296faaf8293c9d36f615
Author: Tom Tromey <tromey@adacore.com>
Date:   Wed Jul 10 11:05:20 2019 -0600

    Change Ada catchpoints to be bp_catchpoint
    
    Like Pedro's earlier patches to change catchpoint to be of type
    bp_catchpoint, this changes the Ada catchpoints to follow.
    
    Tested on x86-64 Fedora 29.
    
    gdb/ChangeLog
    2019-07-10  Tom Tromey  <tromey@adacore.com>
    
            * ada-lang.h (is_ada_exception_catchpoint): Declare.
            * breakpoint.c (init_ada_exception_breakpoint): Register as
            bp_catchpoint.
            (print_one_breakpoint_location, print_one_breakpoint): Use
            is_ada_exception_catchpoint.
            * ada-lang.c (class ada_catchpoint_location): Pass
            bp_loc_software_breakpoint to bp_location constructor.
            (is_ada_exception_catchpoint): New function.
    
    gdb/testsuite/ChangeLog
    2019-07-10  Tom Tromey  <tromey@adacore.com>
    
            * gdb.ada/mi_ex_cond.exp: Update expected results.
            * gdb.ada/mi_catch_ex_hand.exp: Update expected results.
            * gdb.ada/mi_catch_ex.exp: Update expected results.
            * gdb.ada/mi_catch_assert.exp: Update expected results.
            * gdb.ada/catch_ex.exp (catch_exception_info)
            (catch_exception_entry, catch_assert_entry)
            (catch_unhandled_entry): Update.
            * gdb.ada/catch_assert_if.exp: Update expected results.

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 90242001df8..aa8b53a1214 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,14 @@
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* ada-lang.h (is_ada_exception_catchpoint): Declare.
+	* breakpoint.c (init_ada_exception_breakpoint): Register as
+	bp_catchpoint.
+	(print_one_breakpoint_location, print_one_breakpoint): Use
+	is_ada_exception_catchpoint.
+	* ada-lang.c (class ada_catchpoint_location): Pass
+	bp_loc_software_breakpoint to bp_location constructor.
+	(is_ada_exception_catchpoint): New function.
+
 2019-07-10  Tom Tromey  <tromey@adacore.com>
 
 	* arm-tdep.c (arm_exidx_entry_s): Remove typedef.  Don't define
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index ae28265d496..deb5099024e 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -12283,7 +12283,7 @@ class ada_catchpoint_location : public bp_location
 {
 public:
   ada_catchpoint_location (breakpoint *owner)
-    : bp_location (owner)
+    : bp_location (owner, bp_loc_software_breakpoint)
   {}
 
   /* The condition that checks whether the exception that was raised
@@ -12546,14 +12546,11 @@ print_one_exception (enum ada_exception_catchpoint_kind ex,
   struct value_print_options opts;
 
   get_user_print_options (&opts);
+
   if (opts.addressprint)
-    {
-      annotate_field (4);
-      uiout->field_core_addr ("addr", b->loc->gdbarch, b->loc->address);
-    }
+    uiout->field_skip ("addr");
 
   annotate_field (5);
-  *last_loc = b->loc;
   switch (ex)
     {
       case ada_catch_exception:
@@ -12871,6 +12868,17 @@ print_recreate_catch_handlers (struct breakpoint *b,
 
 static struct breakpoint_ops catch_handlers_breakpoint_ops;
 
+/* See ada-lang.h.  */
+
+bool
+is_ada_exception_catchpoint (breakpoint *bp)
+{
+  return (bp->ops == &catch_exception_breakpoint_ops
+	  || bp->ops == &catch_exception_unhandled_breakpoint_ops
+	  || bp->ops == &catch_assert_breakpoint_ops
+	  || bp->ops == &catch_handlers_breakpoint_ops);
+}
+
 /* Split the arguments specified in a "catch exception" command.  
    Set EX to the appropriate catchpoint type.
    Set EXCEP_STRING to the name of the specific exception if
diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h
index 788f7a6d3a3..2fc3f523ca7 100644
--- a/gdb/ada-lang.h
+++ b/gdb/ada-lang.h
@@ -378,6 +378,10 @@ extern void create_ada_exception_catchpoint
    const std::string &excep_string, const std::string &cond_string, int tempflag,
    int disabled, int from_tty);
 
+/* Return true if BP is an Ada catchpoint.  */
+
+extern bool is_ada_exception_catchpoint (breakpoint *bp);
+
 /* Some information about a given Ada exception.  */
 
 struct ada_exc_info
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 8ae7cd6e7ef..09c2a27a38b 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -6054,7 +6054,8 @@ print_one_breakpoint_location (struct breakpoint *b,
 	  annotate_field (5);
 	  uiout->field_string ("what", w->exp_string);
 	}
-      else if (!is_catchpoint (b) || is_exception_catchpoint (b))
+      else if (!is_catchpoint (b) || is_exception_catchpoint (b)
+	       || is_ada_exception_catchpoint (b))
 	{
 	  if (opts.addressprint)
 	    {
@@ -6329,7 +6330,8 @@ print_one_breakpoint (struct breakpoint *b,
 	 exposed to users.  We do however display the internal
 	 breakpoint locations with "maint info breakpoints".  */
       if (!is_hardware_watchpoint (b)
-	  && (!is_catchpoint (b) || is_exception_catchpoint (b))
+	  && (!is_catchpoint (b) || is_exception_catchpoint (b)
+	      || is_ada_exception_catchpoint (b))
 	  && (allflag
 	      || (b->loc && (b->loc->next || !b->loc->enabled))))
 	{
@@ -11212,7 +11214,7 @@ init_ada_exception_breakpoint (struct breakpoint *b,
          enough for now, though.  */
     }
 
-  init_raw_breakpoint (b, gdbarch, sal, bp_breakpoint, ops);
+  init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint, ops);
 
   b->enable_state = enabled ? bp_enabled : bp_disabled;
   b->disposition = tempflag ? disp_del : disp_donttouch;
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 0118420abc3..247171abaee 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,14 @@
+2019-07-10  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.ada/mi_ex_cond.exp: Update expected results.
+	* gdb.ada/mi_catch_ex_hand.exp: Update expected results.
+	* gdb.ada/mi_catch_ex.exp: Update expected results.
+	* gdb.ada/mi_catch_assert.exp: Update expected results.
+	* gdb.ada/catch_ex.exp (catch_exception_info)
+	(catch_exception_entry, catch_assert_entry)
+	(catch_unhandled_entry): Update.
+	* gdb.ada/catch_assert_if.exp: Update expected results.
+
 2019-07-10  Richard Bunt  <richard.bunt@arm.com>
 	Stephen Roberts  <stephen.roberts@arm.com>
 
diff --git a/gdb/testsuite/gdb.ada/catch_assert_if.exp b/gdb/testsuite/gdb.ada/catch_assert_if.exp
index 0bf2dd6a66b..61a12a7d738 100644
--- a/gdb/testsuite/gdb.ada/catch_assert_if.exp
+++ b/gdb/testsuite/gdb.ada/catch_assert_if.exp
@@ -70,7 +70,7 @@ gdb_test "catch assert if Global_Var = 2" \
 
 # Check that condition is stored and properly displayed.
 
-set exp_bp ".*$decimal${sp}breakpoint${sp}keep${sp}y${sp}$hex failed Ada assertions$eol${sp}stop only if Global_Var = 2.*"
+set exp_bp ".*$decimal${sp}catchpoint${sp}keep${sp}y${sp}failed Ada assertions$eol${sp}stop only if Global_Var = 2.*"
 gdb_test "info breakpoint" $exp_bp "Check catch assertions with condition"
 
 set bp_location [gdb_get_line_number "STOP" ${testdir}/bla.adb]
diff --git a/gdb/testsuite/gdb.ada/catch_ex.exp b/gdb/testsuite/gdb.ada/catch_ex.exp
index 772100ac127..5a560c1217d 100644
--- a/gdb/testsuite/gdb.ada/catch_ex.exp
+++ b/gdb/testsuite/gdb.ada/catch_ex.exp
@@ -32,7 +32,7 @@ set sp "\[ \t\]*"
 
 set info_break_header "Num${sp}Type${sp}Disp${sp}Enb${sp}Address${sp}What"
 set catch_exception_info \
-  "$any_nb${sp}breakpoint${sp}keep${sp}y${sp}$any_addr${sp}all Ada exceptions"
+  "$any_nb${sp}catchpoint${sp}keep${sp}y${sp}all Ada exceptions"
 
 ####################################
 # 1. Try catching all exceptions.  #
@@ -105,11 +105,11 @@ gdb_test "catch exception unhandled" \
          "insert catchpoint on unhandled exceptions"
 
 set catch_exception_entry \
-  "$any_nb${sp}breakpoint${sp}keep${sp}y${sp}$any_addr${sp}\`Program_Error' Ada exception"
+  "$any_nb${sp}catchpoint${sp}keep${sp}y${sp}\`Program_Error' Ada exception"
 set catch_assert_entry \
-  "$any_nb${sp}breakpoint${sp}keep${sp}y${sp}$any_addr${sp}failed Ada assertions"
+  "$any_nb${sp}catchpoint${sp}keep${sp}y${sp}failed Ada assertions"
 set catch_unhandled_entry \
-  "$any_nb${sp}breakpoint${sp}keep${sp}y${sp}$any_addr${sp}unhandled Ada exceptions"
+  "$any_nb${sp}catchpoint${sp}keep${sp}y${sp}unhandled Ada exceptions"
 
 gdb_test "info break" \
          "$info_break_header$eol.*$catch_exception_entry$eol$catch_assert_entry$eol$catch_unhandled_entry" \
diff --git a/gdb/testsuite/gdb.ada/mi_catch_assert.exp b/gdb/testsuite/gdb.ada/mi_catch_assert.exp
index ebecf03bd5b..6e6093ed521 100644
--- a/gdb/testsuite/gdb.ada/mi_catch_assert.exp
+++ b/gdb/testsuite/gdb.ada/mi_catch_assert.exp
@@ -81,7 +81,7 @@ if ![mi_run_to_main] then {
 }
 
 mi_gdb_test "-catch-assert -c \"Global_Var = 2\"" \
-            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",addr=\"$hex\",what=\"failed Ada assertions\",.*,cond=\"Global_Var = 2\",.*}" \
+            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"failed Ada assertions\",.*,cond=\"Global_Var = 2\",.*}" \
             "catch assert failures with condition"
 
 set bp_location [gdb_get_line_number "STOP" ${testdir}/bla.adb]
diff --git a/gdb/testsuite/gdb.ada/mi_catch_ex.exp b/gdb/testsuite/gdb.ada/mi_catch_ex.exp
index 772a0506a29..93585989b8e 100644
--- a/gdb/testsuite/gdb.ada/mi_catch_ex.exp
+++ b/gdb/testsuite/gdb.ada/mi_catch_ex.exp
@@ -75,7 +75,7 @@ if ![mi_run_to_main] then {
 }
 
 mi_gdb_test "-catch-exception" \
-            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",addr=\"$hex\",what=\"all Ada exceptions\",.*}" \
+            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"all Ada exceptions\",.*}" \
             "catch all exceptions"
 
 # Continue to caught exception.
@@ -131,15 +131,15 @@ if ![mi_run_to_main] then {
 }
 
 mi_gdb_test "-catch-exception -e Program_Error" \
-            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",addr=\"$hex\",what=\"`Program_Error' Ada exception\",.*}" \
+            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"`Program_Error' Ada exception\",.*}" \
             "catch Program_Error"
 
 mi_gdb_test "-catch-assert" \
-            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",addr=\"$hex\",what=\"failed Ada assertions\",.*}" \
+            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"failed Ada assertions\",.*}" \
             "catch assert failures"
 
 mi_gdb_test "-catch-exception -u" \
-            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",addr=\"$hex\",what=\"unhandled Ada exceptions\",.*}" \
+            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"unhandled Ada exceptions\",.*}" \
             "catch unhandled exceptions"
 
 mi_execute_to "exec-continue" \
diff --git a/gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp b/gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp
index 11a9d1dc667..a4734b99094 100644
--- a/gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp
+++ b/gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp
@@ -70,7 +70,7 @@ if ![mi_run_to_main] then {
 }
 
 mi_gdb_test "-catch-handlers" \
-            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",addr=\"$hex\",what=\"all Ada exceptions handlers\",.*}" \
+            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"all Ada exceptions handlers\",.*}" \
             "catch all exceptions handlers"
 
 # Continue to exception handler.
@@ -120,7 +120,7 @@ if ![mi_run_to_main] then {
 }
 
 mi_gdb_test "-catch-handlers -e Constraint_Error" \
-            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",addr=\"$hex\",what=\"`Constraint_Error' Ada exception handlers\",.*}" \
+            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"`Constraint_Error' Ada exception handlers\",.*}" \
             "catch Constraint_Error"
 
 mi_execute_to "exec-continue" \
diff --git a/gdb/testsuite/gdb.ada/mi_ex_cond.exp b/gdb/testsuite/gdb.ada/mi_ex_cond.exp
index ccbbe1f5d8c..16aa198e5e0 100644
--- a/gdb/testsuite/gdb.ada/mi_ex_cond.exp
+++ b/gdb/testsuite/gdb.ada/mi_ex_cond.exp
@@ -69,7 +69,7 @@ mi_gdb_load ${binfile}
 # catchpoint that uses both conditions and exception name.
 
 mi_gdb_test "-catch-exception -c \"i = 2\" -e constraint_error" \
-            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",addr=\"$hex\",what=\"`constraint_error' Ada exception\",.*,cond=\"i = 2\",.*}" \
+            "\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"`constraint_error' Ada exception\",.*,cond=\"i = 2\",.*}" \
             "catch C_E if i = 2"
 
 # It is important that we start the program's execution after having


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