mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-26 02:33:31 +08:00
6e1e1966ba
The to_detach target_ops method implementations are currently expected to work on current_inferior/inferior_ptid. In order to make things more explicit, and remove some "shadow" parameter passing through globals, this patch adds an "inferior" parameter to to_detach. Implementations will be expected to use this instead of relying on the global. However, to keep things simple, this patch only does the minimum that is necessary to add the parameter. The following patch gives an example of how one such implementation would be adapted. If the approach is deemed good, we can then look into adapting more implementations. Until then, they'll continue to work as they do currently. gdb/ChangeLog: * target.h (struct target_ops) <to_detach>: Add inferior parameter. (target_detach): Likewise. * target.c (dispose_inferior): Pass inferior down. (target_detach): Pass inferior down. Assert that it is equal to the current inferior. * aix-thread.c (aix_thread_detach): Pass inferior down. * corefile.c (core_file_command): Pass current_inferior() down. * corelow.c (core_detach): Add inferior parameter. * darwin-nat.c (darwin_detach): Likewise. * gnu-nat.c (gnu_detach): Likewise. * inf-ptrace.c (inf_ptrace_detach): Likewise. * infcmd.c (detach_command): Pass current_inferior() down to target_detach. * infrun.c (follow_fork_inferior): Pass parent_inf to target_detach. (handle_vfork_child_exec_or_exit): Pass inf->vfork_parent to target_detach. * linux-nat.c (linux_nat_detach): Add inferior parameter. * linux-thread-db.c (thread_db_detach): Likewise. * nto-procfs.c (procfs_detach): Likewise. * procfs.c (procfs_detach): Likewise. * record.c (record_detach): Likewise. * record.h (struct inferior): Forward-declare. (record_detach): Add inferior parameter. * remote-sim.c (gdbsim_detach): Likewise. * remote.c (remote_detach_1): Likewise. (remote_detach): Likewise. (extended_remote_detach): Likewise. * sol-thread.c (sol_thread_detach): Likewise. * target-debug.h (target_debug_print_inferior_p): New macro. * target-delegates.c: Re-generate. * top.c (kill_or_detach): Pass inferior down to target_detach. * windows-nat.c (windows_detach): Add inferior parameter.
117 lines
4.0 KiB
C
117 lines
4.0 KiB
C
/* Process record and replay target for GDB, the GNU debugger.
|
|
|
|
Copyright (C) 2008-2018 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 _RECORD_H_
|
|
#define _RECORD_H_
|
|
|
|
#include "target/waitstatus.h" /* For enum target_stop_reason. */
|
|
#include "common/enum-flags.h"
|
|
|
|
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)
|
|
};
|
|
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 /* _RECORD_H_ */
|