diff options
author | Kamil Rytarowski <n54@gmx.com> | 2020-09-23 04:26:37 +0200 |
---|---|---|
committer | Kamil Rytarowski <n54@gmx.com> | 2020-10-02 00:39:20 +0200 |
commit | 15397b0e058a84afcc2b6f4af383514e32f99a3d (patch) | |
tree | e5c4cf8c479d501fa645bb58158b4ce3b7a28a12 /gdbserver/netbsd-amd64-low.cc | |
parent | e2a2a24a8e78427ff8667d625f5befbe88c328bb (diff) | |
download | gdb-15397b0e058a84afcc2b6f4af383514e32f99a3d.zip gdb-15397b0e058a84afcc2b6f4af383514e32f99a3d.tar.gz gdb-15397b0e058a84afcc2b6f4af383514e32f99a3d.tar.bz2 |
Refactor the NetBSD amd64 gdbserver support
Replace the pre-C++ construct of netbsd_target_ops, netbsd_regset_info
and netbsd_tdesc with C++ inheritance approach found in the Linux
gdbserver code. Add netbsd_amd64_target, that inherits from the
netbsd_process_target class and add proper singleton object for
the_netbsd_target, initialized from netbsd_amd64_target.
Call low_arch_setup () on post process creation, which sets machine
specific properties of the traced process.
Remove global singleton the_netbsd_target object from the generic
gdbserver code.
This refactoring introduces no functional change from the end-user
point of view.
gdbserver/ChangeLog:
* 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.
Diffstat (limited to 'gdbserver/netbsd-amd64-low.cc')
-rw-r--r-- | gdbserver/netbsd-amd64-low.cc | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/gdbserver/netbsd-amd64-low.cc b/gdbserver/netbsd-amd64-low.cc index 9b8ea9b..c59ebc8 100644 --- a/gdbserver/netbsd-amd64-low.cc +++ b/gdbserver/netbsd-amd64-low.cc @@ -155,22 +155,9 @@ netbsd_x86_64_store_gregset (struct regcache *regcache, const char *buf) 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), @@ -179,9 +166,41 @@ struct netbsd_regset_info netbsd_target_regsets[] = {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; |