/* Self tests for gdbarch for GDB, the GNU debugger.
- Copyright (C) 2017 Free Software Foundation, Inc.
+ Copyright (C) 2017-2020 Free Software Foundation, Inc.
This file is part of GDB.
#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 "gdbsupport/def-vector.h"
+#include "gdbarch.h"
namespace selftests {
-/* A mock process_stratum target_ops that doesn't read/write registers
- anywhere. */
-
-static int
-test_target_has_registers (target_ops *self)
-{
- return 1;
-}
-
-static int
-test_target_has_stack (target_ops *self)
-{
- return 1;
-}
-
-static int
-test_target_has_memory (target_ops *self)
-{
- return 1;
-}
-
-static void
-test_target_prepare_to_store (target_ops *self, regcache *regs)
-{
-}
-
-static void
-test_target_store_registers (target_ops *self, regcache *regs, int regno)
-{
-}
-
-class test_target_ops : public target_ops
-{
-public:
- test_target_ops ()
- : target_ops {}
- {
- to_magic = OPS_MAGIC;
- to_stratum = process_stratum;
- to_has_memory = test_target_has_memory;
- to_has_stack = test_target_has_stack;
- to_has_registers = test_target_has_registers;
- to_prepare_to_store = test_target_prepare_to_store;
- to_store_registers = test_target_store_registers;
-
- complete_target_initialization (this);
- }
-};
-
/* Test gdbarch methods register_to_value and value_to_register. */
static void
/* 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"));
+ if (current_top_target ()->stratum () >= process_stratum)
+ error (_("target already pushed"));
/* Create a mock environment. An inferior with a thread, with a
process_stratum target pushed. */
thread_info mock_thread (&mock_inferior, mock_ptid);
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. */
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);
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. */
if (TYPE_CODE (type) == TYPE_CODE_FLT)
{
- DOUBLEST d = 1.25;
-
/* Generate valid float format. */
- floatformat_from_doublest (floatformat_from_type (type),
- &d, expected.data ());
+ target_float_from_string (expected.data (), type, "1.25");
}
else
{