X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Flinux-nat.h;h=621737035dbec57835345491bbb5d9df0b5f9668;hb=b7761f11062dc4d4fd554342ac2d2fb235b65b7a;hp=2858f08f545a20bada40bd3997f4c18409350732;hpb=669211f587585a5b8c9a925d51e9ac7724fbb101;p=binutils-gdb.git diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h index 2858f08f545..621737035db 100644 --- a/gdb/linux-nat.h +++ b/gdb/linux-nat.h @@ -1,7 +1,6 @@ /* Native debugging support for GNU/Linux (LWP layer). - Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, - 2010 Free Software Foundation, Inc. + Copyright (C) 2000-2012 Free Software Foundation, Inc. This file is part of GDB. @@ -22,6 +21,22 @@ #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. */ @@ -52,6 +67,9 @@ struct lwp_info didn't try to let the LWP run. */ int resumed; + /* The last resume GDB requested on this thread. */ + enum resume_kind last_resume_kind; + /* If non-zero, a pending wait status. */ int status; @@ -92,6 +110,9 @@ struct lwp_info /* The processor core this LWP was last seen on. */ int core; + /* Arch-specific additions. */ + struct arch_lwp_info *arch_private; + /* Next LWP in list. */ struct lwp_info *next; }; @@ -101,12 +122,11 @@ struct lwp_info native target is active. */ extern struct lwp_info *lwp_list; -/* Iterate over the PTID each active thread (light-weight process). There - must be at least one. */ -#define ALL_LWPS(LP, PTID) \ - for ((LP) = lwp_list, (PTID) = (LP)->ptid; \ +/* Iterate over each active thread (light-weight process). */ +#define ALL_LWPS(LP) \ + for ((LP) = lwp_list; \ (LP) != NULL; \ - (LP) = (LP)->next, (PTID) = (LP) ? (LP)->ptid : (PTID)) + (LP) = (LP)->next) #define GET_LWP(ptid) ptid_get_lwp (ptid) #define GET_PID(ptid) ptid_get_pid (ptid) @@ -122,23 +142,28 @@ int thread_db_attach_lwp (ptid_t ptid); extern void lin_thread_get_thread_signals (sigset_t *mask); /* Find process PID's pending signal set from /proc/pid/status. */ -void linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigset_t *ignored); - -/* Return the TGID of LWPID from /proc/pid/status. Returns -1 if not - found. */ -extern int linux_proc_get_tgid (int lwpid); +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); extern int lin_lwp_attach_lwp (ptid_t ptid); +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); +typedef int (*linux_nat_iterate_watchpoint_lwps_ftype) (struct lwp_info *lwp, + void *arg); + +extern void linux_nat_iterate_watchpoint_lwps + (linux_nat_iterate_watchpoint_lwps_ftype callback, void *callback_data); + /* Create a prototype generic GNU/Linux target. The client can override it with local methods. */ struct target_ops * linux_target (void); @@ -153,7 +178,7 @@ linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int)); 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 (*) (ptid_t)); +void linux_nat_set_new_thread (struct target_ops *, void (*) (struct lwp_info *)); /* Register a method that converts a siginfo object between the layout that ptrace returns, and the layout in the architecture of the @@ -163,6 +188,11 @@ void linux_nat_set_siginfo_fixup (struct target_ops *, gdb_byte *, int)); +/* Register a method to call prior to resuming a thread. */ + +void linux_nat_set_prepare_to_resume (struct target_ops *, + void (*) (struct lwp_info *)); + /* Update linux-nat internal state when changing from one fork to another. */ void linux_nat_switch_fork (ptid_t new_ptid); @@ -172,3 +202,7 @@ 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); + +/* Set alternative SIGTRAP-like events recognizer. */ +void linux_nat_set_status_is_event (struct target_ops *t, + int (*status_is_event) (int status));