* completer.c (location_completer): Fix typo in comment.
[deliverable/binutils-gdb.git] / gdb / gdbthread.h
index c6a1d5cab50ac3771b3ba5fd66c9c92d05ade96c..824e4d06573bb5b309a482a3bd0bf22290bdd06b 100644 (file)
@@ -1,6 +1,5 @@
 /* Multi-process/thread control defs for GDB, the GNU debugger.
-   Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1997, 1998, 1999,
-   2000, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1987-2013 Free Software Foundation, Inc.
    Contributed by Lynx Real-Time Systems, Inc.  Los Gatos, CA.
    
 
@@ -29,6 +28,15 @@ struct symtab;
 #include "ui-out.h"
 #include "inferior.h"
 
+/* Frontend view of the thread state.  Possible extensions: stepping,
+   finishing, until(ling),...  */
+enum thread_state
+{
+  THREAD_STOPPED,
+  THREAD_RUNNING,
+  THREAD_EXITED,
+};
+
 /* Inferior thread specific part of `struct infcall_control_state'.
 
    Inferior process counterpart is `struct inferior_control_state'.  */
@@ -40,6 +48,9 @@ struct thread_control_state
   /* Step-resume or longjmp-resume breakpoint.  */
   struct breakpoint *step_resume_breakpoint;
 
+  /* Exception-resume breakpoint.  */
+  struct breakpoint *exception_resume_breakpoint;
+
   /* Range to single step within.
 
      If this is nonzero, respond to a single-step signal by continuing
@@ -49,7 +60,7 @@ struct thread_control_state
      step for a single instruction (FIXME: it might clean up
      wait_for_inferior in a minor way if this were changed to the
      address of the instruction and that address plus one.  But maybe
-     not.).  */
+     not).  */
   CORE_ADDR step_range_start;  /* Inclusive */
   CORE_ADDR step_range_end;    /* Exclusive */
 
@@ -111,7 +122,7 @@ struct thread_control_state
 struct thread_suspend_state
 {
   /* Last signal that the inferior received (why it stopped).  */
-  enum target_signal stop_signal;
+  enum gdb_signal stop_signal;
 };
 
 struct thread_info
@@ -122,13 +133,15 @@ struct thread_info
                                    kernel thread id, etc.  */
   int num;                     /* Convenient handle (GDB thread id) */
 
+  /* The name of the thread, as specified by the user.  This is NULL
+     if the thread does not have a user-given name.  */
+  char *name;
+
   /* Non-zero means the thread is executing.  Note: this is different
      from saying that there is an active target and we are stopped at
      a breakpoint, for instance.  This is a real indicator whether the
      thread is off and running.  */
-  /* This field is internal to thread.c.  Never access it directly,
-     use is_executing instead.  */
-  int executing_;
+  int executing;
 
   /* Frontend view of the thread state.  Note that the RUNNING/STOPPED
      states are different from EXECUTING.  When the thread is stopped
@@ -137,9 +150,7 @@ struct thread_info
      still be true.  As a possible future extension, this could turn
      into enum { stopped, exited, stepping, finishing, until(ling),
      running ... }  */
-  /* This field is internal to thread.c.  Never access it directly,
-     use is_running instead.  */
-  int state_;
+  int state;
 
   /* If this is > 0, then it means there's code out there that relies
      on this thread being listed.  Don't delete it from the lists even
@@ -169,20 +180,16 @@ struct thread_info
   int stepping_over_breakpoint;
 
   /* Set to TRUE if we should finish single-stepping over a breakpoint
-     after hitting the current step-resume breakpoint.  */
+     after hitting the current step-resume breakpoint.  The context here
+     is that GDB is to do `next' or `step' while signal arrives.
+     When stepping over a breakpoint and signal arrives, GDB will attempt
+     to skip signal handler, so it inserts a step_resume_breakpoint at the
+     signal return address, and resume inferior.
+     step_after_step_resume_breakpoint is set to TRUE at this moment in
+     order to keep GDB in mind that there is still a breakpoint to step over
+     when GDB gets back SIGTRAP from step_resume_breakpoint.  */
   int step_after_step_resume_breakpoint;
 
