X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbarch-selftests.c;h=91aa9d8734425846bd8dc8de8c1759dbbcd7f33c;hb=60db1b8565060f4bd2287b060ea9724c93289982;hp=1655f13b0e9b2c5f075a86bee06e16b94327ae8c;hpb=e2882c85786571175a0b0bfc3bcd2f14620b1ea3;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbarch-selftests.c b/gdb/gdbarch-selftests.c index 1655f13b0e..91aa9d8734 100644 --- a/gdb/gdbarch-selftests.c +++ b/gdb/gdbarch-selftests.c @@ -1,6 +1,6 @@ /* Self tests for gdbarch for GDB, the GNU debugger. - Copyright (C) 2017-2018 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -18,14 +18,16 @@ along with this program. If not, see . */ #include "defs.h" -#if GDB_SELF_TEST -#include "selftest.h" +#include "gdbsupport/selftest.h" #include "selftest-arch.h" #include "inferior.h" #include "gdbthread.h" #include "target.h" +#include "test-target.h" #include "target-float.h" -#include "common/def-vector.h" +#include "gdbsupport/def-vector.h" +#include "gdbarch.h" +#include "progspace-and-thread.h" namespace selftests { @@ -69,55 +71,43 @@ register_to_value_test (struct gdbarch *gdbarch) builtin->builtin_char32, }; - /* Error out if debugging something, because we're going to push the - test target, which would pop any existing target. */ - if (current_target.to_stratum >= process_stratum) - error (_("target already pushed")); - /* Create a mock environment. An inferior with a thread, with a process_stratum target pushed. */ test_target_ops mock_target; ptid_t mock_ptid (1, 1); + program_space mock_pspace (new_address_space ()); inferior mock_inferior (mock_ptid.pid ()); - address_space mock_aspace {}; mock_inferior.gdbarch = gdbarch; - mock_inferior.aspace = &mock_aspace; + mock_inferior.aspace = mock_pspace.aspace; + mock_inferior.pspace = &mock_pspace; thread_info mock_thread (&mock_inferior, mock_ptid); + scoped_restore_current_pspace_and_thread restore_pspace_thread; + scoped_restore restore_thread_list - = make_scoped_restore (&thread_list, &mock_thread); + = make_scoped_restore (&mock_inferior.thread_list, &mock_thread); /* Add the mock inferior to the inferior list so that look ups by target+ptid can find it. */ scoped_restore restore_inferior_list - = make_scoped_restore (&inferior_list); - inferior_list = &mock_inferior; + = make_scoped_restore (&inferior_list, &mock_inferior); /* Switch to the mock inferior. */ - scoped_restore_current_inferior restore_current_inferior; - set_current_inferior (&mock_inferior); + switch_to_inferior_no_thread (&mock_inferior); /* Push the process_stratum target so we can mock accessing registers. */ 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; + SCOPE_EXIT { pop_all_targets_at_and_above (process_stratum); }; /* Switch to the mock thread. */ - scoped_restore restore_inferior_ptid - = make_scoped_restore (&inferior_ptid, mock_ptid); + switch_to_thread (&mock_thread); struct frame_info *frame = get_current_frame (); - const int num_regs = (gdbarch_num_regs (gdbarch) - + gdbarch_num_pseudo_regs (gdbarch)); + const int num_regs = gdbarch_num_cooked_regs (gdbarch); /* Test gdbarch methods register_to_value and value_to_register with different combinations of register numbers and types. */ @@ -129,7 +119,7 @@ register_to_value_test (struct gdbarch *gdbarch) { std::vector expected (TYPE_LENGTH (type), 0); - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) { /* Generate valid float format. */ target_float_from_string (expected.data (), type, "1.25"); @@ -168,13 +158,11 @@ register_to_value_test (struct gdbarch *gdbarch) } } // namespace selftests -#endif /* GDB_SELF_TEST */ +void _initialize_gdbarch_selftests (); void -_initialize_gdbarch_selftests (void) +_initialize_gdbarch_selftests () { -#if GDB_SELF_TEST selftests::register_test_foreach_arch ("register_to_value", selftests::register_to_value_test); -#endif }