|  | /* Process record and replay target for GDB, the GNU debugger. | 
|  |  | 
|  | Copyright (C) 2008-2024 Free Software Foundation, Inc. | 
|  |  | 
|  | This file is part of GDB. | 
|  |  | 
|  | This program is free software; you can redistribute it and/or modify | 
|  | it under the terms of the GNU General Public License as published by | 
|  | the Free Software Foundation; either version 3 of the License, or | 
|  | (at your option) any later version. | 
|  |  | 
|  | This program is distributed in the hope that it will be useful, | 
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | GNU General Public License for more details. | 
|  |  | 
|  | You should have received a copy of the GNU General Public License | 
|  | along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ | 
|  |  | 
|  | #ifndef GDB_RECORD_H | 
|  | #define GDB_RECORD_H | 
|  |  | 
|  | #include "target/waitstatus.h" | 
|  | #include "gdbsupport/enum-flags.h" | 
|  |  | 
|  | struct address_space; | 
|  | struct cmd_list_element; | 
|  | struct inferior; | 
|  |  | 
|  | extern unsigned int record_debug; | 
|  |  | 
|  | /* Allow record targets to add their own sub-commands.  */ | 
|  | extern struct cmd_list_element *record_cmdlist; | 
|  | extern struct cmd_list_element *set_record_cmdlist; | 
|  | extern struct cmd_list_element *show_record_cmdlist; | 
|  | extern struct cmd_list_element *info_record_cmdlist; | 
|  |  | 
|  | /* Unwinders for some record targets.  */ | 
|  | extern const struct frame_unwind record_btrace_frame_unwind; | 
|  | extern const struct frame_unwind record_btrace_tailcall_frame_unwind; | 
|  |  | 
|  | /* A list of different recording methods.  */ | 
|  | enum record_method | 
|  | { | 
|  | /* No or unknown record method.  */ | 
|  | RECORD_METHOD_NONE, | 
|  |  | 
|  | /* Record method "full".  */ | 
|  | RECORD_METHOD_FULL, | 
|  |  | 
|  | /* Record method "btrace".  */ | 
|  | RECORD_METHOD_BTRACE | 
|  | }; | 
|  |  | 
|  | /* A list of flags specifying what record target methods should print.  */ | 
|  | enum record_print_flag | 
|  | { | 
|  | /* Print the source file and line (if applicable).  */ | 
|  | RECORD_PRINT_SRC_LINE = (1 << 0), | 
|  |  | 
|  | /* Print the instruction number range (if applicable).  */ | 
|  | RECORD_PRINT_INSN_RANGE = (1 << 1), | 
|  |  | 
|  | /* Indent based on call stack depth (if applicable).  */ | 
|  | RECORD_PRINT_INDENT_CALLS = (1 << 2), | 
|  |  | 
|  | /* Deactivate printing auxiliary data (if applicable).  */ | 
|  | RECORD_DONT_PRINT_AUX = (1 << 3) | 
|  | }; | 
|  | DEF_ENUM_FLAGS_TYPE (enum record_print_flag, record_print_flags); | 
|  |  | 
|  | /* Determined whether the target is stopped at a software or hardware | 
|  | breakpoint, based on PC and the breakpoint tables.  The breakpoint | 
|  | type is translated to the appropriate target_stop_reason and | 
|  | written to REASON.  Returns true if stopped at a breakpoint, false | 
|  | otherwise.  */ | 
|  |  | 
|  | extern int | 
|  | record_check_stopped_by_breakpoint (const address_space *aspace, | 
|  | CORE_ADDR pc, | 
|  | enum target_stop_reason *reason); | 
|  |  | 
|  | /* Wrapper for target_read_memory that prints a debug message if | 
|  | reading memory fails.  */ | 
|  | extern int record_read_memory (struct gdbarch *gdbarch, | 
|  | CORE_ADDR memaddr, gdb_byte *myaddr, | 
|  | ssize_t len); | 
|  |  | 
|  | /* A wrapper for target_goto_record that parses ARG as a number.  */ | 
|  | extern void record_goto (const char *arg); | 
|  |  | 
|  | /* The default "to_disconnect" target method for record targets.  */ | 
|  | extern void record_disconnect (struct target_ops *, const char *, int); | 
|  |  | 
|  | /* The default "to_detach" target method for record targets.  */ | 
|  | extern void record_detach (struct target_ops *, inferior *, int); | 
|  |  | 
|  | /* The default "to_mourn_inferior" target method for record targets.  */ | 
|  | extern void record_mourn_inferior (struct target_ops *); | 
|  |  | 
|  | /* The default "to_kill" target method for record targets.  */ | 
|  | extern void record_kill (struct target_ops *); | 
|  |  | 
|  | /* Find the record_stratum target in the current target stack. | 
|  | Returns NULL if none is found.  */ | 
|  | extern struct target_ops *find_record_target (void); | 
|  |  | 
|  | /* This is to be called by record_stratum targets' open routine before | 
|  | it does anything.  */ | 
|  | extern void record_preopen (void); | 
|  |  | 
|  | /* Start recording with the given METHOD and FORMAT.  NULL means default method | 
|  | or format.  Throw on failure or invalid method / format.  */ | 
|  | extern void record_start (const char *method, const char *format, | 
|  | int from_tty); | 
|  |  | 
|  | /* Stop recording.  Throw on failure.  */ | 
|  | extern void record_stop (int from_tty); | 
|  |  | 
|  | #endif /* GDB_RECORD_H */ |