Home | History | Annotate | Line # | Download | only in gdbserver
      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