+2020-10-01 Kamil Rytarowski <n54@gmx.com>
+
+ * netbsd-amd64-low.cc (netbsd_x86_64_arch_setup): Remove.
+ (netbsd_target_regsets): Now const.
+ (the_low_target): Remove.
+ (class netbsd_amd64_target, the_netbsd_amd64_target)
+ (the_netbsd_target): Add.
+ * netbsd-low.cc (netbsd_process_target::post_create_inferior): Call
+ low_arch_setup ().
+ (netbsd_process_target::fetch_registers)
+ (netbsd_process_target::store_registers, initialize_low): Update.
+ (the_netbsd_target): Remove.
+ * netbsd-low.h (netbsd_target_regsets, netbsd_target_ops)
+ (the_low_target, netbsd_tdesc): Remove.
+ (netbsd_process_target::get_regs_info)
+ (netbsd_process_target::low_arch_setup): Add.
+
2020-09-23 Hannes Domani <ssbssa@yahoo.de>
* win32-low.cc: Remove local wow64_process variable.
netbsd_x86_64_supply_gp (AMD64_GS_REGNUM, GS);
}
-/* Implements the netbsd_target_ops.arch_setup routine. */
-
-static void
-netbsd_x86_64_arch_setup (void)
-{
- struct target_desc *tdesc
- = amd64_create_target_description (X86_XSTATE_SSE_MASK, false, false, false);
-
- init_target_desc (tdesc, amd64_expedite_regs);
-
- netbsd_tdesc = tdesc;
-}
-
/* Description of all the x86-netbsd register sets. */
-struct netbsd_regset_info netbsd_target_regsets[] =
+static const struct netbsd_regset_info netbsd_target_regsets[] =
{
/* General Purpose Registers. */
{PT_GETREGS, PT_SETREGS, sizeof (struct reg),
{0, 0, -1, NULL, NULL }
};
-/* The netbsd_target_ops vector for x86-netbsd. */
+/* NetBSD target op definitions for the amd64 architecture. */
-struct netbsd_target_ops the_low_target =
+class netbsd_amd64_target : public netbsd_process_target
{
- netbsd_x86_64_arch_setup,
+protected:
+ const netbsd_regset_info *get_regs_info () override;
+
+ void low_arch_setup () override;
};
+
+/* Return the information to access registers. */
+
+const netbsd_regset_info *
+netbsd_amd64_target::get_regs_info ()
+{
+ return netbsd_target_regsets;
+}
+
+/* Architecture-specific setup for the current process. */
+
+void
+netbsd_amd64_target::low_arch_setup ()
+{
+ target_desc *tdesc
+ = amd64_create_target_description (X86_XSTATE_SSE_MASK, false, false, false);
+
+ init_target_desc (tdesc, amd64_expedite_regs);
+
+ current_process ()->tdesc = tdesc;
+}
+
+/* The singleton target ops object. */
+
+static netbsd_amd64_target the_netbsd_amd64_target;
+
+/* The NetBSD target ops object. */
+
+netbsd_process_target *the_netbsd_target = &the_netbsd_amd64_target;
{
pid_t pid = current_process ()->pid;
netbsd_nat::enable_proc_events (pid);
+
+ low_arch_setup ();
}
/* Implement the attach target_ops method. */
void
netbsd_process_target::fetch_registers (struct regcache *regcache, int regno)
{
- struct netbsd_regset_info *regset = netbsd_target_regsets;
+ const netbsd_regset_info *regset = get_regs_info ();
ptid_t inferior_ptid = ptid_of (current_thread);
while (regset->size >= 0)
void
netbsd_process_target::store_registers (struct regcache *regcache, int regno)
{
- struct netbsd_regset_info *regset = netbsd_target_regsets;
+ const netbsd_regset_info *regset = get_regs_info ();
ptid_t inferior_ptid = ptid_of (current_thread);
while (regset->size >= 0)
return true;
}
-/* The NetBSD target ops object. */
-
-static netbsd_process_target the_netbsd_target;
-
void
initialize_low ()
{
- set_target_ops (&the_netbsd_target);
- the_low_target.arch_setup ();
+ set_target_ops (the_netbsd_target);
}
void (*store_function) (struct regcache *regcache, const char *buf);
};
-/* A list of regsets for the target being debugged, terminated by an entry
- where the size is negative.
-
- This list should be created by the target-specific code. */
-
-extern struct netbsd_regset_info netbsd_target_regsets[];
-
-/* The target-specific operations for NetBSD support. */
-
-struct netbsd_target_ops
-{
- /* Architecture-specific setup. */
- void (*arch_setup) ();
-};
-
/* Target ops definitions for a NetBSD target. */
class netbsd_process_target : public process_stratum_target
const char *thread_name (ptid_t thread) override;
bool supports_catch_syscall () override;
-};
-/* The inferior's target description. This is a global because the
- NetBSD ports support neither bi-arch nor multi-process. */
+protected:
+ /* The architecture-specific "low" methods are listed below. */
-extern struct netbsd_target_ops the_low_target;
+ /* Return the information to access registers. */
+ virtual const netbsd_regset_info *get_regs_info () = 0;
+
+ /* Architecture-specific setup for the current process. */
+ virtual void low_arch_setup () = 0;
+};
-/* XXX: multilib */
-extern const struct target_desc *netbsd_tdesc;
+extern netbsd_process_target *the_netbsd_target;
#endif /* GDBSERVER_NETBSD_LOW_H */