diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2022-05-05 09:54:59 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2022-05-05 10:09:22 -0400 |
commit | d890c720b8c4daf8892a175296d8e88ec992c92d (patch) | |
tree | 482d385e3089d0f769d1948cde9c24a32aa3976d /gdb | |
parent | 8e1ada9e0bd4f57597b835b2d09b100d24c604d8 (diff) | |
download | binutils-d890c720b8c4daf8892a175296d8e88ec992c92d.zip binutils-d890c720b8c4daf8892a175296d8e88ec992c92d.tar.gz binutils-d890c720b8c4daf8892a175296d8e88ec992c92d.tar.bz2 |
gdb: make regcache's cooked_write_test selftest work with native-extended-gdbserver board
Running
$ make check TESTS="gdb.gdb/unittest.exp" RUNTESTFLAGS="--target_board=native-extended-gdbserver"
I get some failures:
Running selftest regcache::cooked_write_test::i386.^M
Self test failed: target already pushed^M
Running selftest regcache::cooked_write_test::i386:intel.^M
Self test failed: target already pushed^M
Running selftest regcache::cooked_write_test::i386:x64-32.^M
Self test failed: target already pushed^M
Running selftest regcache::cooked_write_test::i386:x64-32:intel.^M
Self test failed: target already pushed^M
Running selftest regcache::cooked_write_test::i386:x86-64.^M
Self test failed: target already pushed^M
Running selftest regcache::cooked_write_test::i386:x86-64:intel.^M
Self test failed: target already pushed^M
Running selftest regcache::cooked_write_test::i8086.^M
Self test failed: target already pushed^M
This is because the native-extended-gdbserver automatically connects GDB
to a GDBserver on startup, and therefore pushes a remote target on the
initial inferior. cooked_write_test is currently written in a way that
errors out if the current inferior has a process_stratum_target pushed.
Rewrite it to use scoped_mock_context, so it doesn't depend on the
current inferior (the current one upon entering the function).
Change-Id: I0357f989eacbdecc4bf88b043754451b476052ad
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/regcache.c | 25 |
1 files changed, 2 insertions, 23 deletions
diff --git a/gdb/regcache.c b/gdb/regcache.c index a5e83da..037659e 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -1944,30 +1944,9 @@ cooked_read_test (struct gdbarch *gdbarch) static void cooked_write_test (struct gdbarch *gdbarch) { - /* Error out if debugging something, because we're going to push the - test target, which would pop any existing target. */ - if (current_inferior ()->top_target ()->stratum () >= process_stratum) - error (_("target already pushed")); - /* Create a mock environment. A process_stratum target pushed. */ - - target_ops_no_register mock_target; - - /* Push the process_stratum target so we can mock accessing - registers. */ - current_inferior ()->push_target (&mock_target); - - /* Pop it again on exit (return/exception). */ - struct on_exit - { - ~on_exit () - { - pop_all_targets_at_and_above (process_stratum); - } - } pop_targets; - - readwrite_regcache readwrite (&mock_target, gdbarch); - + scoped_mock_context<target_ops_no_register> ctx (gdbarch); + readwrite_regcache readwrite (&ctx.mock_target, gdbarch); const int num_regs = gdbarch_num_cooked_regs (gdbarch); for (auto regnum = 0; regnum < num_regs; regnum++) |