2007-12-06 Pierre Muller <muller@ics.u-strasbg.fr>
[deliverable/binutils-gdb.git] / gdb / gdbthread.h
CommitLineData
c906108c 1/* Multi-process/thread control defs for GDB, the GNU debugger.
197e01b6 2 Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1997, 1998, 1999,
6aba47ca 3 2000, 2007 Free Software Foundation, Inc.
b6ba6518
KB
4 Contributed by Lynx Real-Time Systems, Inc. Los Gatos, CA.
5
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#ifndef GDBTHREAD_H
23#define GDBTHREAD_H
24
da3331ec
AC
25struct breakpoint;
26struct frame_id;
27struct symtab;
28
c906108c
SS
29/* For bpstat */
30#include "breakpoint.h"
31
aa0cd9c1
AC
32/* For struct frame_id. */
33#include "frame.h"
34
0d06e24b
JM
35struct thread_info
36{
37 struct thread_info *next;
39f77062 38 ptid_t ptid; /* "Actual process id";
0d06e24b
JM
39 In fact, this may be overloaded with
40 kernel thread id, etc. */
41 int num; /* Convenient handle (GDB thread id) */
42 /* State from wait_for_inferior */
43 CORE_ADDR prev_pc;
0d06e24b 44 struct breakpoint *step_resume_breakpoint;
0d06e24b
JM
45 CORE_ADDR step_range_start;
46 CORE_ADDR step_range_end;
aa0cd9c1 47 struct frame_id step_frame_id;
6c0d3f6a
MS
48 int current_line;
49 struct symtab *current_symtab;
0d06e24b
JM
50 int trap_expected;
51 int handling_longjmp;
52 int another_trap;
53
54 /* This is set TRUE when a catchpoint of a shared library event
55 triggers. Since we don't wish to leave the inferior in the
56 solib hook when we report the event, we step the inferior
57 back to user code before stopping and reporting the event. */
58 int stepping_through_solib_after_catch;
59
60 /* When stepping_through_solib_after_catch is TRUE, this is a
61 list of the catchpoints that should be reported as triggering
62 when we finally do stop stepping. */
63 bpstat stepping_through_solib_catchpoints;
64
0d06e24b
JM
65 /* Private data used by the target vector implementation. */
66 struct private_thread_info *private;
67};
68
69/* Create an empty thread list, or empty the existing one. */
70extern void init_thread_list (void);
71
72/* Add a thread to the thread list.
73 Note that add_thread now returns the handle of the new thread,
74 so that the caller may initialize the private thread data. */
39f77062 75extern struct thread_info *add_thread (ptid_t ptid);
0d06e24b
JM
76
77/* Delete an existing thread list entry. */
39f77062 78extern void delete_thread (ptid_t);
0d06e24b 79
8601f500
MS
80/* Delete a step_resume_breakpoint from the thread database. */
81extern void delete_step_resume_breakpoint (void *);
82
0d06e24b
JM
83/* Translate the integer thread id (GDB's homegrown id, not the system's)
84 into a "pid" (which may be overloaded with extra thread information). */
39f77062 85extern ptid_t thread_id_to_pid (int);
0d06e24b
JM
86
87/* Translate a 'pid' (which may be overloaded with extra thread information)
88 into the integer thread id (GDB's homegrown id, not the system's). */
39f77062 89extern int pid_to_thread_id (ptid_t ptid);
0d06e24b
JM
90
91/* Boolean test for an already-known pid (which may be overloaded with
92 extra thread information). */
39f77062 93extern int in_thread_list (ptid_t ptid);
0d06e24b
JM
94
95/* Boolean test for an already-known thread id (GDB's homegrown id,
96 not the system's). */
97extern int valid_thread_id (int thread);
98
99/* Search function to lookup a thread by 'pid'. */
39f77062 100extern struct thread_info *find_thread_pid (ptid_t ptid);
0d06e24b
JM
101
102/* Iterator function to call a user-provided callback function
103 once for each known thread. */
104typedef int (*thread_callback_func) (struct thread_info *, void *);
105extern struct thread_info *iterate_over_threads (thread_callback_func, void *);
106
107/* infrun context switch: save the debugger state for the given thread. */
39f77062 108extern void save_infrun_state (ptid_t ptid,
0d06e24b 109 CORE_ADDR prev_pc,
0d06e24b
JM
110 int trap_expected,
111 struct breakpoint *step_resume_breakpoint,
0d06e24b
JM
112 CORE_ADDR step_range_start,
113 CORE_ADDR step_range_end,
aa0cd9c1 114 const struct frame_id *step_frame_id,
0d06e24b
JM
115 int handling_longjmp,
116 int another_trap,
117 int stepping_through_solib_after_catch,
118 bpstat stepping_through_solib_catchpoints,
6c0d3f6a 119 int current_line,
f2c9ca08 120 struct symtab *current_symtab);
0d06e24b
JM
121
122/* infrun context switch: load the debugger state previously saved
123 for the given thread. */
39f77062 124extern void load_infrun_state (ptid_t ptid,
0d06e24b 125 CORE_ADDR *prev_pc,
0d06e24b
JM
126 int *trap_expected,
127 struct breakpoint **step_resume_breakpoint,
0d06e24b
JM
128 CORE_ADDR *step_range_start,
129 CORE_ADDR *step_range_end,
aa0cd9c1 130 struct frame_id *step_frame_id,
0d06e24b
JM
131 int *handling_longjmp,
132 int *another_trap,
133 int *stepping_through_solib_affter_catch,
134 bpstat *stepping_through_solib_catchpoints,
6c0d3f6a 135 int *current_line,
f2c9ca08 136 struct symtab **current_symtab);
c906108c 137
6a6b96b9
UW
138/* Switch from one thread to another. */
139extern void switch_to_thread (ptid_t ptid);
140
c906108c
SS
141/* Commands with a prefix of `thread'. */
142extern struct cmd_list_element *thread_cmd_list;
143
c5aa993b 144#endif /* GDBTHREAD_H */
This page took 0.73016 seconds and 4 git commands to generate.