X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gdb%2Flinux-nat.h;h=7bdeb314a6639ea8721916307fa79ce7d61b1d06;hb=41549dfbcc747d0dc4a97c9a427c3a29e9878f05;hp=d9dc71b8f5c22be707a168ae3e9fd6ba4128fa07;hpb=0b30217134add051e159a192066a1e568ebd837f;p=external%2Fbinutils.git diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h index d9dc71b..7bdeb31 100644 --- a/gdb/linux-nat.h +++ b/gdb/linux-nat.h @@ -1,6 +1,6 @@ /* Native debugging support for GNU/Linux (LWP layer). - Copyright (C) 2000-2012 Free Software Foundation, Inc. + Copyright (C) 2000-2016 Free Software Foundation, Inc. This file is part of GDB. @@ -17,26 +17,12 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#include "nat/linux-nat.h" #include "target.h" - #include struct arch_lwp_info; -/* Ways to "resume" a thread. */ - -enum resume_kind -{ - /* Thread should continue. */ - resume_continue, - - /* Thread should single-step. */ - resume_step, - - /* Thread should be stopped. */ - resume_stop -}; - /* Structure describing an LWP. This is public only for the purposes of ALL_LWPS; target-specific code should generally not access it directly. */ @@ -47,10 +33,9 @@ struct lwp_info and overall process id. */ ptid_t ptid; - /* Non-zero if this LWP is cloned. In this context "cloned" means - that the LWP is reporting to its parent using a signal other than - SIGCHLD. */ - int cloned; + /* If this flag is set, we need to set the event request flags the + next time we see this LWP stop. */ + int must_set_ptrace_flags; /* Non-zero if we sent this LWP a SIGSTOP (but the LWP didn't report it back yet). */ @@ -73,16 +58,19 @@ struct lwp_info /* If non-zero, a pending wait status. */ int status; + /* When 'stopped' is set, this is where the lwp last stopped, with + decr_pc_after_break already accounted for. If the LWP is + running, and stepping, this is the address at which the lwp was + resumed (that is, it's the previous stop PC). If the LWP is + running and not stepping, this is 0. */ + CORE_ADDR stop_pc; + /* Non-zero if we were stepping this LWP. */ int step; - /* Non-zero si_signo if this LWP stopped with a trap. si_addr may - be the address of a hardware watchpoint. */ - struct siginfo siginfo; - - /* STOPPED_BY_WATCHPOINT is non-zero if this LWP stopped with a data - watchpoint trap. */ - int stopped_by_watchpoint; + /* The reason the LWP last stopped, if we need to track it + (breakpoint, watchpoint, etc.) */ + enum target_stop_reason stop_reason; /* On architectures where it is possible to know the data address of a triggered watchpoint, STOPPED_DATA_ADDRESS_P is non-zero, and @@ -105,7 +93,7 @@ struct lwp_info Values: - TARGET_WAITKIND_SYSCALL_ENTRY - TARGET_WAITKIND_SYSCALL_RETURN */ - int syscall_state; + enum target_waitkind syscall_state; /* The processor core this LWP was last seen on. */ int core; @@ -122,21 +110,24 @@ struct lwp_info native target is active. */ extern struct lwp_info *lwp_list; +/* Does the current host support PTRACE_GETREGSET? */ +extern enum tribool have_ptrace_getregset; + /* Iterate over each active thread (light-weight process). */ #define ALL_LWPS(LP) \ for ((LP) = lwp_list; \ (LP) != NULL; \ (LP) = (LP)->next) -#define GET_LWP(ptid) ptid_get_lwp (ptid) -#define GET_PID(ptid) ptid_get_pid (ptid) -#define is_lwp(ptid) (GET_LWP (ptid) != 0) -#define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0) - /* Attempt to initialize libthread_db. */ void check_for_thread_db (void); -int thread_db_attach_lwp (ptid_t ptid); +/* Called from the LWP layer to inform the thread_db layer that PARENT + spawned CHILD. Both LWPs are currently stopped. This function + does whatever is required to have the child LWP under the + thread_db's control --- e.g., enabling event reporting. Returns + true on success, false if the process isn't using libpthread. */ +extern int thread_db_notice_clone (ptid_t parent, ptid_t child); /* Return the set of signals used by the threads library. */ extern void lin_thread_get_thread_signals (sigset_t *mask); @@ -145,18 +136,16 @@ extern void lin_thread_get_thread_signals (sigset_t *mask); void linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigset_t *ignored); -/* linux-nat functions for handling fork events. */ -extern void linux_enable_event_reporting (ptid_t ptid); +/* For linux_stop_lwp see nat/linux-nat.h. */ -extern int lin_lwp_attach_lwp (ptid_t ptid); +/* Stop all LWPs, synchronously. (Any events that trigger while LWPs + are being stopped are left pending.) */ +extern void linux_stop_and_wait_all_lwps (void); -extern void linux_stop_lwp (struct lwp_info *lwp); - -/* Iterator function for lin-lwp's lwp list. */ -struct lwp_info *iterate_over_lwps (ptid_t filter, - int (*callback) (struct lwp_info *, - void *), - void *data); +/* Set resumed LWPs running again, as they were before being stopped + with linux_stop_and_wait_all_lwps. (LWPS with pending events are + left stopped.) */ +extern void linux_unstop_all_lwps (void); /* Create a prototype generic GNU/Linux target. The client can override it with local methods. */ @@ -174,11 +163,28 @@ void linux_nat_add_target (struct target_ops *); /* Register a method to call whenever a new thread is attached. */ void linux_nat_set_new_thread (struct target_ops *, void (*) (struct lwp_info *)); + +/* Register a method to call whenever a new fork is attached. */ +typedef void (linux_nat_new_fork_ftype) (struct lwp_info *parent, + pid_t child_pid); +void linux_nat_set_new_fork (struct target_ops *ops, + linux_nat_new_fork_ftype *fn); + +/* Register a method to call whenever a process is killed or + detached. */ +typedef void (linux_nat_forget_process_ftype) (pid_t pid); +void linux_nat_set_forget_process (struct target_ops *ops, + linux_nat_forget_process_ftype *fn); + +/* Call the method registered with the function above. PID is the + process to forget about. */ +void linux_nat_forget_process (pid_t pid); + /* Register a method that converts a siginfo object between the layout that ptrace returns, and the layout in the architecture of the inferior. */ void linux_nat_set_siginfo_fixup (struct target_ops *, - int (*) (struct siginfo *, + int (*) (siginfo_t *, gdb_byte *, int)); @@ -191,11 +197,10 @@ void linux_nat_set_prepare_to_resume (struct target_ops *, to another. */ void linux_nat_switch_fork (ptid_t new_ptid); -/* Return the saved siginfo associated with PTID. */ -struct siginfo *linux_nat_get_siginfo (ptid_t ptid); - -/* Compute and return the processor core of a given thread. */ -int linux_nat_core_of_thread_1 (ptid_t ptid); +/* Store the saved siginfo associated with PTID in *SIGINFO. + Return 1 if it was retrieved successfully, 0 otherwise (*SIGINFO is + uninitialized in such case). */ +int linux_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo); /* Set alternative SIGTRAP-like events recognizer. */ void linux_nat_set_status_is_event (struct target_ops *t,