]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/gnu-nat.h
Copyright updates for 2007.
[thirdparty/binutils-gdb.git] / gdb / gnu-nat.h
CommitLineData
c906108c 1/* Common things used by the various *gnu-nat.c files
6aba47ca
DJ
2 Copyright (C) 1995, 1996, 1997, 1999, 2000, 2007
3 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 Written by Miles Bader <miles@gnu.ai.mit.edu>
c906108c 6
c5aa993b
JM
7 The GNU Hurd is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2, or (at
10 your option) any later version.
c906108c 11
c5aa993b
JM
12 The GNU Hurd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
c906108c 16
c5aa993b
JM
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
197e01b6
EZ
19 Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 Boston, MA 02110-1301, USA. */
c906108c
SS
21
22#ifndef __GNU_NAT_H__
23#define __GNU_NAT_H__
24
25#include <unistd.h>
26#include <mach.h>
27
28struct inf;
29
30extern struct inf *current_inferior;
31
32/* Converts a GDB pid to a struct proc. */
33struct proc *inf_tid_to_thread (struct inf *inf, int tid);
34
da59e081
JM
35/* Makes sure that INF's thread list is synced with the actual process. */
36int inf_update_procs (struct inf *inf);
37
c906108c
SS
38/* A proc is either a thread, or the task (there can only be one task proc
39 because it always has the same TID, PROC_TID_TASK). */
40struct proc
c5aa993b
JM
41 {
42 thread_t port; /* The task or thread port. */
43 int tid; /* The GDB pid (actually a thread id). */
44 int num; /* An id number for threads, to print. */
45
46 mach_port_t saved_exc_port; /* The task/thread's real exception port. */
47 mach_port_t exc_port; /* Our replacement, which for. */
48
49 int sc; /* Desired suspend count. */
50 int cur_sc; /* Implemented suspend count. */
51 int run_sc; /* Default sc when the program is running. */
52 int pause_sc; /* Default sc when gdb has control. */
53 int resume_sc; /* Sc resulting from the last resume. */
54 int detach_sc; /* SC to leave around when detaching
c906108c
SS
55 from program. */
56
c5aa993b
JM
57 thread_state_data_t state; /* Registers, &c. */
58 int state_valid:1; /* True if STATE is up to date. */
59 int state_changed:1;
c906108c 60
c5aa993b
JM
61 int aborted:1; /* True if thread_abort has been called. */
62 int dead:1; /* We happen to know it's actually dead. */
c906108c 63
c5aa993b
JM
64 /* Bit mask of registers fetched by gdb. This is used when we re-fetch
65 STATE after aborting the thread, to detect that gdb may have out-of-date
66 information. */
67 unsigned long fetched_regs;
c906108c 68
c5aa993b 69 struct inf *inf; /* Where we come from. */
c906108c 70
c5aa993b
JM
71 struct proc *next;
72 };
c906108c
SS
73
74/* The task has a thread entry with this TID. */
75#define PROC_TID_TASK (-1)
76
77#define proc_is_task(proc) ((proc)->tid == PROC_TID_TASK)
78#define proc_is_thread(proc) ((proc)->tid != PROC_TID_TASK)
79
80extern int __proc_pid (struct proc *proc);
81
da59e081
JM
82/* Make sure that the state field in PROC is up to date, and return a
83 pointer to it, or 0 if something is wrong. If WILL_MODIFY is true,
84 makes sure that the thread is stopped and aborted first, and sets
85 the state_changed field in PROC to true. */
c906108c
SS
86extern thread_state_t proc_get_state (struct proc *proc, int will_modify);
87
da59e081
JM
88/* Return printable description of proc. */
89extern char *proc_string (struct proc *proc);
90
c906108c
SS
91#define proc_debug(_proc, msg, args...) \
92 do { struct proc *__proc = (_proc); \
93 debug ("{proc %d/%d %p}: " msg, \
94 __proc_pid (__proc), __proc->tid, __proc , ##args); } while (0)
95
c906108c 96extern int gnu_debug_flag;
7a292a7a 97
c906108c
SS
98#define debug(msg, args...) \
99 do { if (gnu_debug_flag) \
89396210 100 fprintf_unfiltered (gdb_stdlog, "%s:%d: " msg "\r\n", __FILE__ , __LINE__ , ##args); } while (0)
c906108c
SS
101
102#endif /* __GNU_NAT_H__ */