-  /* This is set TRUE when a catchpoint of a shared library event
-     triggers.  Since we don't wish to leave the inferior in the
-     solib hook when we report the event, we step the inferior
-     back to user code before stopping and reporting the event.  */
-  int stepping_through_solib_after_catch;
-
-  /* When stepping_through_solib_after_catch is TRUE, this is a
-     list of the catchpoints that should be reported as triggering
-     when we finally do stop stepping.  */
-  bpstat stepping_through_solib_catchpoints;
-
   /* Per-thread command support.  */
 
   /* Pointer to what is left to do for an execution command after the
@@ -207,6 +214,12 @@ struct thread_info
   /* True if this thread has been explicitly requested to stop.  */
   int stop_requested;
 
+  /* The initiating frame of a nexting operation, used for deciding
+     which exceptions to intercept.  If it is null_frame_id no
+     bp_longjmp or bp_exception but longjmp has been caught just for
+     bp_longjmp_call_dummy.  */
+  struct frame_id initiating_frame;
+
   /* Private data used by the target vector implementation.  */
   struct private_thread_info *private;
 
@@ -240,9 +253,12 @@ extern void delete_thread (ptid_t);
    exited, for example.  */
 extern void delete_thread_silent (ptid_t);
 
-/* Delete a step_resume_breakpoint from the thread database. */
+/* Delete a step_resume_breakpoint from the thread database.  */
 extern void delete_step_resume_breakpoint (struct thread_info *);
 
+/* Delete an exception_resume_breakpoint from the thread database.  */
+extern void delete_exception_resume_breakpoint (struct thread_info *);
+
 /* Translate the integer thread id (GDB's homegrown id, not the system's)
    into a "pid" (which may be overloaded with extra thread information).  */
 extern ptid_t thread_id_to_pid (int);
@@ -273,7 +289,7 @@ struct thread_info *first_thread_of_process (int pid);
 extern struct thread_info *any_thread_of_process (int pid);
 
 /* Returns any non-exited thread of process PID, giving preference for
-   already stopped threads.  */
+   not executing threads.  */
 extern struct thread_info *any_live_thread_of_process (int pid);
 
 /* Change the ptid of thread OLD_PTID to NEW_PTID.  */
@@ -284,6 +300,11 @@ void thread_change_ptid (ptid_t old_ptid, ptid_t new_ptid);
 typedef int (*thread_callback_func) (struct thread_info *, void *);
 extern struct thread_info *iterate_over_threads (thread_callback_func, void *);
 
+/* Traverse all threads.  */
+
+#define ALL_THREADS(T)                         \
+  for (T = thread_list; T; T = T->next)
+
 extern int thread_count (void);
 
 /* Switch from one thread to another.  */
@@ -332,7 +353,7 @@ extern int any_running (void);
    marks all threads.
 
    Note that this is different from the running state.  See the
-   description of state_ and executing_ fields of struct
+   description of state and executing fields of struct
    thread_info.  */
 extern void set_executing (ptid_t ptid, int executing);
 
@@ -363,7 +384,7 @@ extern struct cmd_list_element *thread_cmd_list;
    `set print thread-events'.  */
 extern int print_thread_events;
 
-extern void print_thread_info (struct ui_out *uiout, int thread,
+extern void print_thread_info (struct ui_out *uiout, char *threads,
                               int pid);
 
 extern struct cleanup *make_cleanup_restore_current_thread (void);
@@ -374,4 +395,6 @@ extern struct thread_info* inferior_thread (void);
 
 extern void update_thread_list (void);
 
+extern struct thread_info *thread_list;
+
 #endif /* GDBTHREAD_H */
This page took 0.026182 seconds and 4 git commands to generate.