Replace dwarf2_per_cu_data::cu backlink with per-objfile map
[deliverable/binutils-gdb.git] / gdb / gdbarch-selftests.c
index 58ed11287a0c3bef9e5a678f89d6d301fc4d4431..24a7515a3151d677f54e654f38c71d8a55cb2aaf 100644 (file)
@@ -1,6 +1,6 @@
 /* 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.
 
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #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
@@ -116,11 +70,6 @@ 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.  */
 
@@ -133,7 +82,7 @@ register_to_value_test (struct gdbarch *gdbarch)
   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.  */
@@ -150,21 +99,14 @@ register_to_value_test (struct gdbarch *gdbarch)
   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.  */
@@ -176,13 +118,10 @@ register_to_value_test (struct gdbarch *gdbarch)
            {
              std::vector<gdb_byte> expected (TYPE_LENGTH (type), 0);
 
-             if (TYPE_CODE (type) == TYPE_CODE_FLT)
+             if (type->code () == 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
                {
@@ -218,13 +157,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
 }
This page took 0.097164 seconds and 4 git commands to generate.