aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2022-05-05 09:54:59 -0400
committerSimon Marchi <simon.marchi@efficios.com>2022-05-05 10:09:22 -0400
commitd890c720b8c4daf8892a175296d8e88ec992c92d (patch)
tree482d385e3089d0f769d1948cde9c24a32aa3976d
parent8e1ada9e0bd4f57597b835b2d09b100d24c604d8 (diff)
downloadfsf-binutils-gdb-d890c720b8c4daf8892a175296d8e88ec992c92d.zip
fsf-binutils-gdb-d890c720b8c4daf8892a175296d8e88ec992c92d.tar.gz
fsf-binutils-gdb-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
-rw-r--r--gdb/regcache.c25
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++)