gdb/guile: allow for catchpoint type breakpoints in guile
authorAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 5 May 2021 15:53:09 +0000 (16:53 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 25 Jun 2021 17:22:05 +0000 (18:22 +0100)
This commit adds initial support for catchpoints to the guile
breakpoint API.

This commit adds a BP_CATCHPOINT constant which corresponds to
GDB's internal bp_catchpoint.  The new constant is documented in the
manual.

The user can't create breakpoints with type BP_CATCHPOINT after this
commit, but breakpoints that already exist, obtained with
the (breakpoints) function, can now have this type.

gdb/ChangeLog:

* guile/scm-breakpoint.c (bpscm_type_to_string): Handle
bp_catchpoint.
(bpscm_want_scm_wrapper_p): Likewise.
(gdbscm_make_breakpoint): Likewise.
(breakpoint_integer_constants): Likewise.

gdb/doc/ChangeLog:

* guile.texinfo (Breakpoints In Guile): Add BP_CATCHPOINT
description.

gdb/testsuite/ChangeLog:

* gdb.guile/scm-breakpoint.exp (test_catchpoints): New proc.

gdb/ChangeLog
gdb/doc/ChangeLog
gdb/doc/guile.texi
gdb/guile/scm-breakpoint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.guile/scm-breakpoint.exp

index 80ccc9f4c85c8f7da5726eff228119adb91a3830..b610f75d22646543bf9c586e8da1cdb319267adf 100644 (file)
@@ -1,3 +1,11 @@
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * guile/scm-breakpoint.c (bpscm_type_to_string): Handle
+       bp_catchpoint.
+       (bpscm_want_scm_wrapper_p): Likewise.
+       (gdbscm_make_breakpoint): Likewise.
+       (breakpoint_integer_constants): Likewise.
+
 2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * guile/scm-breakpoint.c (gdbscm_make_breakpoint): Split the error
index ad0b2e7c78f089f31a44f93517ce530129350222..1f197838a59c9399d2d864f938961f7050eedd57 100644 (file)
@@ -1,3 +1,8 @@
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * guile.texinfo (Breakpoints In Guile): Add BP_CATCHPOINT
+       description.
+
 2021-06-21  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * gdb.texinfo (RISC-V Features): Mention vector register feature.
index c7e43c8d63a9f80b5d467c7de36474faf4237d7c..36fc9a7af797d73c4f8e8ed9ab706075dac614c3 100644 (file)
@@ -3019,6 +3019,10 @@ This value cannot be specified when creating the breakpoint.
 @item BP_ACCESS_WATCHPOINT
 Hardware assisted access watchpoint.
 This value cannot be specified when creating the breakpoint.
+
+@item BP_CATCHPOINT
+Catchpoint.
+This value cannot be specified when creating the breakpoint.
 @end vtable
 
 The available watchpoint types are represented by constants defined in the
index 346b00629b0aedf290fcaab01f3584c7ff9d951a..3f25708afffb3961e95ed638a65931d3099e4125 100644 (file)
@@ -138,6 +138,7 @@ bpscm_type_to_string (enum bptype type)
     case bp_hardware_watchpoint: return "BP_HARDWARE_WATCHPOINT";
     case bp_read_watchpoint: return "BP_READ_WATCHPOINT";
     case bp_access_watchpoint: return "BP_ACCESS_WATCHPOINT";
+    case bp_catchpoint: return "BP_CATCHPOINT";
     default: return "internal/other";
     }
 }
@@ -233,7 +234,8 @@ bpscm_want_scm_wrapper_p (struct breakpoint *bp, int from_scheme)
       && bp->type != bp_watchpoint
       && bp->type != bp_hardware_watchpoint
       && bp->type != bp_read_watchpoint
-      && bp->type != bp_access_watchpoint)
+      && bp->type != bp_access_watchpoint
+      && bp->type != bp_catchpoint)
     return 0;
 
   return 1;
@@ -391,6 +393,7 @@ gdbscm_make_breakpoint (SCM location_scm, SCM rest)
     case bp_hardware_watchpoint:
     case bp_read_watchpoint:
     case bp_access_watchpoint:
+    case bp_catchpoint:
       {
        const char *type_name = bpscm_type_to_string (type);
        gdbscm_misc_error (FUNC_NAME, type_arg_pos,
@@ -1152,6 +1155,7 @@ static const scheme_integer_constant breakpoint_integer_constants[] =
   { "BP_HARDWARE_WATCHPOINT", bp_hardware_watchpoint },
   { "BP_READ_WATCHPOINT", bp_read_watchpoint },
   { "BP_ACCESS_WATCHPOINT", bp_access_watchpoint },
+  { "BP_CATCHPOINT", bp_catchpoint },
 
   { "WP_READ", hw_read },
   { "WP_WRITE", hw_write },
index 330e7c84f1ad3d8eeb73e559ef7f6142b0137009..30db2611d1e6747885eaf53886425bfce1ba04b3 100644 (file)
@@ -1,3 +1,7 @@
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * gdb.guile/scm-breakpoint.exp (test_catchpoints): New proc.
+
 2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * gdb.guile/scm-breakpoint.exp (test_watchpoints): Add new tests.
index 0e9e64ed4aed4ec0d00a6448db6b2d41a06e7cab..c603af76a3394be7e918de785c49a332cd748ee7 100644 (file)
@@ -519,10 +519,47 @@ proc_with_prefix test_bkpt_probe {} {
        "register probe breakpoint"
 }
 
+proc_with_prefix test_catchpoints {} {
+    global srcfile testfile
+    global gdb_prompt decimal
+
+    # Start with a fresh gdb.
+    clean_restart ${testfile}
+
+    if ![gdb_guile_runto_main] {
+       return
+    }
+
+    # Try to create a catchpoint, currently this isn't supported via
+    # the guile api.
+    gdb_test "guile (define cp (make-breakpoint \"syscall\" #:type BP_CATCHPOINT))" \
+       "ERROR: In procedure gdbscm_make_breakpoint: unsupported breakpoint type in position 3: \"BP_CATCHPOINT\"\r\n.*" \
+       "create a catchpoint via the api"
+
+    # Setup a catchpoint.
+    set num "XXX"
+    gdb_test_multiple "catch syscall" "" {
+       -re "The feature \'catch syscall\' is not supported.*\r\n$gdb_prompt $" {
+           unsupported "catch syscall isn't supported"
+           return -1
+       }
+       -re "Catchpoint ($decimal) \\(any syscall\\)\r\n$gdb_prompt $" {
+           set num $expect_out(1,string)
+           pass $gdb_test_name
+       }
+    }
+
+    # Look for the catchpoint in the breakpoint list.
+    gdb_test "guile (for-each (lambda (b) (if (= (breakpoint-type b) BP_CATCHPOINT) (begin (display b) (newline)))) (breakpoints))" \
+       "#<gdb:breakpoint #${num} BP_CATCHPOINT enabled noisy hit:0 ignore:0>" \
+       "look for BP_CATCHPOINT in breakpoint list"
+}
+
 test_bkpt_basic
 test_bkpt_deletion
 test_bkpt_cond_and_cmds
 test_bkpt_invisible
+test_catchpoints
 test_watchpoints
 test_bkpt_internal
 test_bkpt_eval_funcs