mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
gdb/guile: allow for catchpoint type breakpoints in guile
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.
This commit is contained in:
@ -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>
|
2021-06-25 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* guile/scm-breakpoint.c (gdbscm_make_breakpoint): Split the error
|
* guile/scm-breakpoint.c (gdbscm_make_breakpoint): Split the error
|
||||||
|
@ -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>
|
2021-06-21 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* gdb.texinfo (RISC-V Features): Mention vector register feature.
|
* gdb.texinfo (RISC-V Features): Mention vector register feature.
|
||||||
|
@ -3019,6 +3019,10 @@ This value cannot be specified when creating the breakpoint.
|
|||||||
@item BP_ACCESS_WATCHPOINT
|
@item BP_ACCESS_WATCHPOINT
|
||||||
Hardware assisted access watchpoint.
|
Hardware assisted access watchpoint.
|
||||||
This value cannot be specified when creating the breakpoint.
|
This value cannot be specified when creating the breakpoint.
|
||||||
|
|
||||||
|
@item BP_CATCHPOINT
|
||||||
|
Catchpoint.
|
||||||
|
This value cannot be specified when creating the breakpoint.
|
||||||
@end vtable
|
@end vtable
|
||||||
|
|
||||||
The available watchpoint types are represented by constants defined in the
|
The available watchpoint types are represented by constants defined in the
|
||||||
|
@ -138,6 +138,7 @@ bpscm_type_to_string (enum bptype type)
|
|||||||
case bp_hardware_watchpoint: return "BP_HARDWARE_WATCHPOINT";
|
case bp_hardware_watchpoint: return "BP_HARDWARE_WATCHPOINT";
|
||||||
case bp_read_watchpoint: return "BP_READ_WATCHPOINT";
|
case bp_read_watchpoint: return "BP_READ_WATCHPOINT";
|
||||||
case bp_access_watchpoint: return "BP_ACCESS_WATCHPOINT";
|
case bp_access_watchpoint: return "BP_ACCESS_WATCHPOINT";
|
||||||
|
case bp_catchpoint: return "BP_CATCHPOINT";
|
||||||
default: return "internal/other";
|
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_watchpoint
|
||||||
&& bp->type != bp_hardware_watchpoint
|
&& bp->type != bp_hardware_watchpoint
|
||||||
&& bp->type != bp_read_watchpoint
|
&& bp->type != bp_read_watchpoint
|
||||||
&& bp->type != bp_access_watchpoint)
|
&& bp->type != bp_access_watchpoint
|
||||||
|
&& bp->type != bp_catchpoint)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -391,6 +393,7 @@ gdbscm_make_breakpoint (SCM location_scm, SCM rest)
|
|||||||
case bp_hardware_watchpoint:
|
case bp_hardware_watchpoint:
|
||||||
case bp_read_watchpoint:
|
case bp_read_watchpoint:
|
||||||
case bp_access_watchpoint:
|
case bp_access_watchpoint:
|
||||||
|
case bp_catchpoint:
|
||||||
{
|
{
|
||||||
const char *type_name = bpscm_type_to_string (type);
|
const char *type_name = bpscm_type_to_string (type);
|
||||||
gdbscm_misc_error (FUNC_NAME, type_arg_pos,
|
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_HARDWARE_WATCHPOINT", bp_hardware_watchpoint },
|
||||||
{ "BP_READ_WATCHPOINT", bp_read_watchpoint },
|
{ "BP_READ_WATCHPOINT", bp_read_watchpoint },
|
||||||
{ "BP_ACCESS_WATCHPOINT", bp_access_watchpoint },
|
{ "BP_ACCESS_WATCHPOINT", bp_access_watchpoint },
|
||||||
|
{ "BP_CATCHPOINT", bp_catchpoint },
|
||||||
|
|
||||||
{ "WP_READ", hw_read },
|
{ "WP_READ", hw_read },
|
||||||
{ "WP_WRITE", hw_write },
|
{ "WP_WRITE", hw_write },
|
||||||
|
@ -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>
|
2021-06-25 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* gdb.guile/scm-breakpoint.exp (test_watchpoints): Add new tests.
|
* gdb.guile/scm-breakpoint.exp (test_watchpoints): Add new tests.
|
||||||
|
@ -519,10 +519,47 @@ proc_with_prefix test_bkpt_probe {} {
|
|||||||
"register probe breakpoint"
|
"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_basic
|
||||||
test_bkpt_deletion
|
test_bkpt_deletion
|
||||||
test_bkpt_cond_and_cmds
|
test_bkpt_cond_and_cmds
|
||||||
test_bkpt_invisible
|
test_bkpt_invisible
|
||||||
|
test_catchpoints
|
||||||
test_watchpoints
|
test_watchpoints
|
||||||
test_bkpt_internal
|
test_bkpt_internal
|
||||||
test_bkpt_eval_funcs
|
test_bkpt_eval_funcs
|
||||||
|
Reference in New Issue
Block a user