Rename to allow_rust_tests
[binutils-gdb.git] / gdb / amd64-fbsd-tdep.c
index f87c976dd613872f94aee64cd0d2f270c9fb0d0f..2ddbcebe2250c017de4dde18f8a22df1f4807008 100644 (file)
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD/amd64.
 
-   Copyright (C) 2003-2022 Free Software Foundation, Inc.
+   Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -37,6 +37,9 @@
    16-bit segment registers.  */
 #define AMD64_FBSD_SIZEOF_GREGSET      (22 * 8)
 
+/* The segment base register set consists of 2 64-bit registers.  */
+#define AMD64_FBSD_SIZEOF_SEGBASES_REGSET      (2 * 8)
+
 /* Register maps.  */
 
 static const struct regcache_map_entry amd64_fbsd_gregmap[] =
@@ -70,6 +73,13 @@ static const struct regcache_map_entry amd64_fbsd_gregmap[] =
   { 0 }
 };
 
+static const struct regcache_map_entry amd64_fbsd_segbases_regmap[] =
+{
+  { 1, AMD64_FSBASE_REGNUM, 0 },
+  { 1, AMD64_GSBASE_REGNUM, 0 },
+  { 0 }
+};
+
 /* This layout including fsbase and gsbase was adopted in FreeBSD
    8.0.  */
 
@@ -120,6 +130,11 @@ const struct regset amd64_fbsd_gregset =
   amd64_fbsd_gregmap, regcache_supply_regset, regcache_collect_regset
 };
 
+const struct regset amd64_fbsd_segbases_regset =
+{
+  amd64_fbsd_segbases_regmap, regcache_supply_regset, regcache_collect_regset
+};
+
 /* Support for signal handlers.  */
 
 /* In a signal frame, rsp points to a 'struct sigframe' which is
@@ -154,12 +169,10 @@ const struct regset amd64_fbsd_gregset =
 
 static void
 amd64_fbsd_sigframe_init (const struct tramp_frame *self,
-                         struct frame_info *this_frame,
+                         frame_info_ptr this_frame,
                          struct trad_frame_cache *this_cache,
                          CORE_ADDR func)
 {
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR sp = get_frame_register_unsigned (this_frame, AMD64_RSP_REGNUM);
   CORE_ADDR mcontext_addr
     = (sp
@@ -249,12 +262,15 @@ amd64fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
                                        void *cb_data,
                                        const struct regcache *regcache)
 {
-  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   cb (".reg", AMD64_FBSD_SIZEOF_GREGSET, AMD64_FBSD_SIZEOF_GREGSET,
       &amd64_fbsd_gregset, NULL, cb_data);
   cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, &amd64_fpregset,
       NULL, cb_data);
+  cb (".reg-x86-segbases", AMD64_FBSD_SIZEOF_SEGBASES_REGSET,
+      AMD64_FBSD_SIZEOF_SEGBASES_REGSET, &amd64_fbsd_segbases_regset,
+      "segment bases", cb_data);
   cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0), X86_XSTATE_SIZE (tdep->xcr0),
       &amd64fbsd_xstateregset, "XSAVE extended state", cb_data);
 }
@@ -283,7 +299,7 @@ amd64fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid,
 static void
 amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
 
   /* Generic FreeBSD support. */
   fbsd_init_abi (info, gdbarch);