diff options
author | Hannes Domani <ssbssa@yahoo.de> | 2021-01-02 13:51:27 +0100 |
---|---|---|
committer | Hannes Domani <ssbssa@yahoo.de> | 2021-01-21 18:55:45 +0100 |
commit | 325d39e4e09f0b7c8eec7e33ca93d0a9c82632ec (patch) | |
tree | 4f977273e946326896d6961751d7eebd26199d00 | |
parent | 7cb6d92a3f723f26830ca23b39ec94c2920936c4 (diff) | |
download | fsf-binutils-gdb-325d39e4e09f0b7c8eec7e33ca93d0a9c82632ec.zip fsf-binutils-gdb-325d39e4e09f0b7c8eec7e33ca93d0a9c82632ec.tar.gz fsf-binutils-gdb-325d39e4e09f0b7c8eec7e33ca93d0a9c82632ec.tar.bz2 |
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.
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/doc/python.texi | 4 | ||||
-rw-r--r-- | gdb/python/py-breakpoint.c | 8 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-breakpoint.exp | 24 |
6 files changed, 53 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b51bb15..468447d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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> * arm-tdep.c (arm_debug_printf): Add and use throughout file. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index d718fdd..64eb52b 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -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> * gdb.texinfo, refcard.tex: Update copyright year range. diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 0f776f5..3556859 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -5402,6 +5402,10 @@ module: @item gdb.BP_BREAKPOINT Normal code breakpoint. +@vindex BP_HARDWARE_BREAKPOINT +@item gdb.BP_HARDWARE_BREAKPOINT +Hardware assisted code breakpoint. + @vindex BP_WATCHPOINT @item gdb.BP_WATCHPOINT Watchpoint breakpoint. diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c index 9f6ae96..3fbb1c6 100644 --- a/gdb/python/py-breakpoint.c +++ b/gdb/python/py-breakpoint.c @@ -58,6 +58,7 @@ static struct pybp_code pybp_codes[] = { { "BP_NONE", bp_none}, { "BP_BREAKPOINT", bp_breakpoint}, + { "BP_HARDWARE_BREAKPOINT", bp_hardware_breakpoint}, { "BP_WATCHPOINT", bp_watchpoint}, { "BP_HARDWARE_WATCHPOINT", bp_hardware_watchpoint}, { "BP_READ_WATCHPOINT", bp_read_watchpoint}, @@ -383,7 +384,8 @@ bppy_get_location (PyObject *self, void *closure) 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; 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) { case bp_breakpoint: + case bp_hardware_breakpoint: { event_location_up location; symbol_name_match_type func_name_match_type @@ -834,7 +837,7 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs) create_breakpoint (python_gdbarch, location.get (), NULL, -1, NULL, 0, - temporary_bp, bp_breakpoint, + temporary_bp, type, 0, AUTO_BOOLEAN_TRUE, ops, @@ -1008,6 +1011,7 @@ gdbpy_breakpoint_created (struct breakpoint *bp) return; if (bp->type != bp_breakpoint + && bp->type != bp_hardware_breakpoint && bp->type != bp_watchpoint && bp->type != bp_hardware_watchpoint && bp->type != bp_read_watchpoint diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 554d9e0..507b985 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -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> * lib/tuiterm.exp: Rename _cur_x/_cur_y to _cur_col/_cur_row. diff --git a/gdb/testsuite/gdb.python/py-breakpoint.exp b/gdb/testsuite/gdb.python/py-breakpoint.exp index 3c06a89..64a70ab 100644 --- a/gdb/testsuite/gdb.python/py-breakpoint.exp +++ b/gdb/testsuite/gdb.python/py-breakpoint.exp @@ -252,6 +252,29 @@ proc_with_prefix test_bkpt_invisible { } { "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 { } { global srcfile testfile hex decimal @@ -718,6 +741,7 @@ test_bkpt_basic test_bkpt_deletion test_bkpt_cond_and_cmds test_bkpt_invisible +test_hardware_breakpoints test_watchpoints test_bkpt_internal test_bkpt_eval_funcs |