Add Python support for hardware breakpoints
This allows the creation of hardware breakpoints in Python with gdb.Breakpoint(type=gdb.BP_HARDWARE_BREAKPOINT) And they are included in the sequence returned by gdb.breakpoints(). gdb/ChangeLog: 2021-01-21 Hannes Domani <ssbssa@yahoo.de> PR python/19151 * python/py-breakpoint.c (bppy_get_location): Handle bp_hardware_breakpoint. (bppy_init): Likewise. (gdbpy_breakpoint_created): Likewise. gdb/doc/ChangeLog: 2021-01-21 Hannes Domani <ssbssa@yahoo.de> PR python/19151 * python.texi (Breakpoints In Python): Document gdb.BP_HARDWARE_BREAKPOINT. gdb/testsuite/ChangeLog: 2021-01-21 Hannes Domani <ssbssa@yahoo.de> PR python/19151 * gdb.python/py-breakpoint.exp: Add tests for hardware breakpoints.
This commit is contained in:
parent
7cb6d92a3f
commit
325d39e4e0
6 changed files with 53 additions and 2 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2021-01-21 Hannes Domani <ssbssa@yahoo.de>
|
||||||
|
|
||||||
|
PR python/19151
|
||||||
|
* python/py-breakpoint.c (bppy_get_location): Handle
|
||||||
|
bp_hardware_breakpoint.
|
||||||
|
(bppy_init): Likewise.
|
||||||
|
(gdbpy_breakpoint_created): Likewise.
|
||||||
|
|
||||||
2021-01-21 Simon Marchi <simon.marchi@polymtl.ca>
|
2021-01-21 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
* arm-tdep.c (arm_debug_printf): Add and use throughout file.
|
* arm-tdep.c (arm_debug_printf): Add and use throughout file.
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2021-01-21 Hannes Domani <ssbssa@yahoo.de>
|
||||||
|
|
||||||
|
PR python/19151
|
||||||
|
* python.texi (Breakpoints In Python): Document
|
||||||
|
gdb.BP_HARDWARE_BREAKPOINT.
|
||||||
|
|
||||||
2021-01-01 Joel Brobecker <brobecker@adacore.com>
|
2021-01-01 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* gdb.texinfo, refcard.tex: Update copyright year range.
|
* gdb.texinfo, refcard.tex: Update copyright year range.
|
||||||
|
|
|
@ -5402,6 +5402,10 @@ module:
|
||||||
@item gdb.BP_BREAKPOINT
|
@item gdb.BP_BREAKPOINT
|
||||||
Normal code breakpoint.
|
Normal code breakpoint.
|
||||||
|
|
||||||
|
@vindex BP_HARDWARE_BREAKPOINT
|
||||||
|
@item gdb.BP_HARDWARE_BREAKPOINT
|
||||||
|
Hardware assisted code breakpoint.
|
||||||
|
|
||||||
@vindex BP_WATCHPOINT
|
@vindex BP_WATCHPOINT
|
||||||
@item gdb.BP_WATCHPOINT
|
@item gdb.BP_WATCHPOINT
|
||||||
Watchpoint breakpoint.
|
Watchpoint breakpoint.
|
||||||
|
|
|
@ -58,6 +58,7 @@ static struct pybp_code pybp_codes[] =
|
||||||
{
|
{
|
||||||
{ "BP_NONE", bp_none},
|
{ "BP_NONE", bp_none},
|
||||||
{ "BP_BREAKPOINT", bp_breakpoint},
|
{ "BP_BREAKPOINT", bp_breakpoint},
|
||||||
|
{ "BP_HARDWARE_BREAKPOINT", bp_hardware_breakpoint},
|
||||||
{ "BP_WATCHPOINT", bp_watchpoint},
|
{ "BP_WATCHPOINT", bp_watchpoint},
|
||||||
{ "BP_HARDWARE_WATCHPOINT", bp_hardware_watchpoint},
|
{ "BP_HARDWARE_WATCHPOINT", bp_hardware_watchpoint},
|
||||||
{ "BP_READ_WATCHPOINT", bp_read_watchpoint},
|
{ "BP_READ_WATCHPOINT", bp_read_watchpoint},
|
||||||
|
@ -383,7 +384,8 @@ bppy_get_location (PyObject *self, void *closure)
|
||||||
|
|
||||||
BPPY_REQUIRE_VALID (obj);
|
BPPY_REQUIRE_VALID (obj);
|
||||||
|
|
||||||
if (obj->bp->type != bp_breakpoint)
|
if (obj->bp->type != bp_breakpoint
|
||||||
|
&& obj->bp->type != bp_hardware_breakpoint)
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
|
||||||
const char *str = event_location_to_string (obj->bp->location.get ());
|
const char *str = event_location_to_string (obj->bp->location.get ());
|
||||||
|
@ -793,6 +795,7 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case bp_breakpoint:
|
case bp_breakpoint:
|
||||||
|
case bp_hardware_breakpoint:
|
||||||
{
|
{
|
||||||
event_location_up location;
|
event_location_up location;
|
||||||
symbol_name_match_type func_name_match_type
|
symbol_name_match_type func_name_match_type
|
||||||
|
@ -834,7 +837,7 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
create_breakpoint (python_gdbarch,
|
create_breakpoint (python_gdbarch,
|
||||||
location.get (), NULL, -1, NULL,
|
location.get (), NULL, -1, NULL,
|
||||||
0,
|
0,
|
||||||
temporary_bp, bp_breakpoint,
|
temporary_bp, type,
|
||||||
0,
|
0,
|
||||||
AUTO_BOOLEAN_TRUE,
|
AUTO_BOOLEAN_TRUE,
|
||||||
ops,
|
ops,
|
||||||
|
@ -1008,6 +1011,7 @@ gdbpy_breakpoint_created (struct breakpoint *bp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (bp->type != bp_breakpoint
|
if (bp->type != bp_breakpoint
|
||||||
|
&& bp->type != bp_hardware_breakpoint
|
||||||
&& 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
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2021-01-21 Hannes Domani <ssbssa@yahoo.de>
|
||||||
|
|
||||||
|
PR python/19151
|
||||||
|
* gdb.python/py-breakpoint.exp: Add tests for hardware breakpoints.
|
||||||
|
|
||||||
2021-01-20 Simon Marchi <simon.marchi@polymtl.ca>
|
2021-01-20 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
* lib/tuiterm.exp: Rename _cur_x/_cur_y to _cur_col/_cur_row.
|
* lib/tuiterm.exp: Rename _cur_x/_cur_y to _cur_col/_cur_row.
|
||||||
|
|
|
@ -252,6 +252,29 @@ proc_with_prefix test_bkpt_invisible { } {
|
||||||
"Check maint info breakpoints shows invisible breakpoints"
|
"Check maint info breakpoints shows invisible breakpoints"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc_with_prefix test_hardware_breakpoints { } {
|
||||||
|
global srcfile testfile hex decimal
|
||||||
|
|
||||||
|
# Start with a fresh gdb.
|
||||||
|
clean_restart ${testfile}
|
||||||
|
|
||||||
|
if ![runto_main] then {
|
||||||
|
fail "cannot run to main."
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_breakpoints
|
||||||
|
|
||||||
|
gdb_test "python hbp1 = gdb.Breakpoint(\"add\", type=gdb.BP_HARDWARE_BREAKPOINT)" \
|
||||||
|
".*Hardware assisted breakpoint ($decimal)+ at .*$srcfile, line ($decimal)+\." \
|
||||||
|
"Set hardware breakpoint"
|
||||||
|
gdb_test "python print (gdb.breakpoints()\[0\].type == gdb.BP_HARDWARE_BREAKPOINT)" \
|
||||||
|
"True" "Check hardware breakpoint type"
|
||||||
|
gdb_test "continue" \
|
||||||
|
".*Breakpoint ($decimal)+, add.*" \
|
||||||
|
"Test hardware breakpoint stop"
|
||||||
|
}
|
||||||
|
|
||||||
proc_with_prefix test_watchpoints { } {
|
proc_with_prefix test_watchpoints { } {
|
||||||
global srcfile testfile hex decimal
|
global srcfile testfile hex decimal
|
||||||
|
|
||||||
|
@ -718,6 +741,7 @@ 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_hardware_breakpoints
|
||||||
test_watchpoints
|
test_watchpoints
|
||||||
test_bkpt_internal
|
test_bkpt_internal
|
||||||
test_bkpt_eval_funcs
|
test_bkpt_eval_funcs
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue