+
+ /* 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 TP based on CONF and allocate a branch trace
+ target information struct for reading and for disabling branch trace. */
+ virtual btrace_target_info *enable_btrace (thread_info *tp,
+ 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 const 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);
+
+ /* If THREAD is a fork child that was not reported to GDB, return its parent
+ else nullptr. */
+ virtual thread_info *thread_pending_parent (thread_info *thread);
+
+ /* If THREAD is the parent of a fork child that was not reported to GDB,
+ return this child, else nullptr. */
+ virtual thread_info *thread_pending_child (thread_info *thread);
+
+ /* 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 ();
+
+ /* Returns true if the target supports memory tagging facilities. */
+ virtual bool supports_memory_tagging ();
+
+ /* Return the allocated memory tags of type TYPE associated with
+ [ADDRESS, ADDRESS + LEN) in TAGS.
+
+ Returns true if successful and false otherwise. */
+ virtual bool fetch_memtags (CORE_ADDR address, size_t len,
+ gdb::byte_vector &tags, int type);
+
+ /* Write the allocation tags of type TYPE contained in TAGS to the
+ memory range [ADDRESS, ADDRESS + LEN).
+
+ Returns true if successful and false otherwise. */
+ virtual bool store_memtags (CORE_ADDR address, size_t len,
+ const gdb::byte_vector &tags, int type);