1 /* Copyright (C) 2020-2023 Free Software Foundation, Inc.
3 This file is part of GDB.
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.
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.
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/>. */
18 #ifndef GDBSERVER_NETBSD_LOW_H
19 #define GDBSERVER_NETBSD_LOW_H
24 /* Some information relative to a given register set. */
26 struct netbsd_regset_info
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. */
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
);
38 /* Target ops definitions for a NetBSD target. */
40 class netbsd_process_target
: public process_stratum_target
44 int create_inferior (const char *program
,
45 const std::vector
<char *> &program_args
) override
;
47 void post_create_inferior () override
;
49 int attach (unsigned long pid
) override
;
51 int kill (process_info
*proc
) override
;
53 int detach (process_info
*proc
) override
;
55 void mourn (process_info
*proc
) override
;
57 void join (int pid
) override
;
59 bool thread_alive (ptid_t pid
) override
;
61 void resume (thread_resume
*resume_info
, size_t n
) override
;
63 ptid_t
wait (ptid_t ptid
, target_waitstatus
*status
,
64 target_wait_flags options
) override
;
66 void fetch_registers (regcache
*regcache
, int regno
) override
;
68 void store_registers (regcache
*regcache
, int regno
) override
;
70 int read_memory (CORE_ADDR memaddr
, unsigned char *myaddr
,
73 int write_memory (CORE_ADDR memaddr
, const unsigned char *myaddr
,
76 void request_interrupt () override
;
78 bool supports_read_auxv () override
;
80 int read_auxv (CORE_ADDR offset
, unsigned char *myaddr
,
81 unsigned int len
) override
;
83 bool supports_hardware_single_step () override
;
85 const gdb_byte
*sw_breakpoint_from_kind (int kind
, int *size
) override
;
87 bool supports_z_point_type (char z_type
) override
;
89 int insert_point (enum raw_bkpt_type type
, CORE_ADDR addr
,
90 int size
, struct raw_breakpoint
*bp
) override
;
92 int remove_point (enum raw_bkpt_type type
, CORE_ADDR addr
,
93 int size
, struct raw_breakpoint
*bp
) override
;
95 bool stopped_by_sw_breakpoint () override
;
97 bool supports_qxfer_siginfo () override
;
99 int qxfer_siginfo (const char *annex
, unsigned char *readbuf
,
100 unsigned const char *writebuf
, CORE_ADDR offset
,
103 bool supports_stopped_by_sw_breakpoint () override
;
105 bool supports_non_stop () override
;
107 bool supports_multi_process () override
;
109 bool supports_fork_events () override
;
111 bool supports_vfork_events () override
;
113 bool supports_exec_events () override
;
115 bool supports_disable_randomization () override
;
117 bool supports_qxfer_libraries_svr4 () override
;
119 int qxfer_libraries_svr4 (const char*, unsigned char*, const unsigned char*,
120 CORE_ADDR
, int) override
;
122 bool supports_pid_to_exec_file () override
;
124 const char *pid_to_exec_file (int pid
) override
;
126 const char *thread_name (ptid_t thread
) override
;
128 bool supports_catch_syscall () override
;
131 /* The architecture-specific "low" methods are listed below. */
133 /* Return the information to access registers. */
134 virtual const netbsd_regset_info
*get_regs_info () = 0;
136 /* Architecture-specific setup for the current process. */
137 virtual void low_arch_setup () = 0;
140 extern netbsd_process_target
*the_netbsd_target
;
142 #endif /* GDBSERVER_NETBSD_LOW_H */