60fb14f69e66a2ed03ec34946bd8f3c1080b7146
[binutils-gdb.git] / gdbserver / target.h
1 /* Target operations for the remote server for GDB.
2 Copyright (C) 2002-2020 Free Software Foundation, Inc.
3
4 Contributed by MontaVista Software.
5
6 This file is part of GDB.
7
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.
12
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.
17
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/>. */
20
21 #ifndef GDBSERVER_TARGET_H
22 #define GDBSERVER_TARGET_H
23
24 #include <sys/types.h> /* for mode_t */
25 #include "target/target.h"
26 #include "target/resume.h"
27 #include "target/wait.h"
28 #include "target/waitstatus.h"
29 #include "mem-break.h"
30 #include "gdbsupport/btrace-common.h"
31 #include <vector>
32
33 struct emit_ops;
34 struct buffer;
35 struct process_info;
36
37 /* This structure describes how to resume a particular thread (or all
38 threads) based on the client's request. If thread is -1, then this
39 entry applies to all threads. These are passed around as an
40 array. */
41
42 struct thread_resume
43 {
44 ptid_t thread;
45
46 /* How to "resume". */
47 enum resume_kind kind;
48
49 /* If non-zero, send this signal when we resume, or to stop the
50 thread. If stopping a thread, and this is 0, the target should
51 stop the thread however it best decides to (e.g., SIGSTOP on
52 linux; SuspendThread on win32). This is a host signal value (not
53 enum gdb_signal). */
54 int sig;
55
56 /* Range to single step within. Valid only iff KIND is resume_step.
57
58 Single-step once, and then continuing stepping as long as the
59 thread stops in this range. (If the range is empty
60 [STEP_RANGE_START == STEP_RANGE_END], then this is a single-step
61 request.) */
62 CORE_ADDR step_range_start; /* Inclusive */
63 CORE_ADDR step_range_end; /* Exclusive */
64 };
65
66 class process_target;
67
68 /* GDBserver doesn't have a concept of strata like GDB, but we call
69 its target vector "process_stratum" anyway for the benefit of
70 shared code. */
71 struct process_stratum_target
72 {
73 /* Stabilize all threads. That is, force them out of jump pads. */
74 void (*stabilize_threads) (void);
75
76 /* Install a fast tracepoint jump pad. TPOINT is the address of the
77 tracepoint internal object as used by the IPA agent. TPADDR is
78 the address of tracepoint. COLLECTOR is address of the function
79 the jump pad redirects to. LOCKADDR is the address of the jump
80 pad lock object. ORIG_SIZE is the size in bytes of the
81 instruction at TPADDR. JUMP_ENTRY points to the address of the
82 jump pad entry, and on return holds the address past the end of
83 the created jump pad. If a trampoline is created by the function,
84 then TRAMPOLINE and TRAMPOLINE_SIZE return the address and size of
85 the trampoline, else they remain unchanged. JJUMP_PAD_INSN is a
86 buffer containing a copy of the instruction at TPADDR.
87 ADJUST_INSN_ADDR and ADJUST_INSN_ADDR_END are output parameters that
88 return the address range where the instruction at TPADDR was relocated
89 to. If an error occurs, the ERR may be used to pass on an error
90 message. */
91 int (*install_fast_tracepoint_jump_pad) (CORE_ADDR tpoint, CORE_ADDR tpaddr,
92 CORE_ADDR collector,
93 CORE_ADDR lockaddr,
94 ULONGEST orig_size,
95 CORE_ADDR *jump_entry,
96 CORE_ADDR *trampoline,
97 ULONGEST *trampoline_size,
98 unsigned char *jjump_pad_insn,
99 ULONGEST *jjump_pad_insn_size,
100 CORE_ADDR *adjusted_insn_addr,
101 CORE_ADDR *adjusted_insn_addr_end,
102 char *err);
103
104 /* Return the bytecode operations vector for the current inferior.
105 Returns NULL if bytecode compilation is not supported. */
106 struct emit_ops *(*emit_ops) (void);
107
108 /* Returns true if the target supports disabling randomization. */
109 int (*supports_disable_randomization) (void);
110
111 /* Return the minimum length of an instruction that can be safely overwritten
112 for use as a fast tracepoint. */
113 int (*get_min_fast_tracepoint_insn_len) (void);
114
115 /* Read solib info on SVR4 platforms. */
116 int (*qxfer_libraries_svr4) (const char *annex, unsigned char *readbuf,
117 unsigned const char *writebuf,
118 CORE_ADDR offset, int len);
119
120 /* Return true if target supports debugging agent. */
121 int (*supports_agent) (void);
122
123 /* Enable branch tracing for PTID based on CONF and allocate a branch trace
124 target information struct for reading and for disabling branch trace. */
125 struct btrace_target_info *(*enable_btrace)
126 (ptid_t ptid, const struct btrace_config *conf);
127
128 /* Disable branch tracing.
129 Returns zero on success, non-zero otherwise. */
130 int (*disable_btrace) (struct btrace_target_info *tinfo);
131
132 /* Read branch trace data into buffer.
133 Return 0 on success; print an error message into BUFFER and return -1,
134 otherwise. */
135 int (*read_btrace) (struct btrace_target_info *, struct buffer *,
136 enum btrace_read_type type);
137
138 /* Read the branch trace configuration into BUFFER.
139 Return 0 on success; print an error message into BUFFER and return -1
140 otherwise. */
141 int (*read_btrace_conf) (const struct btrace_target_info *, struct buffer *);
142
143 /* Return true if target supports range stepping. */
144 int (*supports_range_stepping) (void);
145
146 /* Return the full absolute name of the executable file that was
147 run to create the process PID. If the executable file cannot
148 be determined, NULL is returned. Otherwise, a pointer to a
149 character string containing the pathname is returned. This
150 string should be copied into a buffer by the client if the string
151 will not be immediately used, or if it must persist. */
152 char *(*pid_to_exec_file) (int pid);
153
154 /* Multiple-filesystem-aware open. Like open(2), but operating in
155 the filesystem as it appears to process PID. Systems where all
156 processes share a common filesystem should set this to NULL.
157 If NULL, the caller should fall back to open(2). */
158 int (*multifs_open) (int pid, const char *filename,
159 int flags, mode_t mode);
160
161 /* Multiple-filesystem-aware unlink. Like unlink(2), but operates
162 in the filesystem as it appears to process PID. Systems where
163 all processes share a common filesystem should set this to NULL.
164 If NULL, the caller should fall back to unlink(2). */
165 int (*multifs_unlink) (int pid, const char *filename);
166
167 /* Multiple-filesystem-aware readlink. Like readlink(2), but
168 operating in the filesystem as it appears to process PID.
169 Systems where all processes share a common filesystem should
170 set this to NULL. If NULL, the caller should fall back to
171 readlink(2). */
172 ssize_t (*multifs_readlink) (int pid, const char *filename,
173 char *buf, size_t bufsiz);
174
175 /* Return the breakpoint kind for this target based on PC. The PCPTR is
176 adjusted to the real memory location in case a flag (e.g., the Thumb bit on
177 ARM) was present in the PC. */
178 int (*breakpoint_kind_from_pc) (CORE_ADDR *pcptr);
179
180 /* Return the software breakpoint from KIND. KIND can have target
181 specific meaning like the Z0 kind parameter.
182 SIZE is set to the software breakpoint's length in memory. */
183 const gdb_byte *(*sw_breakpoint_from_kind) (int kind, int *size);
184
185 /* Return the thread's name, or NULL if the target is unable to determine it.
186 The returned value must not be freed by the caller. */
187 const char *(*thread_name) (ptid_t thread);
188
189 /* Return the breakpoint kind for this target based on the current
190 processor state (e.g. the current instruction mode on ARM) and the
191 PC. The PCPTR is adjusted to the real memory location in case a flag
192 (e.g., the Thumb bit on ARM) is present in the PC. */
193 int (*breakpoint_kind_from_current_state) (CORE_ADDR *pcptr);
194
195 /* Returns true if the target can software single step. */
196 int (*supports_software_single_step) (void);
197
198 /* Return 1 if the target supports catch syscall, 0 (or leave the
199 callback NULL) otherwise. */
200 int (*supports_catch_syscall) (void);
201
202 /* Return tdesc index for IPA. */
203 int (*get_ipa_tdesc_idx) (void);
204
205 /* Thread ID to (numeric) thread handle: Return true on success and
206 false for failure. Return pointer to thread handle via HANDLE
207 and the handle's length via HANDLE_LEN. */
208 bool (*thread_handle) (ptid_t ptid, gdb_byte **handle, int *handle_len);
209
210 /* The object that will gradually replace this struct. */
211 process_target *pt;
212 };
213
214 class process_target
215 {
216 public:
217
218 virtual ~process_target () = default;
219
220 /* Start a new process.
221
222 PROGRAM is a path to the program to execute.
223 PROGRAM_ARGS is a standard NULL-terminated array of arguments,
224 to be passed to the inferior as ``argv'' (along with PROGRAM).
225
226 Returns the new PID on success, -1 on failure. Registers the new
227 process with the process list. */
228 virtual int create_inferior (const char *program,
229 const std::vector<char *> &program_args) = 0;
230
231 /* Do additional setup after a new process is created, including
232 exec-wrapper completion. */
233 virtual void post_create_inferior ();
234
235 /* Attach to a running process.
236
237 PID is the process ID to attach to, specified by the user
238 or a higher layer.
239
240 Returns -1 if attaching is unsupported, 0 on success, and calls
241 error() otherwise. */
242 virtual int attach (unsigned long pid) = 0;
243
244 /* Kill process PROC. Return -1 on failure, and 0 on success. */
245 virtual int kill (process_info *proc) = 0;
246
247 /* Detach from process PROC. Return -1 on failure, and 0 on
248 success. */
249 virtual int detach (process_info *proc) = 0;
250
251 /* The inferior process has died. Do what is right. */
252 virtual void mourn (process_info *proc) = 0;
253
254 /* Wait for process PID to exit. */
255 virtual void join (int pid) = 0;
256
257 /* Return true iff the thread with process ID PID is alive. */
258 virtual bool thread_alive (ptid_t pid) = 0;
259
260 /* Resume the inferior process. */
261 virtual void resume (thread_resume *resume_info, size_t n) = 0;
262
263 /* Wait for the inferior process or thread to change state. Store
264 status through argument pointer STATUS.
265
266 PTID = -1 to wait for any pid to do something, PTID(pid,0,0) to
267 wait for any thread of process pid to do something. Return ptid
268 of child, or -1 in case of error; store status through argument
269 pointer STATUS. OPTIONS is a bit set of options defined as
270 TARGET_W* above. If options contains TARGET_WNOHANG and there's
271 no child stop to report, return is
272 null_ptid/TARGET_WAITKIND_IGNORE. */
273 virtual ptid_t wait (ptid_t ptid, target_waitstatus *status,
274 int options) = 0;
275
276 /* Fetch registers from the inferior process.
277
278 If REGNO is -1, fetch all registers; otherwise, fetch at least REGNO. */
279 virtual void fetch_registers (regcache *regcache, int regno) = 0;
280
281 /* Store registers to the inferior process.
282
283 If REGNO is -1, store all registers; otherwise, store at least REGNO. */
284 virtual void store_registers (regcache *regcache, int regno) = 0;
285
286 /* Prepare to read or write memory from the inferior process.
287 Targets use this to do what is necessary to get the state of the
288 inferior such that it is possible to access memory.
289
290 This should generally only be called from client facing routines,
291 such as gdb_read_memory/gdb_write_memory, or the GDB breakpoint
292 insertion routine.
293
294 Like `read_memory' and `write_memory' below, returns 0 on success
295 and errno on failure. */
296 virtual int prepare_to_access_memory ();
297
298 /* Undo the effects of prepare_to_access_memory. */
299 virtual void done_accessing_memory ();
300
301 /* Read memory from the inferior process. This should generally be
302 called through read_inferior_memory, which handles breakpoint shadowing.
303
304 Read LEN bytes at MEMADDR into a buffer at MYADDR.
305
306 Returns 0 on success and errno on failure. */
307 virtual int read_memory (CORE_ADDR memaddr, unsigned char *myaddr,
308 int len) = 0;
309
310 /* Write memory to the inferior process. This should generally be
311 called through target_write_memory, which handles breakpoint shadowing.
312
313 Write LEN bytes from the buffer at MYADDR to MEMADDR.
314
315 Returns 0 on success and errno on failure. */
316 virtual int write_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
317 int len) = 0;
318
319 /* Query GDB for the values of any symbols we're interested in.
320 This function is called whenever we receive a "qSymbols::"
321 query, which corresponds to every time more symbols (might)
322 become available. */
323 virtual void look_up_symbols ();
324
325 /* Send an interrupt request to the inferior process,
326 however is appropriate. */
327 virtual void request_interrupt () = 0;
328
329 /* Return true if the read_auxv target op is supported. */
330 virtual bool supports_read_auxv ();
331
332 /* Read auxiliary vector data from the inferior process.
333
334 Read LEN bytes at OFFSET into a buffer at MYADDR. */
335 virtual int read_auxv (CORE_ADDR offset, unsigned char *myaddr,
336 unsigned int len);
337
338 /* Returns true if GDB Z breakpoint type TYPE is supported, false
339 otherwise. The type is coded as follows:
340 '0' - software-breakpoint
341 '1' - hardware-breakpoint
342 '2' - write watchpoint
343 '3' - read watchpoint
344 '4' - access watchpoint
345 */
346 virtual bool supports_z_point_type (char z_type);
347
348 /* Insert and remove a break or watchpoint.
349 Returns 0 on success, -1 on failure and 1 on unsupported. */
350 virtual int insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
351 int size, raw_breakpoint *bp);
352
353 virtual int remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
354 int size, raw_breakpoint *bp);
355
356 /* Returns true if the target stopped because it executed a software
357 breakpoint instruction, false otherwise. */
358 virtual bool stopped_by_sw_breakpoint ();
359
360 /* Returns true if the target knows whether a trap was caused by a
361 SW breakpoint triggering. */
362 virtual bool supports_stopped_by_sw_breakpoint ();
363
364 /* Returns true if the target stopped for a hardware breakpoint. */
365 virtual bool stopped_by_hw_breakpoint ();
366
367 /* Returns true if the target knows whether a trap was caused by a
368 HW breakpoint triggering. */
369 virtual bool supports_stopped_by_hw_breakpoint ();
370
371 /* Returns true if the target can do hardware single step. */
372 virtual bool supports_hardware_single_step ();
373
374 /* Returns true if target was stopped due to a watchpoint hit, false
375 otherwise. */
376 virtual bool stopped_by_watchpoint ();
377
378 /* Returns the address associated with the watchpoint that hit, if any;
379 returns 0 otherwise. */
380 virtual CORE_ADDR stopped_data_address ();
381
382 /* Return true if the read_offsets target op is supported. */
383 virtual bool supports_read_offsets ();
384
385 /* Reports the text, data offsets of the executable. This is
386 needed for uclinux where the executable is relocated during load
387 time. */
388 virtual int read_offsets (CORE_ADDR *text, CORE_ADDR *data);
389
390 /* Return true if the get_tls_address target op is supported. */
391 virtual bool supports_get_tls_address ();
392
393 /* Fetch the address associated with a specific thread local storage
394 area, determined by the specified THREAD, OFFSET, and LOAD_MODULE.
395 Stores it in *ADDRESS and returns zero on success; otherwise returns
396 an error code. A return value of -1 means this system does not
397 support the operation. */
398 virtual int get_tls_address (thread_info *thread, CORE_ADDR offset,
399 CORE_ADDR load_module, CORE_ADDR *address);
400
401 /* Fill BUF with an hostio error packet representing the last hostio
402 error. */
403 virtual void hostio_last_error (char *buf);
404
405 /* Return true if the qxfer_osdata target op is supported. */
406 virtual bool supports_qxfer_osdata ();
407
408 /* Read/Write OS data using qXfer packets. */
409 virtual int qxfer_osdata (const char *annex, unsigned char *readbuf,
410 unsigned const char *writebuf,
411 CORE_ADDR offset, int len);
412
413 /* Return true if the qxfer_siginfo target op is supported. */
414 virtual bool supports_qxfer_siginfo ();
415
416 /* Read/Write extra signal info. */
417 virtual int qxfer_siginfo (const char *annex, unsigned char *readbuf,
418 unsigned const char *writebuf,
419 CORE_ADDR offset, int len);
420
421 /* Return true if non-stop mode is supported. */
422 virtual bool supports_non_stop ();
423
424 /* Enables async target events. Returns the previous enable
425 state. */
426 virtual bool async (bool enable);
427
428 /* Switch to non-stop (ENABLE == true) or all-stop (ENABLE == false)
429 mode. Return 0 on success, -1 otherwise. */
430 virtual int start_non_stop (bool enable);
431
432 /* Returns true if the target supports multi-process debugging. */
433 virtual bool supports_multi_process ();
434
435 /* Returns true if fork events are supported. */
436 virtual bool supports_fork_events ();
437
438 /* Returns true if vfork events are supported. */
439 virtual bool supports_vfork_events ();
440
441 /* Returns true if exec events are supported. */
442 virtual bool supports_exec_events ();
443
444 /* Allows target to re-initialize connection-specific settings. */
445 virtual void handle_new_gdb_connection ();
446
447 /* The target-specific routine to process monitor command.
448 Returns 1 if handled, or 0 to perform default processing. */
449 virtual int handle_monitor_command (char *mon);
450
451 /* Returns the core given a thread, or -1 if not known. */
452 virtual int core_of_thread (ptid_t ptid);
453
454 /* Returns true if the read_loadmap target op is supported. */
455 virtual bool supports_read_loadmap ();
456
457 /* Read loadmaps. Read LEN bytes at OFFSET into a buffer at MYADDR. */
458 virtual int read_loadmap (const char *annex, CORE_ADDR offset,
459 unsigned char *myaddr, unsigned int len);
460
461 /* Target specific qSupported support. FEATURES is an array of
462 features with COUNT elements. */
463 virtual void process_qsupported (char **features, int count);
464
465 /* Return true if the target supports tracepoints, false otherwise. */
466 virtual bool supports_tracepoints ();
467
468 /* Read PC from REGCACHE. */
469 virtual CORE_ADDR read_pc (regcache *regcache);
470
471 /* Write PC to REGCACHE. */
472 virtual void write_pc (regcache *regcache, CORE_ADDR pc);
473
474 /* Return true if the thread_stopped op is supported. */
475 virtual bool supports_thread_stopped ();
476
477 /* Return true if THREAD is known to be stopped now. */
478 virtual bool thread_stopped (thread_info *thread);
479
480 /* Return true if the get_tib_address op is supported. */
481 virtual bool supports_get_tib_address ();
482
483 /* Read Thread Information Block address. */
484 virtual int get_tib_address (ptid_t ptid, CORE_ADDR *address);
485
486 /* Pause all threads. If FREEZE, arrange for any resume attempt to
487 be ignored until an unpause_all call unfreezes threads again.
488 There can be nested calls to pause_all, so a freeze counter
489 should be maintained. */
490 virtual void pause_all (bool freeze);
491
492 /* Unpause all threads. Threads that hadn't been resumed by the
493 client should be left stopped. Basically a pause/unpause call
494 pair should not end up resuming threads that were stopped before
495 the pause call. */
496 virtual void unpause_all (bool unfreeze);
497 };
498
499 extern process_stratum_target *the_target;
500
501 void set_target_ops (process_stratum_target *);
502
503 #define target_create_inferior(program, program_args) \
504 the_target->pt->create_inferior (program, program_args)
505
506 #define target_post_create_inferior() \
507 the_target->pt->post_create_inferior ()
508
509 #define myattach(pid) \
510 the_target->pt->attach (pid)
511
512 int kill_inferior (process_info *proc);
513
514 #define target_supports_fork_events() \
515 the_target->pt->supports_fork_events ()
516
517 #define target_supports_vfork_events() \
518 the_target->pt->supports_vfork_events ()
519
520 #define target_supports_exec_events() \
521 the_target->pt->supports_exec_events ()
522
523 #define target_handle_new_gdb_connection() \
524 the_target->pt->handle_new_gdb_connection ()
525
526 #define detach_inferior(proc) \
527 the_target->pt->detach (proc)
528
529 #define mythread_alive(pid) \
530 the_target->pt->thread_alive (pid)
531
532 #define fetch_inferior_registers(regcache, regno) \
533 the_target->pt->fetch_registers (regcache, regno)
534
535 #define store_inferior_registers(regcache, regno) \
536 the_target->pt->store_registers (regcache, regno)
537
538 #define join_inferior(pid) \
539 the_target->pt->join (pid)
540
541 #define target_supports_non_stop() \
542 the_target->pt->supports_non_stop ()
543
544 #define target_async(enable) \
545 the_target->pt->async (enable)
546
547 #define target_process_qsupported(features, count) \
548 the_target->pt->process_qsupported (features, count)
549
550 #define target_supports_catch_syscall() \
551 (the_target->supports_catch_syscall ? \
552 (*the_target->supports_catch_syscall) () : 0)
553
554 #define target_get_ipa_tdesc_idx() \
555 (the_target->get_ipa_tdesc_idx \
556 ? (*the_target->get_ipa_tdesc_idx) () : 0)
557
558 #define target_supports_tracepoints() \
559 the_target->pt->supports_tracepoints ()
560
561 #define target_supports_fast_tracepoints() \
562 (the_target->install_fast_tracepoint_jump_pad != NULL)
563
564 #define target_get_min_fast_tracepoint_insn_len() \
565 (the_target->get_min_fast_tracepoint_insn_len \
566 ? (*the_target->get_min_fast_tracepoint_insn_len) () : 0)
567
568 #define target_thread_stopped(thread) \
569 the_target->pt->thread_stopped (thread)
570
571 #define target_pause_all(freeze) \
572 the_target->pt->pause_all (freeze)
573
574 #define target_unpause_all(unfreeze) \
575 the_target->pt->unpause_all (unfreeze)
576
577 #define stabilize_threads() \
578 do \
579 { \
580 if (the_target->stabilize_threads) \
581 (*the_target->stabilize_threads) (); \
582 } while (0)
583
584 #define install_fast_tracepoint_jump_pad(tpoint, tpaddr, \
585 collector, lockaddr, \
586 orig_size, \
587 jump_entry, \
588 trampoline, trampoline_size, \
589 jjump_pad_insn, \
590 jjump_pad_insn_size, \
591 adjusted_insn_addr, \
592 adjusted_insn_addr_end, \
593 err) \
594 (*the_target->install_fast_tracepoint_jump_pad) (tpoint, tpaddr, \
595 collector,lockaddr, \
596 orig_size, jump_entry, \
597 trampoline, \
598 trampoline_size, \
599 jjump_pad_insn, \
600 jjump_pad_insn_size, \
601 adjusted_insn_addr, \
602 adjusted_insn_addr_end, \
603 err)
604
605 #define target_emit_ops() \
606 (the_target->emit_ops ? (*the_target->emit_ops) () : NULL)
607
608 #define target_supports_disable_randomization() \
609 (the_target->supports_disable_randomization ? \
610 (*the_target->supports_disable_randomization) () : 0)
611
612 #define target_supports_agent() \
613 (the_target->supports_agent ? \
614 (*the_target->supports_agent) () : 0)
615
616 static inline struct btrace_target_info *
617 target_enable_btrace (ptid_t ptid, const struct btrace_config *conf)
618 {
619 if (the_target->enable_btrace == nullptr)
620 error (_("Target does not support branch tracing."));
621
622 return (*the_target->enable_btrace) (ptid, conf);
623 }
624
625 static inline int
626 target_disable_btrace (struct btrace_target_info *tinfo)
627 {
628 if (the_target->disable_btrace == nullptr)
629 error (_("Target does not support branch tracing."));
630
631 return (*the_target->disable_btrace) (tinfo);
632 }
633
634 static inline int
635 target_read_btrace (struct btrace_target_info *tinfo,
636 struct buffer *buffer,
637 enum btrace_read_type type)
638 {
639 if (the_target->read_btrace == nullptr)
640 error (_("Target does not support branch tracing."));
641
642 return (*the_target->read_btrace) (tinfo, buffer, type);
643 }
644
645 static inline int
646 target_read_btrace_conf (struct btrace_target_info *tinfo,
647 struct buffer *buffer)
648 {
649 if (the_target->read_btrace_conf == nullptr)
650 error (_("Target does not support branch tracing."));
651
652 return (*the_target->read_btrace_conf) (tinfo, buffer);
653 }
654
655 #define target_supports_range_stepping() \
656 (the_target->supports_range_stepping ? \
657 (*the_target->supports_range_stepping) () : 0)
658
659 #define target_supports_stopped_by_sw_breakpoint() \
660 the_target->pt->supports_stopped_by_sw_breakpoint ()
661
662 #define target_stopped_by_sw_breakpoint() \
663 the_target->pt->stopped_by_sw_breakpoint ()
664
665 #define target_supports_stopped_by_hw_breakpoint() \
666 the_target->pt->supports_stopped_by_hw_breakpoint ()
667
668 #define target_supports_hardware_single_step() \
669 the_target->pt->supports_hardware_single_step ()
670
671 #define target_stopped_by_hw_breakpoint() \
672 the_target->pt->stopped_by_hw_breakpoint ()
673
674 #define target_breakpoint_kind_from_pc(pcptr) \
675 (the_target->breakpoint_kind_from_pc \
676 ? (*the_target->breakpoint_kind_from_pc) (pcptr) \
677 : default_breakpoint_kind_from_pc (pcptr))
678
679 #define target_breakpoint_kind_from_current_state(pcptr) \
680 (the_target->breakpoint_kind_from_current_state \
681 ? (*the_target->breakpoint_kind_from_current_state) (pcptr) \
682 : target_breakpoint_kind_from_pc (pcptr))
683
684 #define target_supports_software_single_step() \
685 (the_target->supports_software_single_step ? \
686 (*the_target->supports_software_single_step) () : 0)
687
688 ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options,
689 int connected_wait);
690
691 /* Prepare to read or write memory from the inferior process. See the
692 corresponding process_stratum_target methods for more details. */
693
694 int prepare_to_access_memory (void);
695 void done_accessing_memory (void);
696
697 #define target_core_of_thread(ptid) \
698 the_target->pt->core_of_thread (ptid)
699
700 #define target_thread_name(ptid) \
701 (the_target->thread_name ? (*the_target->thread_name) (ptid) \
702 : NULL)
703
704 #define target_thread_handle(ptid, handle, handle_len) \
705 (the_target->thread_handle ? (*the_target->thread_handle) \
706 (ptid, handle, handle_len) \
707 : false)
708
709 int read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len);
710
711 int set_desired_thread ();
712
713 const char *target_pid_to_str (ptid_t);
714
715 int default_breakpoint_kind_from_pc (CORE_ADDR *pcptr);
716
717 #endif /* GDBSERVER_TARGET_H */