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