Many changes to procfs.c, mostly to expand the "info proc" command and to
[external/binutils.git] / gdb / inferior.h
1 /* Variables that describe the inferior process running under GDB:
2    Where it is, why it stopped, and how to step it.
3    Copyright 1986, 1989, 1992 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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 2 of the License, or
10 (at your option) any later version.
11
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.
16
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
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
20
21 #if !defined (INFERIOR_H)
22 #define INFERIOR_H 1
23
24 /* For symtab_and_line */
25 #include "symtab.h"
26
27 /* For bpstat.  */
28 #include "breakpoint.h"
29
30 /* For FRAME_ADDR.  */
31 #include "frame.h"
32
33 /*
34  * Structure in which to save the status of the inferior.  Save
35  * through "save_inferior_status", restore through
36  * "restore_inferior_status".
37  * This pair of routines should be called around any transfer of
38  * control to the inferior which you don't want showing up in your
39  * control variables.
40  */
41 struct inferior_status {
42   int pc_changed;
43   int stop_signal;
44   int stop_pc;
45   FRAME_ADDR stop_frame_address;
46   bpstat stop_bpstat;
47   int stop_step;
48   int stop_stack_dummy;
49   int stopped_by_random_signal;
50   int trap_expected;
51   CORE_ADDR step_range_start;
52   CORE_ADDR step_range_end;
53   FRAME_ADDR step_frame_address;
54   int step_over_calls;
55   CORE_ADDR step_resume_break_address;
56   int stop_after_trap;
57   int stop_soon_quietly;
58   FRAME_ADDR selected_frame_address;
59   int selected_level;
60   char stop_registers[REGISTER_BYTES];
61   int breakpoint_proceeded;
62   int restore_stack_info;
63   int proceed_to_finish;
64 };
65
66 extern void
67 save_inferior_status PARAMS ((struct inferior_status *, int));
68
69 extern void
70 restore_inferior_status PARAMS ((struct inferior_status *));
71
72 /* File name for default use for standard in/out in the inferior.  */
73
74 extern char *inferior_io_terminal;
75
76 /* Pid of our debugged inferior, or 0 if no inferior now.  */
77
78 extern int inferior_pid;
79
80 /* Character array containing an image of the inferior programs' registers.  */
81
82 extern char registers[];
83
84 extern void
85 clear_proceed_status PARAMS ((void));
86
87 extern void
88 proceed PARAMS ((CORE_ADDR, int, int));
89
90 extern void
91 kill_inferior PARAMS ((void));
92
93 extern void
94 kill_inferior_fast PARAMS ((void));
95
96 extern void
97 generic_mourn_inferior PARAMS ((void));
98
99 extern void
100 terminal_ours PARAMS ((void));
101
102 extern void
103 run_stack_dummy PARAMS ((CORE_ADDR, char [REGISTER_BYTES]));
104
105 extern CORE_ADDR
106 read_pc PARAMS ((void));
107
108 extern void
109 write_pc PARAMS ((CORE_ADDR));
110
111 extern void
112 wait_for_inferior PARAMS ((void));
113
114 extern void
115 init_wait_for_inferior PARAMS ((void));
116
117 extern void
118 close_exec_file PARAMS ((void));
119
120 extern void
121 reopen_exec_file PARAMS ((void));
122
123 /* From misc files */
124
125 extern void
126 store_inferior_registers PARAMS ((int));
127
128 extern void
129 fetch_inferior_registers PARAMS ((int));
130
131 extern void 
132 solib_create_inferior_hook PARAMS ((void));
133
134 extern void
135 child_mourn_inferior PARAMS ((void));
136
137 extern void
138 child_terminal_info PARAMS ((char *, int));
139
140 extern void
141 term_info PARAMS ((char *, int));
142
143 extern void
144 terminal_ours_for_output PARAMS ((void));
145
146 extern void
147 terminal_inferior PARAMS ((void));
148
149 extern void
150 terminal_init_inferior PARAMS ((void));
151
152 /* From infptrace.c or procfs.c */
153
154 extern int
155 attach PARAMS ((int));
156
157 void
158 detach PARAMS ((int));
159
160 extern void
161 child_resume PARAMS ((int, int));
162
163 /* From procfs.c */
164
165 #ifdef USE_PROC_FS
166
167 extern int
168 proc_iterate_over_mappings PARAMS ((int (*) (int, CORE_ADDR)));
169
170 extern int
171 proc_wait PARAMS ((int *));
172
173 extern void
174 inferior_proc_init PARAMS ((int));
175
176 extern void
177 proc_signal_handling_change PARAMS ((void));
178
179 extern void
180 proc_set_exec_trap PARAMS ((void));
181
182 #endif
183
184 /* From inflow.c */
185
186 extern void
187 new_tty_prefork PARAMS ((char *));
188
189 /* From infrun.c */
190
191 extern void
192 start_remote PARAMS ((void));
193
194 extern void
195 child_create_inferior PARAMS ((char *, char *, char **));
196
197 extern void
198 child_attach PARAMS ((char *, int));
199
200 extern void
201 normal_stop PARAMS ((void));
202
203 extern int
204 signal_stop_state PARAMS ((int));
205
206 extern int
207 signal_print_state PARAMS ((int));
208
209 extern int
210 signal_pass_state PARAMS ((int));
211
212 /* From infcmd.c */
213
214 extern void
215 tty_command PARAMS ((char *, int));
216
217 extern void
218 attach_command PARAMS ((char *, int));
219
220 /* Last signal that the inferior received (why it stopped).  */
221
222 extern int stop_signal;
223
224 /* Address at which inferior stopped.  */
225
226 extern CORE_ADDR stop_pc;
227
228 /* Stack frame when program stopped.  */
229
230 extern FRAME_ADDR stop_frame_address;
231
232 /* Chain containing status of breakpoint(s) that we have stopped at.  */
233
234 extern bpstat stop_bpstat;
235
236 /* Flag indicating that a command has proceeded the inferior past the
237    current breakpoint.  */
238
239 extern int breakpoint_proceeded;
240
241 /* Nonzero if stopped due to a step command.  */
242
243 extern int stop_step;
244
245 /* Nonzero if stopped due to completion of a stack dummy routine.  */
246
247 extern int stop_stack_dummy;
248
249 /* Nonzero if program stopped due to a random (unexpected) signal in
250    inferior process.  */
251
252 extern int stopped_by_random_signal;
253
254 /* Range to single step within.
255    If this is nonzero, respond to a single-step signal
256    by continuing to step if the pc is in this range.  */
257
258 extern CORE_ADDR step_range_start; /* Inclusive */
259 extern CORE_ADDR step_range_end; /* Exclusive */
260
261 /* Stack frame address as of when stepping command was issued.
262    This is how we know when we step into a subroutine call,
263    and how to set the frame for the breakpoint used to step out.  */
264
265 extern FRAME_ADDR step_frame_address;
266
267 /* 1 means step over all subroutine calls.
268    -1 means step over calls to undebuggable functions.  */
269
270 extern int step_over_calls;
271
272 /* If stepping, nonzero means step count is > 1
273    so don't print frame next time inferior stops
274    if it stops due to stepping.  */
275
276 extern int step_multi;
277
278 /* Nonzero means expecting a trap and caller will handle it themselves.
279    It is used after attach, due to attaching to a process;
280    when running in the shell before the child program has been exec'd;
281    and when running some kinds of remote stuff (FIXME?).  */
282
283 extern int stop_soon_quietly;
284
285 /* Nonzero if proceed is being used for a "finish" command or a similar
286    situation when stop_registers should be saved.  */
287
288 extern int proceed_to_finish;
289
290 /* Save register contents here when about to pop a stack dummy frame,
291    if-and-only-if proceed_to_finish is set.
292    Thus this contains the return value from the called function (assuming
293    values are returned in a register).  */
294
295 extern char stop_registers[REGISTER_BYTES];
296
297 /* Nonzero if pc has been changed by the debugger
298    since the inferior stopped.  */
299
300 extern int pc_changed;
301
302 /* Nonzero if the child process in inferior_pid was attached rather
303    than forked.  */
304
305 extern int attach_flag;
306 \f
307 /* Possible values for CALL_DUMMY_LOCATION.  */
308 #define ON_STACK 1
309 #define BEFORE_TEXT_END 2
310 #define AFTER_TEXT_END 3
311
312 #if !defined (CALL_DUMMY_LOCATION)
313 #define CALL_DUMMY_LOCATION ON_STACK
314 #endif /* No CALL_DUMMY_LOCATION.  */
315
316 /* Are we in a call dummy?  The code below which allows DECR_PC_AFTER_BREAK
317    below is for infrun.c, which may give the macro a pc without that
318    subtracted out.  */
319 #if !defined (PC_IN_CALL_DUMMY)
320 #if CALL_DUMMY_LOCATION == BEFORE_TEXT_END
321 extern CORE_ADDR text_end;
322 #define PC_IN_CALL_DUMMY(pc, sp, frame_address) \
323   ((pc) >= text_end - CALL_DUMMY_LENGTH         \
324    && (pc) < text_end + DECR_PC_AFTER_BREAK)
325 #else /* Not before text_end.  */
326 #if CALL_DUMMY_LOCATION == AFTER_TEXT_END
327 extern CORE_ADDR text_end;
328 #define PC_IN_CALL_DUMMY(pc, sp, frame_address) \
329   ((pc) >= text_end   \
330    && (pc) < text_end + CALL_DUMMY_LENGTH + DECR_PC_AFTER_BREAK)
331 #else /* On stack.  */
332 #define PC_IN_CALL_DUMMY(pc, sp, frame_address) \
333   ((sp) INNER_THAN (pc) && (pc) INNER_THAN (frame_address))
334 #endif /* On stack.  */
335 #endif /* Not before text_end.  */
336 #endif /* No PC_IN_CALL_DUMMY.  */
337
338 #endif  /* !defined (INFERIOR_H) */