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