1 /* Target operations for the remote server for GDB.
2 Copyright (C) 2002-2023 Free Software Foundation, Inc.
4 Contributed by MontaVista Software.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 #include "tracepoint.h"
23 #include "gdbsupport/byte-vector.h"
27 #include <sys/types.h>
30 process_stratum_target
*the_target
;
37 client_state
&cs
= get_client_state ();
38 thread_info
*found
= find_thread_ptid (cs
.general_thread
);
42 process_info
*proc
= find_process_pid (cs
.general_thread
.pid ());
46 ("did not find thread nor process for general_thread %s",
47 cs
.general_thread
.to_string ().c_str ());
52 ("did not find thread for general_thread %s, but found process",
53 cs
.general_thread
.to_string ().c_str ());
55 switch_to_process (proc
);
58 switch_to_thread (found
);
60 return (current_thread
!= NULL
);
66 set_desired_process ()
68 client_state
&cs
= get_client_state ();
70 process_info
*proc
= find_process_pid (cs
.general_thread
.pid ());
74 ("did not find process for general_thread %s",
75 cs
.general_thread
.to_string ().c_str ());
77 switch_to_process (proc
);
79 return proc
!= nullptr;
85 read_inferior_memory (CORE_ADDR memaddr
, unsigned char *myaddr
, int len
)
87 /* At the time of writing, GDB only sends write packets with LEN==0,
88 not read packets (see comment in target_write_memory), but it
89 doesn't hurt to prevent problems if it ever does, or we're
90 connected to some client other than GDB that does. */
94 int res
= the_target
->read_memory (memaddr
, myaddr
, len
);
95 check_mem_read (memaddr
, myaddr
, len
);
99 /* See target/target.h. */
102 target_read_memory (CORE_ADDR memaddr
, gdb_byte
*myaddr
, ssize_t len
)
104 return read_inferior_memory (memaddr
, myaddr
, len
);
107 /* See target/target.h. */
110 target_read_uint32 (CORE_ADDR memaddr
, uint32_t *result
)
112 return read_inferior_memory (memaddr
, (gdb_byte
*) result
, sizeof (*result
));
115 /* See target/target.h. */
118 target_write_memory (CORE_ADDR memaddr
, const unsigned char *myaddr
,
121 /* GDB may send X packets with LEN==0, for probing packet support.
122 If we let such a request go through, then buffer.data() below may
123 return NULL, which may confuse target implementations. Handle it
124 here to avoid lower levels having to care about this case. */
128 /* Make a copy of the data because check_mem_write may need to
130 gdb::byte_vector
buffer (myaddr
, myaddr
+ len
);
131 check_mem_write (memaddr
, buffer
.data (), myaddr
, len
);
132 return the_target
->write_memory (memaddr
, buffer
.data (), len
);
136 mywait (ptid_t ptid
, struct target_waitstatus
*ourstatus
,
137 target_wait_flags options
, int connected_wait
)
144 ret
= target_wait (ptid
, ourstatus
, options
);
146 /* We don't expose _LOADED events to gdbserver core. See the
147 `dlls_changed' global. */
148 if (ourstatus
->kind () == TARGET_WAITKIND_LOADED
)
149 ourstatus
->set_stopped (GDB_SIGNAL_0
);
151 /* If GDB is connected through TCP/serial, then GDBserver will most
152 probably be running on its own terminal/console, so it's nice to
153 print there why is GDBserver exiting. If however, GDB is
154 connected through stdio, then there's no need to spam the GDB
155 console with this -- the user will already see the exit through
156 regular GDB output, in that same terminal. */
157 if (!remote_connection_is_stdio ())
159 if (ourstatus
->kind () == TARGET_WAITKIND_EXITED
)
161 "\nChild exited with status %d\n", ourstatus
->exit_status ());
162 else if (ourstatus
->kind () == TARGET_WAITKIND_SIGNALLED
)
163 fprintf (stderr
, "\nChild terminated with signal = 0x%x (%s)\n",
164 gdb_signal_to_host (ourstatus
->sig ()),
165 gdb_signal_to_name (ourstatus
->sig ()));
174 /* See target/target.h. */
177 target_stop_and_wait (ptid_t ptid
)
179 struct target_waitstatus status
;
180 bool was_non_stop
= non_stop
;
181 struct thread_resume resume_info
;
183 resume_info
.thread
= ptid
;
184 resume_info
.kind
= resume_stop
;
185 resume_info
.sig
= GDB_SIGNAL_0
;
186 the_target
->resume (&resume_info
, 1);
189 mywait (ptid
, &status
, 0, 0);
190 non_stop
= was_non_stop
;
193 /* See target/target.h. */
196 target_wait (ptid_t ptid
, struct target_waitstatus
*status
,
197 target_wait_flags options
)
199 return the_target
->wait (ptid
, status
, options
);
202 /* See target/target.h. */
205 target_mourn_inferior (ptid_t ptid
)
207 the_target
->mourn (find_process_pid (ptid
.pid ()));
210 /* See target/target.h. */
213 target_continue_no_signal (ptid_t ptid
)
215 struct thread_resume resume_info
;
217 resume_info
.thread
= ptid
;
218 resume_info
.kind
= resume_continue
;
219 resume_info
.sig
= GDB_SIGNAL_0
;
220 the_target
->resume (&resume_info
, 1);
223 /* See target/target.h. */
226 target_continue (ptid_t ptid
, enum gdb_signal signal
)
228 struct thread_resume resume_info
;
230 resume_info
.thread
= ptid
;
231 resume_info
.kind
= resume_continue
;
232 resume_info
.sig
= gdb_signal_to_host (signal
);
233 the_target
->resume (&resume_info
, 1);
236 /* See target/target.h. */
239 target_supports_multi_process (void)
241 return the_target
->supports_multi_process ();
245 set_target_ops (process_stratum_target
*target
)
250 /* Convert pid to printable format. */
253 target_pid_to_str (ptid_t ptid
)
255 if (ptid
== minus_one_ptid
)
256 return string_printf("<all threads>");
257 else if (ptid
== null_ptid
)
258 return string_printf("<null thread>");
259 else if (ptid
.tid () != 0)
260 return string_printf("Thread %d.0x%s",
262 phex_nz (ptid
.tid (), sizeof (ULONGEST
)));
263 else if (ptid
.lwp () != 0)
264 return string_printf("LWP %d.%ld",
265 ptid
.pid (), ptid
.lwp ());
267 return string_printf("Process %d",
272 kill_inferior (process_info
*proc
)
274 gdb_agent_about_to_close (proc
->pid
);
276 return the_target
->kill (proc
);
281 target_terminal_state
target_terminal::m_terminal_state
282 = target_terminal_state::is_ours
;
284 /* See target/target.h. */
287 target_terminal::init ()
289 /* Placeholder needed because of fork_inferior. Not necessary on
293 /* See target/target.h. */
296 target_terminal::inferior ()
298 /* Placeholder needed because of fork_inferior. Not necessary on
302 /* See target/target.h. */
305 target_terminal::ours ()
307 /* Placeholder needed because of fork_inferior. Not necessary on
311 /* See target/target.h. */
314 target_terminal::ours_for_output (void)
319 /* See target/target.h. */
322 target_terminal::info (const char *arg
, int from_tty
)
327 /* Default implementations of target ops.
328 See target.h for definitions. */
331 process_stratum_target::post_create_inferior ()
337 process_stratum_target::look_up_symbols ()
343 process_stratum_target::supports_read_auxv ()
349 process_stratum_target::read_auxv (int pid
, CORE_ADDR offset
,
350 unsigned char *myaddr
, unsigned int len
)
352 gdb_assert_not_reached ("target op read_auxv not supported");
356 process_stratum_target::supports_z_point_type (char z_type
)
362 process_stratum_target::insert_point (enum raw_bkpt_type type
,
364 int size
, raw_breakpoint
*bp
)
370 process_stratum_target::remove_point (enum raw_bkpt_type type
,
372 int size
, raw_breakpoint
*bp
)
378 process_stratum_target::stopped_by_sw_breakpoint ()
384 process_stratum_target::supports_stopped_by_sw_breakpoint ()
390 process_stratum_target::stopped_by_hw_breakpoint ()
396 process_stratum_target::supports_stopped_by_hw_breakpoint ()
402 process_stratum_target::supports_hardware_single_step ()
408 process_stratum_target::stopped_by_watchpoint ()
414 process_stratum_target::stopped_data_address ()
420 process_stratum_target::supports_read_offsets ()
426 process_stratum_target::supports_memory_tagging ()
432 process_stratum_target::fetch_memtags (CORE_ADDR address
, size_t len
,
433 gdb::byte_vector
&tags
, int type
)
435 gdb_assert_not_reached ("target op fetch_memtags not supported");
439 process_stratum_target::store_memtags (CORE_ADDR address
, size_t len
,
440 const gdb::byte_vector
&tags
, int type
)
442 gdb_assert_not_reached ("target op store_memtags not supported");
446 process_stratum_target::read_offsets (CORE_ADDR
*text
, CORE_ADDR
*data
)
448 gdb_assert_not_reached ("target op read_offsets not supported");
452 process_stratum_target::supports_get_tls_address ()
458 process_stratum_target::get_tls_address (thread_info
*thread
,
460 CORE_ADDR load_module
,
463 gdb_assert_not_reached ("target op get_tls_address not supported");
467 process_stratum_target::supports_qxfer_osdata ()
473 process_stratum_target::qxfer_osdata (const char *annex
,
474 unsigned char *readbuf
,
475 unsigned const char *writebuf
,
476 CORE_ADDR offset
, int len
)
478 gdb_assert_not_reached ("target op qxfer_osdata not supported");
482 process_stratum_target::supports_qxfer_siginfo ()
488 process_stratum_target::qxfer_siginfo (const char *annex
,
489 unsigned char *readbuf
,
490 unsigned const char *writebuf
,
491 CORE_ADDR offset
, int len
)
493 gdb_assert_not_reached ("target op qxfer_siginfo not supported");
497 process_stratum_target::supports_non_stop ()
503 process_stratum_target::async (bool enable
)
509 process_stratum_target::start_non_stop (bool enable
)
518 process_stratum_target::supports_multi_process ()
524 process_stratum_target::supports_fork_events ()
530 process_stratum_target::supports_vfork_events ()
536 process_stratum_target::supports_exec_events ()
542 process_stratum_target::handle_new_gdb_connection ()
548 process_stratum_target::handle_monitor_command (char *mon
)
554 process_stratum_target::core_of_thread (ptid_t ptid
)
560 process_stratum_target::supports_read_loadmap ()
566 process_stratum_target::read_loadmap (const char *annex
,
568 unsigned char *myaddr
,
571 gdb_assert_not_reached ("target op read_loadmap not supported");
575 process_stratum_target::process_qsupported
576 (gdb::array_view
<const char * const> features
)
582 process_stratum_target::supports_tracepoints ()
588 process_stratum_target::read_pc (regcache
*regcache
)
590 gdb_assert_not_reached ("process_target::read_pc: Unable to find PC");
594 process_stratum_target::write_pc (regcache
*regcache
, CORE_ADDR pc
)
596 gdb_assert_not_reached ("process_target::write_pc: Unable to update PC");
600 process_stratum_target::supports_thread_stopped ()
606 process_stratum_target::thread_stopped (thread_info
*thread
)
608 gdb_assert_not_reached ("target op thread_stopped not supported");
612 process_stratum_target::supports_get_tib_address ()
618 process_stratum_target::get_tib_address (ptid_t ptid
, CORE_ADDR
*address
)
620 gdb_assert_not_reached ("target op get_tib_address not supported");
624 process_stratum_target::pause_all (bool freeze
)
630 process_stratum_target::unpause_all (bool unfreeze
)
636 process_stratum_target::stabilize_threads ()
642 process_stratum_target::supports_fast_tracepoints ()
648 process_stratum_target::install_fast_tracepoint_jump_pad
649 (CORE_ADDR tpoint
, CORE_ADDR tpaddr
, CORE_ADDR collector
,
650 CORE_ADDR lockaddr
, ULONGEST orig_size
, CORE_ADDR
*jump_entry
,
651 CORE_ADDR
*trampoline
, ULONGEST
*trampoline_size
,
652 unsigned char *jjump_pad_insn
, ULONGEST
*jjump_pad_insn_size
,
653 CORE_ADDR
*adjusted_insn_addr
, CORE_ADDR
*adjusted_insn_addr_end
,
656 gdb_assert_not_reached ("target op install_fast_tracepoint_jump_pad "
661 process_stratum_target::get_min_fast_tracepoint_insn_len ()
667 process_stratum_target::emit_ops ()
673 process_stratum_target::supports_disable_randomization ()
679 process_stratum_target::supports_qxfer_libraries_svr4 ()
685 process_stratum_target::qxfer_libraries_svr4 (const char *annex
,
686 unsigned char *readbuf
,
687 unsigned const char *writebuf
,
688 CORE_ADDR offset
, int len
)
690 gdb_assert_not_reached ("target op qxfer_libraries_svr4 not supported");
694 process_stratum_target::supports_agent ()
700 process_stratum_target::supports_btrace ()
706 process_stratum_target::enable_btrace (thread_info
*tp
,
707 const btrace_config
*conf
)
709 error (_("Target does not support branch tracing."));
713 process_stratum_target::disable_btrace (btrace_target_info
*tinfo
)
715 error (_("Target does not support branch tracing."));
719 process_stratum_target::read_btrace (btrace_target_info
*tinfo
,
721 enum btrace_read_type type
)
723 error (_("Target does not support branch tracing."));
727 process_stratum_target::read_btrace_conf (const btrace_target_info
*tinfo
,
730 error (_("Target does not support branch tracing."));
734 process_stratum_target::supports_range_stepping ()
740 process_stratum_target::supports_pid_to_exec_file ()
746 process_stratum_target::pid_to_exec_file (int pid
)
748 gdb_assert_not_reached ("target op pid_to_exec_file not supported");
752 process_stratum_target::supports_multifs ()
758 process_stratum_target::multifs_open (int pid
, const char *filename
,
759 int flags
, mode_t mode
)
761 return open (filename
, flags
, mode
);
765 process_stratum_target::multifs_unlink (int pid
, const char *filename
)
767 return unlink (filename
);
771 process_stratum_target::multifs_readlink (int pid
, const char *filename
,
772 char *buf
, size_t bufsiz
)
774 return readlink (filename
, buf
, bufsiz
);
778 process_stratum_target::breakpoint_kind_from_pc (CORE_ADDR
*pcptr
)
780 /* The default behavior is to use the size of a breakpoint as the
783 sw_breakpoint_from_kind (0, &size
);
788 process_stratum_target::breakpoint_kind_from_current_state (CORE_ADDR
*pcptr
)
790 return breakpoint_kind_from_pc (pcptr
);
794 process_stratum_target::thread_name (ptid_t thread
)
800 process_stratum_target::thread_handle (ptid_t ptid
, gdb_byte
**handle
,
807 process_stratum_target::thread_pending_parent (thread_info
*thread
)
813 process_stratum_target::thread_pending_child (thread_info
*thread
)
819 process_stratum_target::supports_software_single_step ()
825 process_stratum_target::supports_catch_syscall ()
831 process_stratum_target::get_ipa_tdesc_idx ()