+
+ /* Returns the core given a thread, or -1 if not known. */
+ virtual int core_of_thread (ptid_t ptid);
+
+ /* Returns true if the read_loadmap target op is supported. */
+ virtual bool supports_read_loadmap ();
+
+ /* Read loadmaps. Read LEN bytes at OFFSET into a buffer at MYADDR. */
+ virtual int read_loadmap (const char *annex, CORE_ADDR offset,
+ unsigned char *myaddr, unsigned int len);
+
+ /* Target specific qSupported support. FEATURES is an array of
+ features with COUNT elements. */
+ virtual void process_qsupported (char **features, int count);
+
+ /* Return true if the target supports tracepoints, false otherwise. */
+ virtual bool supports_tracepoints ();
+
+ /* Read PC from REGCACHE. */
+ virtual CORE_ADDR read_pc (regcache *regcache);
+
+ /* Write PC to REGCACHE. */
+ virtual void write_pc (regcache *regcache, CORE_ADDR pc);
+
+ /* Return true if the thread_stopped op is supported. */
+ virtual bool supports_thread_stopped ();
+
+ /* Return true if THREAD is known to be stopped now. */
+ virtual bool thread_stopped (thread_info *thread);
+
+ /* Return true if the get_tib_address op is supported. */
+ virtual bool supports_get_tib_address ();
+
+ /* Read Thread Information Block address. */
+ virtual int get_tib_address (ptid_t ptid, CORE_ADDR *address);
+
+ /* Pause all threads. If FREEZE, arrange for any resume attempt to
+ be ignored until an unpause_all call unfreezes threads again.
+ There can be nested calls to pause_all, so a freeze counter
+ should be maintained. */
+ virtual void pause_all (bool freeze);
+
+ /* Unpause all threads. Threads that hadn't been resumed by the
+ client should be left stopped. Basically a pause/unpause call
+ pair should not end up resuming threads that were stopped before
+ the pause call. */
+ virtual void unpause_all (bool unfreeze);
+
+ /* Stabilize all threads. That is, force them out of jump pads. */
+ virtual void stabilize_threads ();
+
+ /* Return true if the install_fast_tracepoint_jump_pad op is
+ supported. */
+ virtual bool supports_fast_tracepoints ();
+
+ /* Install a fast tracepoint jump pad. TPOINT is the address of the
+ tracepoint internal object as used by the IPA agent. TPADDR is
+ the address of tracepoint. COLLECTOR is address of the function
+ the jump pad redirects to. LOCKADDR is the address of the jump
+ pad lock object. ORIG_SIZE is the size in bytes of the
+ instruction at TPADDR. JUMP_ENTRY points to the address of the
+ jump pad entry, and on return holds the address past the end of
+ the created jump pad. If a trampoline is created by the function,
+ then TRAMPOLINE and TRAMPOLINE_SIZE return the address and size of
+ the trampoline, else they remain unchanged. JJUMP_PAD_INSN is a
+ buffer containing a copy of the instruction at TPADDR.
+ ADJUST_INSN_ADDR and ADJUST_INSN_ADDR_END are output parameters that
+ return the address range where the instruction at TPADDR was relocated
+ to. If an error occurs, the ERR may be used to pass on an error
+ message. */
+ virtual int install_fast_tracepoint_jump_pad
+ (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector,
+ CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry,
+ CORE_ADDR *trampoline, ULONGEST *trampoline_size,
+ unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size,
+ CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end,
+ char *err);
+
+ /* Return the minimum length of an instruction that can be safely
+ overwritten for use as a fast tracepoint. */
+ virtual int get_min_fast_tracepoint_insn_len ();
+
+ /* Return the bytecode operations vector for the current inferior.
+ Returns nullptr if bytecode compilation is not supported. */
+ virtual struct emit_ops *emit_ops ();
+
+ /* Returns true if the target supports disabling randomization. */
+ virtual bool supports_disable_randomization ();
+
+ /* Return true if the qxfer_libraries_svr4 op is supported. */
+ virtual bool supports_qxfer_libraries_svr4 ();
+
+ /* Read solib info on SVR4 platforms. */
+ virtual int qxfer_libraries_svr4 (const char *annex,
+ unsigned char *readbuf,
+ unsigned const char *writebuf,
+ CORE_ADDR offset, int len);
+
+ /* Return true if target supports debugging agent. */
+ virtual bool supports_agent ();
+
+ /* Enable branch tracing for PTID based on CONF and allocate a branch trace
+ target information struct for reading and for disabling branch trace. */
+ virtual btrace_target_info *enable_btrace (ptid_t ptid,
+ const btrace_config *conf);
+
+ /* Disable branch tracing.
+ Returns zero on success, non-zero otherwise. */
+ virtual int disable_btrace (btrace_target_info *tinfo);
+
+ /* Read branch trace data into buffer.
+ Return 0 on success; print an error message into BUFFER and return -1,
+ otherwise. */
+ virtual int read_btrace (btrace_target_info *tinfo, buffer *buf,
+ enum btrace_read_type type);
+
+ /* Read the branch trace configuration into BUFFER.
+ Return 0 on success; print an error message into BUFFER and return -1
+ otherwise. */
+ virtual int read_btrace_conf (const btrace_target_info *tinfo,
+ buffer *buf);
+
+ /* Return true if target supports range stepping. */
+ virtual bool supports_range_stepping ();
+
+ /* Return true if the pid_to_exec_file op is supported. */
+ virtual bool supports_pid_to_exec_file ();
+
+ /* Return the full absolute name of the executable file that was
+ run to create the process PID. If the executable file cannot
+ be determined, NULL is returned. Otherwise, a pointer to a
+ character string containing the pathname is returned. This
+ string should be copied into a buffer by the client if the string
+ will not be immediately used, or if it must persist. */
+ virtual char *pid_to_exec_file (int pid);
+
+ /* Return true if any of the multifs ops is supported. */
+ virtual bool supports_multifs ();
+
+ /* Multiple-filesystem-aware open. Like open(2), but operating in
+ the filesystem as it appears to process PID. Systems where all
+ processes share a common filesystem should not override this.
+ The default behavior is to use open(2). */
+ virtual int multifs_open (int pid, const char *filename,
+ int flags, mode_t mode);
+
+ /* Multiple-filesystem-aware unlink. Like unlink(2), but operates
+ in the filesystem as it appears to process PID. Systems where
+ all processes share a common filesystem should not override this.
+ The default behavior is to use unlink(2). */
+ virtual int multifs_unlink (int pid, const char *filename);
+
+ /* Multiple-filesystem-aware readlink. Like readlink(2), but
+ operating in the filesystem as it appears to process PID.
+ Systems where all processes share a common filesystem should
+ not override this. The default behavior is to use readlink(2). */
+ virtual ssize_t multifs_readlink (int pid, const char *filename,
+ char *buf, size_t bufsiz);
+
+ /* Return the breakpoint kind for this target based on PC. The
+ PCPTR is adjusted to the real memory location in case a flag
+ (e.g., the Thumb bit on ARM) was present in the PC. */
+ virtual int breakpoint_kind_from_pc (CORE_ADDR *pcptr);
+
+ /* Return the software breakpoint from KIND. KIND can have target
+ specific meaning like the Z0 kind parameter.
+ SIZE is set to the software breakpoint's length in memory. */
+ virtual const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) = 0;
+
+ /* Return the breakpoint kind for this target based on the current
+ processor state (e.g. the current instruction mode on ARM) and the
+ PC. The PCPTR is adjusted to the real memory location in case a
+ flag (e.g., the Thumb bit on ARM) is present in the PC. */
+ virtual int breakpoint_kind_from_current_state (CORE_ADDR *pcptr);
+
+ /* Return the thread's name, or NULL if the target is unable to
+ determine it. The returned value must not be freed by the
+ caller. */
+ virtual const char *thread_name (ptid_t thread);
+
+ /* Thread ID to (numeric) thread handle: Return true on success and
+ false for failure. Return pointer to thread handle via HANDLE
+ and the handle's length via HANDLE_LEN. */
+ virtual bool thread_handle (ptid_t ptid, gdb_byte **handle,
+ int *handle_len);
+
+ /* Returns true if the target can software single step. */
+ virtual bool supports_software_single_step ();
+
+ /* Return true if the target supports catch syscall. */
+ virtual bool supports_catch_syscall ();
+
+ /* Return tdesc index for IPA. */
+ virtual int get_ipa_tdesc_idx ();