Add minimal and functional NetBSD/amd64 gdbserver
[binutils-gdb.git] / gdbserver / netbsd-low.h
1 /* Copyright (C) 2020 Free Software Foundation, Inc.
2
3 This file is part of GDB.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17
18 #ifndef GDBSERVER_NETBSD_LOW_H
19 #define GDBSERVER_NETBSD_LOW_H
20
21 struct regcache;
22 struct target_desc;
23
24 /* Some information relative to a given register set. */
25
26 struct netbsd_regset_info
27 {
28 /* The ptrace request needed to get/set registers of this set. */
29 int get_request, set_request;
30 /* The size of the register set. */
31 int size;
32 /* Fill the buffer BUF from the contents of the given REGCACHE. */
33 void (*fill_function) (struct regcache *regcache, char *buf);
34 /* Store the register value in BUF in the given REGCACHE. */
35 void (*store_function) (struct regcache *regcache, const char *buf);
36 };
37
38 /* A list of regsets for the target being debugged, terminated by an entry
39 where the size is negative.
40
41 This list should be created by the target-specific code. */
42
43 extern struct netbsd_regset_info netbsd_target_regsets[];
44
45 /* The target-specific operations for NetBSD support. */
46
47 struct netbsd_target_ops
48 {
49 /* Architecture-specific setup. */
50 void (*arch_setup) ();
51 };
52
53 /* Target ops definitions for a NetBSD target. */
54
55 class netbsd_process_target : public process_stratum_target
56 {
57 public:
58
59 int create_inferior (const char *program,
60 const std::vector<char *> &program_args) override;
61
62 void post_create_inferior () override;
63
64 int attach (unsigned long pid) override;
65
66 int kill (process_info *proc) override;
67
68 int detach (process_info *proc) override;
69
70 void mourn (process_info *proc) override;
71
72 void join (int pid) override;
73
74 bool thread_alive (ptid_t pid) override;
75
76 void resume (thread_resume *resume_info, size_t n) override;
77
78 ptid_t wait (ptid_t ptid, target_waitstatus *status,
79 int options) override;
80
81 void fetch_registers (regcache *regcache, int regno) override;
82
83 void store_registers (regcache *regcache, int regno) override;
84
85 int read_memory (CORE_ADDR memaddr, unsigned char *myaddr,
86 int len) override;
87
88 int write_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
89 int len) override;
90
91 void request_interrupt () override;
92
93 bool supports_read_auxv () override;
94
95 int read_auxv (CORE_ADDR offset, unsigned char *myaddr,
96 unsigned int len) override;
97
98 bool supports_hardware_single_step () override;
99
100 const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override;
101
102 bool supports_z_point_type (char z_type) override;
103
104 int insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
105 int size, struct raw_breakpoint *bp) override;
106
107 int remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
108 int size, struct raw_breakpoint *bp) override;
109
110 bool stopped_by_sw_breakpoint () override;
111
112 bool supports_qxfer_siginfo () override;
113
114 int qxfer_siginfo (const char *annex, unsigned char *readbuf,
115 unsigned const char *writebuf, CORE_ADDR offset,
116 int len) override;
117
118 bool supports_stopped_by_sw_breakpoint () override;
119
120 bool supports_non_stop () override;
121
122 bool supports_multi_process () override;
123
124 bool supports_fork_events () override;
125
126 bool supports_vfork_events () override;
127
128 bool supports_exec_events () override;
129
130 bool supports_disable_randomization () override;
131
132 bool supports_qxfer_libraries_svr4 () override;
133
134 int qxfer_libraries_svr4 (const char*, unsigned char*, const unsigned char*,
135 CORE_ADDR, int) override;
136
137 bool supports_pid_to_exec_file () override;
138
139 char *pid_to_exec_file (int pid) override;
140
141 const char *thread_name (ptid_t thread) override;
142
143 bool supports_catch_syscall () override;
144 };
145
146 /* The inferior's target description. This is a global because the
147 NetBSD ports support neither bi-arch nor multi-process. */
148
149 extern struct netbsd_target_ops the_low_target;
150
151 /* XXX: multilib */
152 extern const struct target_desc *netbsd_tdesc;
153
154 #endif /* GDBSERVER_NETBSD_LOW_H */