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 */ 155