X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=gdb%2Finferior.h;h=14b99e222fede64ec0a90712252a3175006b1361;hb=4ee62156d969867d3d3ffedf656a74643f77279e;hp=4d41402825c3964346e9c04efed688a9ed0a16f4;hpb=41d2bdb467371e3a18ff8eb69859b1d7cb56a2bd;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/inferior.h b/gdb/inferior.h index 4d41402825..14b99e222f 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -30,6 +30,7 @@ struct type; struct gdbarch; struct regcache; struct ui_out; +struct terminal_info; /* For bpstat. */ #include "breakpoint.h" @@ -40,6 +41,8 @@ struct ui_out; /* For struct frame_id. */ #include "frame.h" +#include "progspace.h" + /* Two structures are used to record inferior state. inferior_thread_state contains state about the program itself like its @@ -134,6 +137,8 @@ extern void clear_proceed_status (void); extern void proceed (CORE_ADDR, enum target_signal, int); +extern int sched_multi; + /* When set, stop the 'step' command if we enter a function which has no line number information. The normal behavior is that we step over such function. */ @@ -146,23 +151,28 @@ extern int step_stop_if_no_debug; are kept running freely. */ extern int non_stop; +/* If set (default), when following a fork, GDB will detach from one + the fork branches, child or parent. Exactly which branch is + detached depends on 'set follow-fork-mode' setting. */ +extern int detach_fork; + extern void generic_mourn_inferior (void); extern void terminal_save_ours (void); extern void terminal_ours (void); -extern CORE_ADDR read_pc (void); - -extern void write_pc (CORE_ADDR); - -extern CORE_ADDR unsigned_pointer_to_address (struct type *type, +extern CORE_ADDR unsigned_pointer_to_address (struct gdbarch *gdbarch, + struct type *type, const gdb_byte *buf); -extern void unsigned_address_to_pointer (struct type *type, gdb_byte *buf, +extern void unsigned_address_to_pointer (struct gdbarch *gdbarch, + struct type *type, gdb_byte *buf, CORE_ADDR addr); -extern CORE_ADDR signed_pointer_to_address (struct type *type, +extern CORE_ADDR signed_pointer_to_address (struct gdbarch *gdbarch, + struct type *type, const gdb_byte *buf); -extern void address_to_signed_pointer (struct type *type, gdb_byte *buf, +extern void address_to_signed_pointer (struct gdbarch *gdbarch, + struct type *type, gdb_byte *buf, CORE_ADDR addr); extern void wait_for_inferior (int treat_exec_as_sigtrap); @@ -199,12 +209,6 @@ extern void terminal_init_inferior (void); extern void terminal_init_inferior_with_pgrp (int pgrp); -/* From procfs.c */ - -extern int proc_iterate_over_mappings (int (*)(int, CORE_ADDR)); - -extern ptid_t procfs_first_available (void); - /* From fork-child.c */ extern int fork_inferior (char *, char *, char **, @@ -214,13 +218,7 @@ extern int fork_inferior (char *, char *, char **, extern void startup_inferior (int); -extern char *construct_inferior_arguments (struct gdbarch *, int, char **); - -/* From inflow.c */ - -extern void new_tty_prefork (const char *); - -extern int gdb_has_a_terminal (void); +extern char *construct_inferior_arguments (int, char **); /* From infrun.c */ @@ -251,6 +249,8 @@ extern void error_is_running (void); /* Calls error_is_running if the current thread is running. */ extern void ensure_not_running (void); +void set_step_info (struct frame_info *frame, struct symtab_and_line sal); + /* From infcmd.c */ extern void tty_command (char *, int); @@ -287,11 +287,6 @@ extern void notice_new_inferior (ptid_t, int, int); extern CORE_ADDR stop_pc; -/* Flag indicating that a command has proceeded the inferior past the - current breakpoint. */ - -extern int breakpoint_proceeded; - /* Nonzero if stopped due to completion of a stack dummy routine. */ extern int stop_stack_dummy; @@ -301,8 +296,9 @@ extern int stop_stack_dummy; extern int stopped_by_random_signal; -/* 1 means step over all subroutine calls. - -1 means step over calls to undebuggable functions. */ +/* STEP_OVER_ALL means step over all subroutine calls. + STEP_OVER_UNDEBUGGABLE means step over calls to undebuggable functions. + STEP_OVER_NONE means don't step over any subroutine calls. */ enum step_over_calls_kind { @@ -368,9 +364,6 @@ extern int debug_displaced; void displaced_step_dump_bytes (struct ui_file *file, const gdb_byte *buf, size_t len); -/* When set, no calls to target_resumed observer will be made. */ -extern int suppress_resume_observer; - /* Possible values for gdbarch_call_dummy_location. */ #define ON_STACK 1 @@ -422,6 +415,18 @@ struct inferior the ptid_t.pid member of threads of this inferior. */ int pid; + /* True if this was an auto-created inferior, e.g. created from + following a fork; false, if this inferior was manually added by + the user, and we should not attempt to prune it + automatically. */ + int removable; + + /* The address space bound to this inferior. */ + struct address_space *aspace; + + /* The program space bound to this inferior. */ + struct program_space *pspace; + /* See the definition of stop_kind above. */ enum stop_kind stop_soon; @@ -429,6 +434,25 @@ struct inferior forked. */ int attach_flag; + /* If this inferior is a vfork child, then this is the pointer to + its vfork parent, if GDB is still attached to it. */ + struct inferior *vfork_parent; + + /* If this process is a vfork parent, this is the pointer to the + child. Since a vfork parent is left frozen by the kernel until + the child execs or exits, a process can only have one vfork child + at a given time. */ + struct inferior *vfork_child; + + /* True if this inferior should be detached when it's vfork sibling + exits or execs. */ + int pending_detach; + + /* True if this inferior is a vfork parent waiting for a vfork child + not under our control to be done with the shared memory region, + either by exiting or execing. */ + int waiting_for_vfork_done; + /* What is left to do for an execution command after any thread of this inferior stops. For continuations associated with a specific thread, see `struct thread_info'. */ @@ -436,8 +460,38 @@ struct inferior /* Private data used by the target vector implementation. */ struct private_inferior *private; + + /* We keep a count of the number of times the user has requested a + particular syscall to be tracked, and pass this information to the + target. This lets capable targets implement filtering directly. */ + + /* Number of times that "any" syscall is requested. */ + int any_syscall_count; + + /* Count of each system call. */ + VEC(int) *syscalls_counts; + + /* This counts all syscall catch requests, so we can readily determine + if any catching is necessary. */ + int total_syscalls_count; + + /* Per inferior data-pointers required by other GDB modules. */ + void **data; + unsigned num_data; }; +/* Keep a registry of per-inferior data-pointers required by other GDB + modules. */ + +extern const struct inferior_data *register_inferior_data (void); +extern const struct inferior_data *register_inferior_data_with_cleanup + (void (*cleanup) (struct inferior *, void *)); +extern void clear_inferior_data (struct inferior *inf); +extern void set_inferior_data (struct inferior *inf, + const struct inferior_data *data, void *value); +extern void *inferior_data (struct inferior *inf, + const struct inferior_data *data); + /* Create an empty inferior list, or empty the existing one. */ extern void init_inferior_list (void); @@ -461,6 +515,14 @@ extern void delete_inferior_silent (int pid); /* Delete an existing inferior list entry, due to inferior detaching. */ extern void detach_inferior (int pid); +extern void exit_inferior (int pid); + +extern void exit_inferior_silent (int pid); + +extern void exit_inferior_num_silent (int num); + +extern void inferior_appeared (struct inferior *inf, int pid); + /* Get rid of all inferiors. */ extern void discard_all_inferiors (void); @@ -479,9 +541,16 @@ extern int in_inferior_list (int pid); not the system's). */ extern int valid_gdb_inferior_id (int num); -/* Search function to lookup a inferior by target 'pid'. */ +/* Search function to lookup an inferior by target 'pid'. */ extern struct inferior *find_inferior_pid (int pid); +/* Search function to lookup an inferior by GDB 'num'. */ +extern struct inferior *find_inferior_id (int num); + +/* Find an inferior bound to PSPACE. */ +extern struct inferior * + find_inferior_for_program_space (struct program_space *pspace); + /* Inferior iterator function. Calls a callback function once for each inferior, so long as the @@ -505,8 +574,24 @@ extern void print_inferior (struct ui_out *uiout, int requested_inferior); /* Returns true if the inferior list is not empty. */ extern int have_inferiors (void); +/* Returns true if there are any live inferiors in the inferior list + (not cores, not executables, real live processes). */ +extern int have_live_inferiors (void); + /* Return a pointer to the current inferior. It is an error to call this if there is no current inferior. */ extern struct inferior *current_inferior (void); +extern void set_current_inferior (struct inferior *); + +extern struct cleanup *save_current_inferior (void); + +extern struct inferior *inferior_list; + +/* Prune away automatically added inferiors that aren't required + anymore. */ +extern void prune_inferiors (void); + +extern int number_of_inferiors (void); + #endif /* !defined (INFERIOR_H) */