]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/infrun.c
import gdb-1999-07-19 snapshot
[thirdparty/binutils-gdb.git] / gdb / infrun.c
CommitLineData
c906108c 1/* Target-struct-independent code to start (run) and stop an inferior process.
7a292a7a 2 Copyright 1986-1989, 1991-1999 Free Software Foundation, Inc.
c906108c 3
c5aa993b 4 This file is part of GDB.
c906108c 5
c5aa993b
JM
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
c906108c 10
c5aa993b
JM
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
c906108c 15
c5aa993b
JM
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
c906108c
SS
20
21#include "defs.h"
22#include "gdb_string.h"
23#include <ctype.h>
24#include "symtab.h"
25#include "frame.h"
26#include "inferior.h"
27#include "breakpoint.h"
28#include "wait.h"
29#include "gdbcore.h"
30#include "gdbcmd.h"
31#include "target.h"
32#include "gdbthread.h"
33#include "annotate.h"
34#include "symfile.h" /* for overlay functions */
7a292a7a 35#include "top.h"
c906108c 36#include <signal.h>
43ff13b4 37#include "event-loop.h"
c906108c
SS
38
39/* Prototypes for local functions */
40
41static void signals_info PARAMS ((char *, int));
42
43static void handle_command PARAMS ((char *, int));
44
45static void sig_print_info PARAMS ((enum target_signal));
46
47static void sig_print_header PARAMS ((void));
48
49static void resume_cleanups PARAMS ((int));
50
51static int hook_stop_stub PARAMS ((PTR));
52
53static void delete_breakpoint_current_contents PARAMS ((PTR));
54
c5aa993b 55static void set_follow_fork_mode_command PARAMS ((char *arg, int from_tty, struct cmd_list_element * c));
7a292a7a 56
43ff13b4
JM
57static void complete_execution PARAMS ((void));
58
c906108c
SS
59int inferior_ignoring_startup_exec_events = 0;
60int inferior_ignoring_leading_exec_events = 0;
61
43ff13b4
JM
62/* In asynchronous mode, but simulating synchronous execution. */
63int sync_execution = 0;
64
c906108c
SS
65/* wait_for_inferior and normal_stop use this to notify the user
66 when the inferior stopped in a different thread than it had been
67 running in. */
68static int switched_from_inferior_pid;
7a292a7a
SS
69
70/* This will be true for configurations that may actually report an
71 inferior pid different from the original. At present this is only
72 true for HP-UX native. */
73
74#ifndef MAY_SWITCH_FROM_INFERIOR_PID
75#define MAY_SWITCH_FROM_INFERIOR_PID (0)
76#endif
77
78static int may_switch_from_inferior_pid = MAY_SWITCH_FROM_INFERIOR_PID;
79
80/* This is true for configurations that may follow through execl() and
81 similar functions. At present this is only true for HP-UX native. */
82
83#ifndef MAY_FOLLOW_EXEC
84#define MAY_FOLLOW_EXEC (0)
c906108c
SS
85#endif
86
7a292a7a
SS
87static int may_follow_exec = MAY_FOLLOW_EXEC;
88
c906108c
SS
89/* resume and wait_for_inferior use this to ensure that when
90 stepping over a hit breakpoint in a threaded application
91 only the thread that hit the breakpoint is stepped and the
92 other threads don't continue. This prevents having another
93 thread run past the breakpoint while it is temporarily
94 removed.
95
96 This is not thread-specific, so it isn't saved as part of
97 the infrun state.
98
99 Versions of gdb which don't use the "step == this thread steps
100 and others continue" model but instead use the "step == this
101 thread steps and others wait" shouldn't do this. */
102static int thread_step_needed = 0;
103
7a292a7a
SS
104/* This is true if thread_step_needed should actually be used. At
105 present this is only true for HP-UX native. */
106
107#ifndef USE_THREAD_STEP_NEEDED
108#define USE_THREAD_STEP_NEEDED (0)
109#endif
110
111static int use_thread_step_needed = USE_THREAD_STEP_NEEDED;
112
392a587b
JM
113static void follow_inferior_fork PARAMS ((int parent_pid,
114 int child_pid,
115 int has_forked,
116 int has_vforked));
117
118static void follow_fork PARAMS ((int parent_pid, int child_pid));
119
120static void follow_vfork PARAMS ((int parent_pid, int child_pid));
121
122static void set_schedlock_func PARAMS ((char *args, int from_tty,
c5aa993b 123 struct cmd_list_element * c));
392a587b 124
c5aa993b 125static int is_internal_shlib_eventpoint PARAMS ((struct breakpoint * ep));
392a587b
JM
126
127static int stopped_for_internal_shlib_event PARAMS ((bpstat bs));
128
129static int stopped_for_shlib_catchpoint PARAMS ((bpstat bs,
c5aa993b 130 struct breakpoint ** cp_p));
392a587b
JM
131
132#if __STDC__
133struct execution_control_state;
134#endif
c5aa993b 135static int currently_stepping PARAMS ((struct execution_control_state * ecs));
392a587b
JM
136
137static void xdb_handle_command PARAMS ((char *args, int from_tty));
138
c906108c
SS
139void _initialize_infrun PARAMS ((void));
140
141/* GET_LONGJMP_TARGET returns the PC at which longjmp() will resume the
142 program. It needs to examine the jmp_buf argument and extract the PC
143 from it. The return value is non-zero on success, zero otherwise. */
144
145#ifndef GET_LONGJMP_TARGET
146#define GET_LONGJMP_TARGET(PC_ADDR) 0
147#endif
148
149
150/* Some machines have trampoline code that sits between function callers
151 and the actual functions themselves. If this machine doesn't have
152 such things, disable their processing. */
153
154#ifndef SKIP_TRAMPOLINE_CODE
155#define SKIP_TRAMPOLINE_CODE(pc) 0
156#endif
157
158/* Dynamic function trampolines are similar to solib trampolines in that they
159 are between the caller and the callee. The difference is that when you
160 enter a dynamic trampoline, you can't determine the callee's address. Some
161 (usually complex) code needs to run in the dynamic trampoline to figure out
162 the callee's address. This macro is usually called twice. First, when we
163 enter the trampoline (looks like a normal function call at that point). It
164 should return the PC of a point within the trampoline where the callee's
165 address is known. Second, when we hit the breakpoint, this routine returns
166 the callee's address. At that point, things proceed as per a step resume
167 breakpoint. */
168
169#ifndef DYNAMIC_TRAMPOLINE_NEXTPC
170#define DYNAMIC_TRAMPOLINE_NEXTPC(pc) 0
171#endif
172
173/* On SVR4 based systems, determining the callee's address is exceedingly
174 difficult and depends on the implementation of the run time loader.
175 If we are stepping at the source level, we single step until we exit
176 the run time loader code and reach the callee's address. */
177
178#ifndef IN_SOLIB_DYNSYM_RESOLVE_CODE
179#define IN_SOLIB_DYNSYM_RESOLVE_CODE(pc) 0
180#endif
181
182/* For SVR4 shared libraries, each call goes through a small piece of
183 trampoline code in the ".plt" section. IN_SOLIB_CALL_TRAMPOLINE evaluates
184 to nonzero if we are current stopped in one of these. */
185
186#ifndef IN_SOLIB_CALL_TRAMPOLINE
187#define IN_SOLIB_CALL_TRAMPOLINE(pc,name) 0
188#endif
189
190/* In some shared library schemes, the return path from a shared library
191 call may need to go through a trampoline too. */
192
193#ifndef IN_SOLIB_RETURN_TRAMPOLINE
194#define IN_SOLIB_RETURN_TRAMPOLINE(pc,name) 0
195#endif
196
197/* This function returns TRUE if pc is the address of an instruction
198 that lies within the dynamic linker (such as the event hook, or the
199 dld itself).
200
201 This function must be used only when a dynamic linker event has
202 been caught, and the inferior is being stepped out of the hook, or
203 undefined results are guaranteed. */
204
205#ifndef SOLIB_IN_DYNAMIC_LINKER
206#define SOLIB_IN_DYNAMIC_LINKER(pid,pc) 0
207#endif
208
209/* On MIPS16, a function that returns a floating point value may call
210 a library helper function to copy the return value to a floating point
211 register. The IGNORE_HELPER_CALL macro returns non-zero if we
212 should ignore (i.e. step over) this function call. */
213#ifndef IGNORE_HELPER_CALL
214#define IGNORE_HELPER_CALL(pc) 0
215#endif
216
217/* On some systems, the PC may be left pointing at an instruction that won't
218 actually be executed. This is usually indicated by a bit in the PSW. If
219 we find ourselves in such a state, then we step the target beyond the
220 nullified instruction before returning control to the user so as to avoid
221 confusion. */
222
223#ifndef INSTRUCTION_NULLIFIED
224#define INSTRUCTION_NULLIFIED 0
225#endif
226
7a292a7a
SS
227/* Convert the #defines into values. This is temporary until wfi control
228 flow is completely sorted out. */
229
230#ifndef HAVE_STEPPABLE_WATCHPOINT
231#define HAVE_STEPPABLE_WATCHPOINT 0
232#else
233#undef HAVE_STEPPABLE_WATCHPOINT
234#define HAVE_STEPPABLE_WATCHPOINT 1
235#endif
236
237#ifndef HAVE_NONSTEPPABLE_WATCHPOINT
238#define HAVE_NONSTEPPABLE_WATCHPOINT 0
239#else
240#undef HAVE_NONSTEPPABLE_WATCHPOINT
241#define HAVE_NONSTEPPABLE_WATCHPOINT 1
242#endif
243
244#ifndef HAVE_CONTINUABLE_WATCHPOINT
245#define HAVE_CONTINUABLE_WATCHPOINT 0
246#else
247#undef HAVE_CONTINUABLE_WATCHPOINT
248#define HAVE_CONTINUABLE_WATCHPOINT 1
249#endif
250
c906108c
SS
251/* Tables of how to react to signals; the user sets them. */
252
253static unsigned char *signal_stop;
254static unsigned char *signal_print;
255static unsigned char *signal_program;
256
257#define SET_SIGS(nsigs,sigs,flags) \
258 do { \
259 int signum = (nsigs); \
260 while (signum-- > 0) \
261 if ((sigs)[signum]) \
262 (flags)[signum] = 1; \
263 } while (0)
264
265#define UNSET_SIGS(nsigs,sigs,flags) \
266 do { \
267 int signum = (nsigs); \
268 while (signum-- > 0) \
269 if ((sigs)[signum]) \
270 (flags)[signum] = 0; \
271 } while (0)
272
273
274/* Command list pointer for the "stop" placeholder. */
275
276static struct cmd_list_element *stop_command;
277
278/* Nonzero if breakpoints are now inserted in the inferior. */
279
280static int breakpoints_inserted;
281
282/* Function inferior was in as of last step command. */
283
284static struct symbol *step_start_function;
285
286/* Nonzero if we are expecting a trace trap and should proceed from it. */
287
288static int trap_expected;
289
290#ifdef SOLIB_ADD
291/* Nonzero if we want to give control to the user when we're notified
292 of shared library events by the dynamic linker. */
293static int stop_on_solib_events;
294#endif
295
296#ifdef HP_OS_BUG
297/* Nonzero if the next time we try to continue the inferior, it will
298 step one instruction and generate a spurious trace trap.
299 This is used to compensate for a bug in HP-UX. */
300
301static int trap_expected_after_continue;
302#endif
303
304/* Nonzero means expecting a trace trap
305 and should stop the inferior and return silently when it happens. */
306
307int stop_after_trap;
308
309/* Nonzero means expecting a trap and caller will handle it themselves.
310 It is used after attach, due to attaching to a process;
311 when running in the shell before the child program has been exec'd;
312 and when running some kinds of remote stuff (FIXME?). */
313
314int stop_soon_quietly;
315
316/* Nonzero if proceed is being used for a "finish" command or a similar
317 situation when stop_registers should be saved. */
318
319int proceed_to_finish;
320
321/* Save register contents here when about to pop a stack dummy frame,
322 if-and-only-if proceed_to_finish is set.
323 Thus this contains the return value from the called function (assuming
324 values are returned in a register). */
325
7a292a7a 326char *stop_registers;
c906108c
SS
327
328/* Nonzero if program stopped due to error trying to insert breakpoints. */
329
330static int breakpoints_failed;
331
332/* Nonzero after stop if current stack frame should be printed. */
333
334static int stop_print_frame;
335
336static struct breakpoint *step_resume_breakpoint = NULL;
337static struct breakpoint *through_sigtramp_breakpoint = NULL;
338
339/* On some platforms (e.g., HP-UX), hardware watchpoints have bad
340 interactions with an inferior that is running a kernel function
341 (aka, a system call or "syscall"). wait_for_inferior therefore
342 may have a need to know when the inferior is in a syscall. This
343 is a count of the number of inferior threads which are known to
344 currently be running in a syscall. */
345static int number_of_threads_in_syscalls;
346
347/* This is used to remember when a fork, vfork or exec event
348 was caught by a catchpoint, and thus the event is to be
349 followed at the next resume of the inferior, and not
350 immediately. */
351static struct
352 {
353 enum target_waitkind kind;
354 struct
355 {
356 int parent_pid;
357 int saw_parent_fork;
358 int child_pid;
359 int saw_child_fork;
360 int saw_child_exec;
361 }
362 fork_event;
363 char *execd_pathname;
364 }
365pending_follow;
366
367/* Some platforms don't allow us to do anything meaningful with a
368 vforked child until it has exec'd. Vforked processes on such
369 platforms can only be followed after they've exec'd.
370
371 When this is set to 0, a vfork can be immediately followed,
372 and an exec can be followed merely as an exec. When this is
373 set to 1, a vfork event has been seen, but cannot be followed
374 until the exec is seen.
375
376 (In the latter case, inferior_pid is still the parent of the
377 vfork, and pending_follow.fork_event.child_pid is the child. The
378 appropriate process is followed, according to the setting of
379 follow-fork-mode.) */
380static int follow_vfork_when_exec;
381
382static char *follow_fork_mode_kind_names[] =
383{
384/* ??rehrauer: The "both" option is broken, by what may be a 10.20
385 kernel problem. It's also not terribly useful without a GUI to
386 help the user drive two debuggers. So for now, I'm disabling
387 the "both" option.
c5aa993b
JM
388 "parent", "child", "both", "ask" };
389 */
c906108c
SS
390 "parent", "child", "ask"};
391
392static char *follow_fork_mode_string = NULL;
393\f
394
c906108c
SS
395static void
396follow_inferior_fork (parent_pid, child_pid, has_forked, has_vforked)
397 int parent_pid;
398 int child_pid;
399 int has_forked;
400 int has_vforked;
401{
402 int followed_parent = 0;
403 int followed_child = 0;
404 int ima_clone = 0;
405
406 /* Which process did the user want us to follow? */
407 char *follow_mode =
408 savestring (follow_fork_mode_string, strlen (follow_fork_mode_string));
409
410 /* Or, did the user not know, and want us to ask? */
411 if (STREQ (follow_fork_mode_string, "ask"))
412 {
413 char requested_mode[100];
414
415 free (follow_mode);
416 error ("\"ask\" mode NYI");
417 follow_mode = savestring (requested_mode, strlen (requested_mode));
418 }
419
420 /* If we're to be following the parent, then detach from child_pid.
421 We're already following the parent, so need do nothing explicit
422 for it. */
423 if (STREQ (follow_mode, "parent"))
424 {
425 followed_parent = 1;
426
427 /* We're already attached to the parent, by default. */
428
429 /* Before detaching from the child, remove all breakpoints from
430 it. (This won't actually modify the breakpoint list, but will
431 physically remove the breakpoints from the child.) */
432 if (!has_vforked || !follow_vfork_when_exec)
433 {
434 detach_breakpoints (child_pid);
7a292a7a 435#ifdef SOLIB_REMOVE_INFERIOR_HOOK
c906108c 436 SOLIB_REMOVE_INFERIOR_HOOK (child_pid);
7a292a7a 437#endif
c906108c
SS
438 }
439
440 /* Detach from the child. */
441 dont_repeat ();
442
443 target_require_detach (child_pid, "", 1);
444 }
445
446 /* If we're to be following the child, then attach to it, detach
447 from inferior_pid, and set inferior_pid to child_pid. */
448 else if (STREQ (follow_mode, "child"))
449 {
450 char child_pid_spelling[100]; /* Arbitrary length. */
451
452 followed_child = 1;
453
454 /* Before detaching from the parent, detach all breakpoints from
455 the child. But only if we're forking, or if we follow vforks
456 as soon as they happen. (If we're following vforks only when
457 the child has exec'd, then it's very wrong to try to write
458 back the "shadow contents" of inserted breakpoints now -- they
459 belong to the child's pre-exec'd a.out.) */
460 if (!has_vforked || !follow_vfork_when_exec)
461 {
462 detach_breakpoints (child_pid);
463 }
464
465 /* Before detaching from the parent, remove all breakpoints from it. */
466 remove_breakpoints ();
467
468 /* Also reset the solib inferior hook from the parent. */
7a292a7a 469#ifdef SOLIB_REMOVE_INFERIOR_HOOK
c906108c 470 SOLIB_REMOVE_INFERIOR_HOOK (inferior_pid);
7a292a7a 471#endif
c906108c
SS
472
473 /* Detach from the parent. */
474 dont_repeat ();
475 target_detach (NULL, 1);
476
477 /* Attach to the child. */
478 inferior_pid = child_pid;
479 sprintf (child_pid_spelling, "%d", child_pid);
480 dont_repeat ();
481
482 target_require_attach (child_pid_spelling, 1);
483
484 /* Was there a step_resume breakpoint? (There was if the user
485 did a "next" at the fork() call.) If so, explicitly reset its
486 thread number.
487
488 step_resumes are a form of bp that are made to be per-thread.
489 Since we created the step_resume bp when the parent process
490 was being debugged, and now are switching to the child process,
491 from the breakpoint package's viewpoint, that's a switch of
492 "threads". We must update the bp's notion of which thread
493 it is for, or it'll be ignored when it triggers... */
494 if (step_resume_breakpoint &&
495 (!has_vforked || !follow_vfork_when_exec))
496 breakpoint_re_set_thread (step_resume_breakpoint);
497
498 /* Reinsert all breakpoints in the child. (The user may've set
499 breakpoints after catching the fork, in which case those
500 actually didn't get set in the child, but only in the parent.) */
501 if (!has_vforked || !follow_vfork_when_exec)
502 {
503 breakpoint_re_set ();
504 insert_breakpoints ();
505 }
506 }
507
508 /* If we're to be following both parent and child, then fork ourselves,
509 and attach the debugger clone to the child. */
510 else if (STREQ (follow_mode, "both"))
511 {
512 char pid_suffix[100]; /* Arbitrary length. */
513
514 /* Clone ourselves to follow the child. This is the end of our
c5aa993b 515 involvement with child_pid; our clone will take it from here... */
c906108c
SS
516 dont_repeat ();
517 target_clone_and_follow_inferior (child_pid, &followed_child);
518 followed_parent = !followed_child;
519
520 /* We continue to follow the parent. To help distinguish the two
521 debuggers, though, both we and our clone will reset our prompts. */
522 sprintf (pid_suffix, "[%d] ", inferior_pid);
523 set_prompt (strcat (get_prompt (), pid_suffix));
524 }
525
526 /* The parent and child of a vfork share the same address space.
527 Also, on some targets the order in which vfork and exec events
528 are received for parent in child requires some delicate handling
529 of the events.
530
531 For instance, on ptrace-based HPUX we receive the child's vfork
532 event first, at which time the parent has been suspended by the
533 OS and is essentially untouchable until the child's exit or second
534 exec event arrives. At that time, the parent's vfork event is
535 delivered to us, and that's when we see and decide how to follow
536 the vfork. But to get to that point, we must continue the child
537 until it execs or exits. To do that smoothly, all breakpoints
538 must be removed from the child, in case there are any set between
539 the vfork() and exec() calls. But removing them from the child
540 also removes them from the parent, due to the shared-address-space
541 nature of a vfork'd parent and child. On HPUX, therefore, we must
542 take care to restore the bp's to the parent before we continue it.
543 Else, it's likely that we may not stop in the expected place. (The
544 worst scenario is when the user tries to step over a vfork() call;
545 the step-resume bp must be restored for the step to properly stop
546 in the parent after the call completes!)
547
548 Sequence of events, as reported to gdb from HPUX:
549
c5aa993b
JM
550 Parent Child Action for gdb to take
551 -------------------------------------------------------
552 1 VFORK Continue child
553 2 EXEC
554 3 EXEC or EXIT
555 4 VFORK */
c906108c
SS
556 if (has_vforked)
557 {
558 target_post_follow_vfork (parent_pid,
559 followed_parent,
560 child_pid,
561 followed_child);
562 }
563
564 pending_follow.fork_event.saw_parent_fork = 0;
565 pending_follow.fork_event.saw_child_fork = 0;
566
567 free (follow_mode);
568}
569
570static void
571follow_fork (parent_pid, child_pid)
572 int parent_pid;
573 int child_pid;
574{
575 follow_inferior_fork (parent_pid, child_pid, 1, 0);
576}
577
578
579/* Forward declaration. */
580static void follow_exec PARAMS ((int, char *));
581
582static void
583follow_vfork (parent_pid, child_pid)
584 int parent_pid;
585 int child_pid;
586{
587 follow_inferior_fork (parent_pid, child_pid, 0, 1);
588
589 /* Did we follow the child? Had it exec'd before we saw the parent vfork? */
590 if (pending_follow.fork_event.saw_child_exec && (inferior_pid == child_pid))
591 {
592 pending_follow.fork_event.saw_child_exec = 0;
593 pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
594 follow_exec (inferior_pid, pending_follow.execd_pathname);
595 free (pending_follow.execd_pathname);
596 }
597}
c906108c
SS
598
599static void
600follow_exec (pid, execd_pathname)
601 int pid;
602 char *execd_pathname;
603{
c906108c 604 int saved_pid = pid;
7a292a7a
SS
605 struct target_ops *tgt;
606
607 if (!may_follow_exec)
608 return;
c906108c
SS
609
610 /* Did this exec() follow a vfork()? If so, we must follow the
611 vfork now too. Do it before following the exec. */
612 if (follow_vfork_when_exec &&
613 (pending_follow.kind == TARGET_WAITKIND_VFORKED))
614 {
615 pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
616 follow_vfork (inferior_pid, pending_follow.fork_event.child_pid);
617 follow_vfork_when_exec = 0;
618 saved_pid = inferior_pid;
619
620 /* Did we follow the parent? If so, we're done. If we followed
621 the child then we must also follow its exec(). */
622 if (inferior_pid == pending_follow.fork_event.parent_pid)
623 return;
624 }
625
626 /* This is an exec event that we actually wish to pay attention to.
627 Refresh our symbol table to the newly exec'd program, remove any
628 momentary bp's, etc.
629
630 If there are breakpoints, they aren't really inserted now,
631 since the exec() transformed our inferior into a fresh set
632 of instructions.
633
634 We want to preserve symbolic breakpoints on the list, since
635 we have hopes that they can be reset after the new a.out's
636 symbol table is read.
637
638 However, any "raw" breakpoints must be removed from the list
639 (e.g., the solib bp's), since their address is probably invalid
640 now.
641
642 And, we DON'T want to call delete_breakpoints() here, since
643 that may write the bp's "shadow contents" (the instruction
644 value that was overwritten witha TRAP instruction). Since
645 we now have a new a.out, those shadow contents aren't valid. */
646 update_breakpoints_after_exec ();
647
648 /* If there was one, it's gone now. We cannot truly step-to-next
649 statement through an exec(). */
650 step_resume_breakpoint = NULL;
651 step_range_start = 0;
652 step_range_end = 0;
653
654 /* If there was one, it's gone now. */
655 through_sigtramp_breakpoint = NULL;
656
657 /* What is this a.out's name? */
658 printf_unfiltered ("Executing new program: %s\n", execd_pathname);
659
660 /* We've followed the inferior through an exec. Therefore, the
661 inferior has essentially been killed & reborn. */
7a292a7a
SS
662
663 /* First collect the run target in effect. */
664 tgt = find_run_target ();
665 /* If we can't find one, things are in a very strange state... */
666 if (tgt == NULL)
667 error ("Could find run target to save before following exec");
668
c906108c
SS
669 gdb_flush (gdb_stdout);
670 target_mourn_inferior ();
c5aa993b 671 inferior_pid = saved_pid; /* Because mourn_inferior resets inferior_pid. */
7a292a7a 672 push_target (tgt);
c906108c
SS
673
674 /* That a.out is now the one to use. */
675 exec_file_attach (execd_pathname, 0);
676
677 /* And also is where symbols can be found. */
678 symbol_file_command (execd_pathname, 0);
679
680 /* Reset the shared library package. This ensures that we get
681 a shlib event when the child reaches "_start", at which point
682 the dld will have had a chance to initialize the child. */
7a292a7a 683#if defined(SOLIB_RESTART)
c906108c 684 SOLIB_RESTART ();
7a292a7a
SS
685#endif
686#ifdef SOLIB_CREATE_INFERIOR_HOOK
c906108c 687 SOLIB_CREATE_INFERIOR_HOOK (inferior_pid);
7a292a7a 688#endif
c906108c
SS
689
690 /* Reinsert all breakpoints. (Those which were symbolic have
691 been reset to the proper address in the new a.out, thanks
692 to symbol_file_command...) */
693 insert_breakpoints ();
694
695 /* The next resume of this inferior should bring it to the shlib
696 startup breakpoints. (If the user had also set bp's on
697 "main" from the old (parent) process, then they'll auto-
698 matically get reset there in the new process.) */
c906108c
SS
699}
700
701/* Non-zero if we just simulating a single-step. This is needed
702 because we cannot remove the breakpoints in the inferior process
703 until after the `wait' in `wait_for_inferior'. */
704static int singlestep_breakpoints_inserted_p = 0;
705\f
706
707/* Things to clean up if we QUIT out of resume (). */
708/* ARGSUSED */
709static void
710resume_cleanups (arg)
711 int arg;
712{
713 normal_stop ();
714}
715
716static char schedlock_off[] = "off";
717static char schedlock_on[] = "on";
718static char schedlock_step[] = "step";
719static char *scheduler_mode = schedlock_off;
720static char *scheduler_enums[] =
721{schedlock_off, schedlock_on, schedlock_step};
722
723static void
724set_schedlock_func (args, from_tty, c)
725 char *args;
726 int from_tty;
727 struct cmd_list_element *c;
728{
729 if (c->type == set_cmd)
730 if (!target_can_lock_scheduler)
731 {
732 scheduler_mode = schedlock_off;
733 error ("Target '%s' cannot support this command.",
734 target_shortname);
735 }
736}
737
738
739/* Resume the inferior, but allow a QUIT. This is useful if the user
740 wants to interrupt some lengthy single-stepping operation
741 (for child processes, the SIGINT goes to the inferior, and so
742 we get a SIGINT random_signal, but for remote debugging and perhaps
743 other targets, that's not true).
744
745 STEP nonzero if we should step (zero to continue instead).
746 SIG is the signal to give the inferior (zero for none). */
747void
748resume (step, sig)
749 int step;
750 enum target_signal sig;
751{
752 int should_resume = 1;
753 struct cleanup *old_cleanups = make_cleanup ((make_cleanup_func)
754 resume_cleanups, 0);
755 QUIT;
756
757#ifdef CANNOT_STEP_BREAKPOINT
758 /* Most targets can step a breakpoint instruction, thus executing it
759 normally. But if this one cannot, just continue and we will hit
760 it anyway. */
761 if (step && breakpoints_inserted && breakpoint_here_p (read_pc ()))
762 step = 0;
763#endif
764
765 if (SOFTWARE_SINGLE_STEP_P && step)
766 {
767 /* Do it the hard way, w/temp breakpoints */
c5aa993b 768 SOFTWARE_SINGLE_STEP (sig, 1 /*insert-breakpoints */ );
c906108c
SS
769 /* ...and don't ask hardware to do it. */
770 step = 0;
771 /* and do not pull these breakpoints until after a `wait' in
772 `wait_for_inferior' */
773 singlestep_breakpoints_inserted_p = 1;
774 }
775
776 /* Handle any optimized stores to the inferior NOW... */
777#ifdef DO_DEFERRED_STORES
778 DO_DEFERRED_STORES;
779#endif
780
c906108c
SS
781 /* If there were any forks/vforks/execs that were caught and are
782 now to be followed, then do so. */
783 switch (pending_follow.kind)
784 {
785 case (TARGET_WAITKIND_FORKED):
786 pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
787 follow_fork (inferior_pid, pending_follow.fork_event.child_pid);
788 break;
789
790 case (TARGET_WAITKIND_VFORKED):
791 {
792 int saw_child_exec = pending_follow.fork_event.saw_child_exec;
793
794 pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
795 follow_vfork (inferior_pid, pending_follow.fork_event.child_pid);
796
797 /* Did we follow the child, but not yet see the child's exec event?
c5aa993b
JM
798 If so, then it actually ought to be waiting for us; we respond to
799 parent vfork events. We don't actually want to resume the child
800 in this situation; we want to just get its exec event. */
c906108c
SS
801 if (!saw_child_exec &&
802 (inferior_pid == pending_follow.fork_event.child_pid))
803 should_resume = 0;
804 }
805 break;
806
807 case (TARGET_WAITKIND_EXECD):
808 /* If we saw a vfork event but couldn't follow it until we saw
c5aa993b 809 an exec, then now might be the time! */
c906108c
SS
810 pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
811 /* follow_exec is called as soon as the exec event is seen. */
812 break;
813
814 default:
815 break;
816 }
c906108c
SS
817
818 /* Install inferior's terminal modes. */
819 target_terminal_inferior ();
820
821 if (should_resume)
822 {
7a292a7a 823 if (use_thread_step_needed && thread_step_needed)
c906108c
SS
824 {
825 /* We stopped on a BPT instruction;
826 don't continue other threads and
827 just step this thread. */
828 thread_step_needed = 0;
829
830 if (!breakpoint_here_p (read_pc ()))
831 {
832 /* Breakpoint deleted: ok to do regular resume
c5aa993b 833 where all the threads either step or continue. */
c906108c
SS
834 target_resume (-1, step, sig);
835 }
836 else
837 {
838 if (!step)
839 {
840 warning ("Internal error, changing continue to step.");
841 remove_breakpoints ();
842 breakpoints_inserted = 0;
843 trap_expected = 1;
844 step = 1;
845 }
846
847 target_resume (inferior_pid, step, sig);
848 }
849 }
850 else
c906108c
SS
851 {
852 /* Vanilla resume. */
853
854 if ((scheduler_mode == schedlock_on) ||
855 (scheduler_mode == schedlock_step && step != 0))
856 target_resume (inferior_pid, step, sig);
857 else
858 target_resume (-1, step, sig);
859 }
860 }
861
862 discard_cleanups (old_cleanups);
863}
864\f
865
866/* Clear out all variables saying what to do when inferior is continued.
867 First do this, then set the ones you want, then call `proceed'. */
868
869void
870clear_proceed_status ()
871{
872 trap_expected = 0;
873 step_range_start = 0;
874 step_range_end = 0;
875 step_frame_address = 0;
876 step_over_calls = -1;
877 stop_after_trap = 0;
878 stop_soon_quietly = 0;
879 proceed_to_finish = 0;
880 breakpoint_proceeded = 1; /* We're about to proceed... */
881
882 /* Discard any remaining commands or status from previous stop. */
883 bpstat_clear (&stop_bpstat);
884}
885
886/* Basic routine for continuing the program in various fashions.
887
888 ADDR is the address to resume at, or -1 for resume where stopped.
889 SIGGNAL is the signal to give it, or 0 for none,
c5aa993b 890 or -1 for act according to how it stopped.
c906108c 891 STEP is nonzero if should trap after one instruction.
c5aa993b
JM
892 -1 means return after that and print nothing.
893 You should probably set various step_... variables
894 before calling here, if you are stepping.
c906108c
SS
895
896 You should call clear_proceed_status before calling proceed. */
897
898void
899proceed (addr, siggnal, step)
900 CORE_ADDR addr;
901 enum target_signal siggnal;
902 int step;
903{
904 int oneproc = 0;
905
906 if (step > 0)
907 step_start_function = find_pc_function (read_pc ());
908 if (step < 0)
909 stop_after_trap = 1;
910
911 if (addr == (CORE_ADDR) - 1)
912 {
913 /* If there is a breakpoint at the address we will resume at,
c5aa993b
JM
914 step one instruction before inserting breakpoints
915 so that we do not stop right away (and report a second
c906108c
SS
916 hit at this breakpoint). */
917
918 if (read_pc () == stop_pc && breakpoint_here_p (read_pc ()))
919 oneproc = 1;
920
921#ifndef STEP_SKIPS_DELAY
922#define STEP_SKIPS_DELAY(pc) (0)
923#define STEP_SKIPS_DELAY_P (0)
924#endif
925 /* Check breakpoint_here_p first, because breakpoint_here_p is fast
c5aa993b
JM
926 (it just checks internal GDB data structures) and STEP_SKIPS_DELAY
927 is slow (it needs to read memory from the target). */
c906108c
SS
928 if (STEP_SKIPS_DELAY_P
929 && breakpoint_here_p (read_pc () + 4)
930 && STEP_SKIPS_DELAY (read_pc ()))
931 oneproc = 1;
932 }
933 else
934 {
935 write_pc (addr);
936
937 /* New address; we don't need to single-step a thread
c5aa993b
JM
938 over a breakpoint we just hit, 'cause we aren't
939 continuing from there.
c906108c 940
c5aa993b
JM
941 It's not worth worrying about the case where a user
942 asks for a "jump" at the current PC--if they get the
943 hiccup of re-hiting a hit breakpoint, what else do
944 they expect? */
c906108c
SS
945 thread_step_needed = 0;
946 }
947
948#ifdef PREPARE_TO_PROCEED
949 /* In a multi-threaded task we may select another thread
950 and then continue or step.
951
952 But if the old thread was stopped at a breakpoint, it
953 will immediately cause another breakpoint stop without
954 any execution (i.e. it will report a breakpoint hit
955 incorrectly). So we must step over it first.
956
957 PREPARE_TO_PROCEED checks the current thread against the thread
958 that reported the most recent event. If a step-over is required
959 it returns TRUE and sets the current thread to the old thread. */
9e086581 960 if (PREPARE_TO_PROCEED (1) && breakpoint_here_p (read_pc ()))
c906108c
SS
961 {
962 oneproc = 1;
963 thread_step_needed = 1;
964 }
965
966#endif /* PREPARE_TO_PROCEED */
967
968#ifdef HP_OS_BUG
969 if (trap_expected_after_continue)
970 {
971 /* If (step == 0), a trap will be automatically generated after
c5aa993b
JM
972 the first instruction is executed. Force step one
973 instruction to clear this condition. This should not occur
974 if step is nonzero, but it is harmless in that case. */
c906108c
SS
975 oneproc = 1;
976 trap_expected_after_continue = 0;
977 }
978#endif /* HP_OS_BUG */
979
980 if (oneproc)
981 /* We will get a trace trap after one instruction.
982 Continue it automatically and insert breakpoints then. */
983 trap_expected = 1;
984 else
985 {
986 int temp = insert_breakpoints ();
987 if (temp)
988 {
989 print_sys_errmsg ("ptrace", temp);
990 error ("Cannot insert breakpoints.\n\
991The same program may be running in another process.");
992 }
993
994 breakpoints_inserted = 1;
995 }
996
997 if (siggnal != TARGET_SIGNAL_DEFAULT)
998 stop_signal = siggnal;
999 /* If this signal should not be seen by program,
1000 give it zero. Used for debugging signals. */
1001 else if (!signal_program[stop_signal])
1002 stop_signal = TARGET_SIGNAL_0;
1003
1004 annotate_starting ();
1005
1006 /* Make sure that output from GDB appears before output from the
1007 inferior. */
1008 gdb_flush (gdb_stdout);
1009
1010 /* Resume inferior. */
1011 resume (oneproc || step || bpstat_should_step (), stop_signal);
1012
1013 /* Wait for it to stop (if not standalone)
1014 and in any case decode why it stopped, and act accordingly. */
43ff13b4
JM
1015 /* Do this only if we are not using the event loop, or if the target
1016 does not support asynchronous execution. */
1017 if (!async_p || !target_has_async)
1018 {
1019 wait_for_inferior ();
1020 normal_stop ();
1021 }
c906108c
SS
1022}
1023
1024/* Record the pc and sp of the program the last time it stopped.
1025 These are just used internally by wait_for_inferior, but need
1026 to be preserved over calls to it and cleared when the inferior
1027 is started. */
1028static CORE_ADDR prev_pc;
1029static CORE_ADDR prev_func_start;
1030static char *prev_func_name;
1031\f
1032
1033/* Start remote-debugging of a machine over a serial link. */
c906108c
SS
1034void
1035start_remote ()
1036{
1037 init_thread_list ();
1038 init_wait_for_inferior ();
1039 stop_soon_quietly = 1;
1040 trap_expected = 0;
43ff13b4
JM
1041
1042 /* Go on waiting only in case gdb is not started in async mode, or
1043 in case the target doesn't support async execution. */
1044 if (!async_p || !target_has_async)
1045 {
1046 wait_for_inferior ();
1047 normal_stop ();
1048 }
1049 else
1050 {
1051 /* The 'tar rem' command should always look synchronous,
c5aa993b
JM
1052 i.e. display the prompt only once it has connected and
1053 started the target. */
43ff13b4
JM
1054 sync_execution = 1;
1055 push_prompt ("", "", "");
1056 delete_file_handler (input_fd);
1057 target_executing = 1;
1058 }
c906108c
SS
1059}
1060
1061/* Initialize static vars when a new inferior begins. */
1062
1063void
1064init_wait_for_inferior ()
1065{
1066 /* These are meaningless until the first time through wait_for_inferior. */
1067 prev_pc = 0;
1068 prev_func_start = 0;
1069 prev_func_name = NULL;
1070
1071#ifdef HP_OS_BUG
1072 trap_expected_after_continue = 0;
1073#endif
1074 breakpoints_inserted = 0;
1075 breakpoint_init_inferior (inf_starting);
1076
1077 /* Don't confuse first call to proceed(). */
1078 stop_signal = TARGET_SIGNAL_0;
1079
1080 /* The first resume is not following a fork/vfork/exec. */
1081 pending_follow.kind = TARGET_WAITKIND_SPURIOUS; /* I.e., none. */
1082 pending_follow.fork_event.saw_parent_fork = 0;
1083 pending_follow.fork_event.saw_child_fork = 0;
1084 pending_follow.fork_event.saw_child_exec = 0;
1085
1086 /* See wait_for_inferior's handling of SYSCALL_ENTRY/RETURN events. */
1087 number_of_threads_in_syscalls = 0;
1088
1089 clear_proceed_status ();
1090}
1091
1092static void
1093delete_breakpoint_current_contents (arg)
1094 PTR arg;
1095{
1096 struct breakpoint **breakpointp = (struct breakpoint **) arg;
1097 if (*breakpointp != NULL)
1098 {
1099 delete_breakpoint (*breakpointp);
1100 *breakpointp = NULL;
1101 }
1102}
1103\f
b83266a0
SS
1104/* This enum encodes possible reasons for doing a target_wait, so that
1105 wfi can call target_wait in one place. (Ultimately the call will be
1106 moved out of the infinite loop entirely.) */
1107
c5aa993b
JM
1108enum infwait_states
1109{
cd0fc7c3
SS
1110 infwait_normal_state,
1111 infwait_thread_hop_state,
1112 infwait_nullified_state,
1113 infwait_nonstep_watch_state
b83266a0
SS
1114};
1115
cd0fc7c3
SS
1116/* This structure contains what used to be local variables in
1117 wait_for_inferior. Probably many of them can return to being
1118 locals in handle_inferior_event. */
1119
c5aa993b
JM
1120struct execution_control_state
1121 {
1122 struct target_waitstatus ws;
1123 struct target_waitstatus *wp;
1124 int another_trap;
1125 int random_signal;
1126 CORE_ADDR stop_func_start;
1127 CORE_ADDR stop_func_end;
1128 char *stop_func_name;
1129 struct symtab_and_line sal;
1130 int remove_breakpoints_on_following_step;
1131 int current_line;
1132 struct symtab *current_symtab;
1133 int handling_longjmp; /* FIXME */
1134 int pid;
1135 int saved_inferior_pid;
1136 int update_step_sp;
1137 int stepping_through_solib_after_catch;
1138 bpstat stepping_through_solib_catchpoints;
1139 int enable_hw_watchpoints_after_wait;
1140 int stepping_through_sigtramp;
1141 int new_thread_event;
1142 struct target_waitstatus tmpstatus;
1143 enum infwait_states infwait_state;
1144 int waiton_pid;
1145 int wait_some_more;
1146 };
1147
1148void init_execution_control_state PARAMS ((struct execution_control_state * ecs));
1149
1150void handle_inferior_event PARAMS ((struct execution_control_state * ecs));
cd0fc7c3
SS
1151
1152/* Wait for control to return from inferior to debugger.
1153 If inferior gets a signal, we may decide to start it up again
1154 instead of returning. That is why there is a loop in this function.
1155 When this function actually returns it means the inferior
1156 should be left stopped and GDB should read more commands. */
1157
1158void
1159wait_for_inferior ()
1160{
1161 struct cleanup *old_cleanups;
1162 struct execution_control_state ecss;
1163 struct execution_control_state *ecs;
c906108c
SS
1164
1165 old_cleanups = make_cleanup (delete_breakpoint_current_contents,
1166 &step_resume_breakpoint);
1167 make_cleanup (delete_breakpoint_current_contents,
1168 &through_sigtramp_breakpoint);
cd0fc7c3
SS
1169
1170 /* wfi still stays in a loop, so it's OK just to take the address of
1171 a local to get the ecs pointer. */
1172 ecs = &ecss;
1173
1174 /* Fill in with reasonable starting values. */
1175 init_execution_control_state (ecs);
1176
c906108c
SS
1177 thread_step_needed = 0;
1178
c906108c 1179 /* We'll update this if & when we switch to a new thread. */
7a292a7a
SS
1180 if (may_switch_from_inferior_pid)
1181 switched_from_inferior_pid = inferior_pid;
c906108c 1182
cd0fc7c3
SS
1183 overlay_cache_invalid = 1;
1184
1185 /* We have to invalidate the registers BEFORE calling target_wait
1186 because they can be loaded from the target while in target_wait.
1187 This makes remote debugging a bit more efficient for those
1188 targets that provide critical registers as part of their normal
1189 status mechanism. */
1190
1191 registers_changed ();
b83266a0 1192
c906108c
SS
1193 while (1)
1194 {
cd0fc7c3
SS
1195 if (target_wait_hook)
1196 ecs->pid = target_wait_hook (ecs->waiton_pid, ecs->wp);
1197 else
1198 ecs->pid = target_wait (ecs->waiton_pid, ecs->wp);
c906108c 1199
cd0fc7c3
SS
1200 /* Now figure out what to do with the result of the result. */
1201 handle_inferior_event (ecs);
c906108c 1202
cd0fc7c3
SS
1203 if (!ecs->wait_some_more)
1204 break;
1205 }
1206 do_cleanups (old_cleanups);
1207}
c906108c 1208
43ff13b4
JM
1209/* Asynchronous version of wait_for_inferior. It is called by the
1210 event loop whenever a change of state is detected on the file
1211 descriptor corresponding to the target. It can be called more than
1212 once to complete a single execution command. In such cases we need
1213 to keep the state in a global variable ASYNC_ECSS. If it is the
1214 last time that this function is called for a single execution
1215 command, then report to the user that the inferior has stopped, and
1216 do the necessary cleanups. */
1217
1218struct execution_control_state async_ecss;
1219struct execution_control_state *async_ecs;
1220
1221void
1222fetch_inferior_event ()
1223{
1224 static struct cleanup *old_cleanups;
1225
c5aa993b 1226 async_ecs = &async_ecss;
43ff13b4
JM
1227
1228 if (!async_ecs->wait_some_more)
1229 {
1230 old_cleanups = make_exec_cleanup (delete_breakpoint_current_contents,
c5aa993b 1231 &step_resume_breakpoint);
43ff13b4 1232 make_exec_cleanup (delete_breakpoint_current_contents,
c5aa993b 1233 &through_sigtramp_breakpoint);
43ff13b4
JM
1234
1235 /* Fill in with reasonable starting values. */
1236 init_execution_control_state (async_ecs);
1237
1238 thread_step_needed = 0;
1239
1240 /* We'll update this if & when we switch to a new thread. */
1241 if (may_switch_from_inferior_pid)
1242 switched_from_inferior_pid = inferior_pid;
1243
1244 overlay_cache_invalid = 1;
1245
1246 /* We have to invalidate the registers BEFORE calling target_wait
c5aa993b
JM
1247 because they can be loaded from the target while in target_wait.
1248 This makes remote debugging a bit more efficient for those
1249 targets that provide critical registers as part of their normal
1250 status mechanism. */
43ff13b4
JM
1251
1252 registers_changed ();
1253 }
1254
1255 if (target_wait_hook)
1256 async_ecs->pid = target_wait_hook (async_ecs->waiton_pid, async_ecs->wp);
1257 else
1258 async_ecs->pid = target_wait (async_ecs->waiton_pid, async_ecs->wp);
1259
1260 /* Now figure out what to do with the result of the result. */
1261 handle_inferior_event (async_ecs);
1262
1263 if (!async_ecs->wait_some_more)
1264 {
adf40b2e
JM
1265 /* Do only the cleanups that have been added by this
1266 function. Let the continuations for the commands do the rest,
1267 if there are any. */
43ff13b4
JM
1268 do_exec_cleanups (old_cleanups);
1269 normal_stop ();
1270 /* Is there anything left to do for the command issued to
1271 complete? */
1272 do_all_continuations ();
1273 /* Reset things after target has stopped for the async commands. */
1274 complete_execution ();
1275 }
1276}
1277
cd0fc7c3
SS
1278/* Prepare an execution control state for looping through a
1279 wait_for_inferior-type loop. */
1280
1281void
1282init_execution_control_state (ecs)
1283 struct execution_control_state *ecs;
1284{
1285 ecs->random_signal = 0;
1286 ecs->remove_breakpoints_on_following_step = 0;
1287 ecs->handling_longjmp = 0; /* FIXME */
1288 ecs->update_step_sp = 0;
1289 ecs->stepping_through_solib_after_catch = 0;
1290 ecs->stepping_through_solib_catchpoints = NULL;
1291 ecs->enable_hw_watchpoints_after_wait = 0;
1292 ecs->stepping_through_sigtramp = 0;
1293 ecs->sal = find_pc_line (prev_pc, 0);
1294 ecs->current_line = ecs->sal.line;
1295 ecs->current_symtab = ecs->sal.symtab;
1296 ecs->infwait_state = infwait_normal_state;
1297 ecs->waiton_pid = -1;
1298 ecs->wp = &(ecs->ws);
1299}
1300
1301/* Given an execution control state that has been freshly filled in
1302 by an event from the inferior, figure out what it means and take
1303 appropriate action. */
c906108c 1304
cd0fc7c3
SS
1305void
1306handle_inferior_event (ecs)
1307 struct execution_control_state *ecs;
1308{
1309 CORE_ADDR tmp;
1310 int stepped_after_stopped_by_watchpoint;
1311
1312 /* Keep this extra brace for now, minimizes diffs. */
1313 {
c5aa993b
JM
1314 switch (ecs->infwait_state)
1315 {
1316 case infwait_normal_state:
1317 /* Since we've done a wait, we have a new event. Don't
1318 carry over any expectations about needing to step over a
1319 breakpoint. */
1320 thread_step_needed = 0;
1321
1322 /* See comments where a TARGET_WAITKIND_SYSCALL_RETURN event
1323 is serviced in this loop, below. */
1324 if (ecs->enable_hw_watchpoints_after_wait)
1325 {
1326 TARGET_ENABLE_HW_WATCHPOINTS (inferior_pid);
1327 ecs->enable_hw_watchpoints_after_wait = 0;
1328 }
1329 stepped_after_stopped_by_watchpoint = 0;
1330 break;
b83266a0 1331
c5aa993b
JM
1332 case infwait_thread_hop_state:
1333 insert_breakpoints ();
c906108c 1334
c5aa993b
JM
1335 /* We need to restart all the threads now,
1336 * unles we're running in scheduler-locked mode.
1337 * FIXME: shouldn't we look at currently_stepping ()?
1338 */
1339 if (scheduler_mode == schedlock_on)
1340 target_resume (ecs->pid, 0, TARGET_SIGNAL_0);
1341 else
1342 target_resume (-1, 0, TARGET_SIGNAL_0);
1343 ecs->infwait_state = infwait_normal_state;
1344 goto wfi_continue;
c906108c 1345
c5aa993b
JM
1346 case infwait_nullified_state:
1347 break;
b83266a0 1348
c5aa993b
JM
1349 case infwait_nonstep_watch_state:
1350 insert_breakpoints ();
b83266a0 1351
c5aa993b
JM
1352 /* FIXME-maybe: is this cleaner than setting a flag? Does it
1353 handle things like signals arriving and other things happening
1354 in combination correctly? */
1355 stepped_after_stopped_by_watchpoint = 1;
1356 break;
1357 }
1358 ecs->infwait_state = infwait_normal_state;
c906108c 1359
c5aa993b 1360 flush_cached_frames ();
c906108c 1361
c5aa993b 1362 /* If it's a new process, add it to the thread database */
c906108c 1363
c5aa993b 1364 ecs->new_thread_event = ((ecs->pid != inferior_pid) && !in_thread_list (ecs->pid));
c906108c 1365
c5aa993b
JM
1366 if (ecs->ws.kind != TARGET_WAITKIND_EXITED
1367 && ecs->ws.kind != TARGET_WAITKIND_SIGNALLED
1368 && ecs->new_thread_event)
1369 {
1370 add_thread (ecs->pid);
c906108c 1371
c5aa993b 1372 printf_filtered ("[New %s]\n", target_pid_or_tid_to_str (ecs->pid));
c906108c
SS
1373
1374#if 0
c5aa993b
JM
1375 /* NOTE: This block is ONLY meant to be invoked in case of a
1376 "thread creation event"! If it is invoked for any other
1377 sort of event (such as a new thread landing on a breakpoint),
1378 the event will be discarded, which is almost certainly
1379 a bad thing!
1380
1381 To avoid this, the low-level module (eg. target_wait)
1382 should call in_thread_list and add_thread, so that the
1383 new thread is known by the time we get here. */
1384
1385 /* We may want to consider not doing a resume here in order
1386 to give the user a chance to play with the new thread.
1387 It might be good to make that a user-settable option. */
1388
1389 /* At this point, all threads are stopped (happens
1390 automatically in either the OS or the native code).
1391 Therefore we need to continue all threads in order to
1392 make progress. */
1393
1394 target_resume (-1, 0, TARGET_SIGNAL_0);
1395 goto wfi_continue;
c906108c 1396#endif
c5aa993b 1397 }
c906108c 1398
c5aa993b
JM
1399 switch (ecs->ws.kind)
1400 {
1401 case TARGET_WAITKIND_LOADED:
1402 /* Ignore gracefully during startup of the inferior, as it
1403 might be the shell which has just loaded some objects,
1404 otherwise add the symbols for the newly loaded objects. */
c906108c 1405#ifdef SOLIB_ADD
c5aa993b
JM
1406 if (!stop_soon_quietly)
1407 {
1408 /* Remove breakpoints, SOLIB_ADD might adjust
1409 breakpoint addresses via breakpoint_re_set. */
1410 if (breakpoints_inserted)
1411 remove_breakpoints ();
c906108c 1412
c5aa993b
JM
1413 /* Check for any newly added shared libraries if we're
1414 supposed to be adding them automatically. */
1415 if (auto_solib_add)
1416 {
1417 /* Switch terminal for any messages produced by
1418 breakpoint_re_set. */
1419 target_terminal_ours_for_output ();
1420 SOLIB_ADD (NULL, 0, NULL);
1421 target_terminal_inferior ();
1422 }
c906108c 1423
c5aa993b
JM
1424 /* Reinsert breakpoints and continue. */
1425 if (breakpoints_inserted)
1426 insert_breakpoints ();
1427 }
c906108c 1428#endif
c5aa993b
JM
1429 resume (0, TARGET_SIGNAL_0);
1430 goto wfi_continue;
1431
1432 case TARGET_WAITKIND_SPURIOUS:
1433 resume (0, TARGET_SIGNAL_0);
1434 goto wfi_continue;
1435
1436 case TARGET_WAITKIND_EXITED:
1437 target_terminal_ours (); /* Must do this before mourn anyway */
1438 annotate_exited (ecs->ws.value.integer);
1439 if (ecs->ws.value.integer)
1440 printf_filtered ("\nProgram exited with code 0%o.\n",
1441 (unsigned int) ecs->ws.value.integer);
1442 else
1443 printf_filtered ("\nProgram exited normally.\n");
1444
1445 /* Record the exit code in the convenience variable $_exitcode, so
1446 that the user can inspect this again later. */
1447 set_internalvar (lookup_internalvar ("_exitcode"),
1448 value_from_longest (builtin_type_int,
1449 (LONGEST) ecs->ws.value.integer));
1450 gdb_flush (gdb_stdout);
1451 target_mourn_inferior ();
1452 singlestep_breakpoints_inserted_p = 0; /*SOFTWARE_SINGLE_STEP_P */
1453 stop_print_frame = 0;
1454 goto stop_stepping;
1455
1456 case TARGET_WAITKIND_SIGNALLED:
1457 stop_print_frame = 0;
1458 stop_signal = ecs->ws.value.sig;
1459 target_terminal_ours (); /* Must do this before mourn anyway */
1460 annotate_signalled ();
1461
1462 /* This looks pretty bogus to me. Doesn't TARGET_WAITKIND_SIGNALLED
1463 mean it is already dead? This has been here since GDB 2.8, so
1464 perhaps it means rms didn't understand unix waitstatuses?
1465 For the moment I'm just kludging around this in remote.c
1466 rather than trying to change it here --kingdon, 5 Dec 1994. */
1467 target_kill (); /* kill mourns as well */
1468
1469 printf_filtered ("\nProgram terminated with signal ");
1470 annotate_signal_name ();
1471 printf_filtered ("%s", target_signal_to_name (stop_signal));
1472 annotate_signal_name_end ();
1473 printf_filtered (", ");
1474 annotate_signal_string ();
1475 printf_filtered ("%s", target_signal_to_string (stop_signal));
1476 annotate_signal_string_end ();
1477 printf_filtered (".\n");
1478
1479 printf_filtered ("The program no longer exists.\n");
1480 gdb_flush (gdb_stdout);
1481 singlestep_breakpoints_inserted_p = 0; /*SOFTWARE_SINGLE_STEP_P */
1482 goto stop_stepping;
1483
1484 /* The following are the only cases in which we keep going;
1485 the above cases end in a continue or goto. */
1486 case TARGET_WAITKIND_FORKED:
1487 stop_signal = TARGET_SIGNAL_TRAP;
1488 pending_follow.kind = ecs->ws.kind;
1489
1490 /* Ignore fork events reported for the parent; we're only
1491 interested in reacting to forks of the child. Note that
1492 we expect the child's fork event to be available if we
1493 waited for it now. */
1494 if (inferior_pid == ecs->pid)
1495 {
1496 pending_follow.fork_event.saw_parent_fork = 1;
1497 pending_follow.fork_event.parent_pid = ecs->pid;
1498 pending_follow.fork_event.child_pid = ecs->ws.value.related_pid;
1499 goto wfi_continue;
1500 }
1501 else
1502 {
1503 pending_follow.fork_event.saw_child_fork = 1;
1504 pending_follow.fork_event.child_pid = ecs->pid;
1505 pending_follow.fork_event.parent_pid = ecs->ws.value.related_pid;
1506 }
c906108c 1507
c5aa993b
JM
1508 stop_pc = read_pc_pid (ecs->pid);
1509 ecs->saved_inferior_pid = inferior_pid;
1510 inferior_pid = ecs->pid;
1511 stop_bpstat = bpstat_stop_status
1512 (&stop_pc,
1513 (DECR_PC_AFTER_BREAK ?
1514 (prev_pc != stop_pc - DECR_PC_AFTER_BREAK
1515 && currently_stepping (ecs))
1516 : 0)
1517 );
1518 ecs->random_signal = !bpstat_explains_signal (stop_bpstat);
1519 inferior_pid = ecs->saved_inferior_pid;
1520 goto process_event_stop_test;
1521
1522 /* If this a platform which doesn't allow a debugger to touch a
1523 vfork'd inferior until after it exec's, then we'd best keep
1524 our fingers entirely off the inferior, other than continuing
1525 it. This has the unfortunate side-effect that catchpoints
1526 of vforks will be ignored. But since the platform doesn't
1527 allow the inferior be touched at vfork time, there's really
1528 little choice. */
1529 case TARGET_WAITKIND_VFORKED:
1530 stop_signal = TARGET_SIGNAL_TRAP;
1531 pending_follow.kind = ecs->ws.kind;
1532
1533 /* Is this a vfork of the parent? If so, then give any
1534 vfork catchpoints a chance to trigger now. (It's
1535 dangerous to do so if the child canot be touched until
1536 it execs, and the child has not yet exec'd. We probably
1537 should warn the user to that effect when the catchpoint
1538 triggers...) */
1539 if (ecs->pid == inferior_pid)
1540 {
1541 pending_follow.fork_event.saw_parent_fork = 1;
1542 pending_follow.fork_event.parent_pid = ecs->pid;
1543 pending_follow.fork_event.child_pid = ecs->ws.value.related_pid;
1544 }
c906108c 1545
c5aa993b
JM
1546 /* If we've seen the child's vfork event but cannot really touch
1547 the child until it execs, then we must continue the child now.
1548 Else, give any vfork catchpoints a chance to trigger now. */
1549 else
1550 {
1551 pending_follow.fork_event.saw_child_fork = 1;
1552 pending_follow.fork_event.child_pid = ecs->pid;
1553 pending_follow.fork_event.parent_pid = ecs->ws.value.related_pid;
1554 target_post_startup_inferior (pending_follow.fork_event.child_pid);
1555 follow_vfork_when_exec = !target_can_follow_vfork_prior_to_exec ();
1556 if (follow_vfork_when_exec)
1557 {
1558 target_resume (ecs->pid, 0, TARGET_SIGNAL_0);
1559 goto wfi_continue;
1560 }
1561 }
c906108c 1562
c5aa993b
JM
1563 stop_pc = read_pc ();
1564 stop_bpstat = bpstat_stop_status
1565 (&stop_pc,
1566 (DECR_PC_AFTER_BREAK ?
1567 (prev_pc != stop_pc - DECR_PC_AFTER_BREAK
1568 && currently_stepping (ecs))
1569 : 0)
1570 );
1571 ecs->random_signal = !bpstat_explains_signal (stop_bpstat);
1572 goto process_event_stop_test;
1573
1574 case TARGET_WAITKIND_EXECD:
1575 stop_signal = TARGET_SIGNAL_TRAP;
1576
1577 /* Is this a target which reports multiple exec events per actual
1578 call to exec()? (HP-UX using ptrace does, for example.) If so,
1579 ignore all but the last one. Just resume the exec'r, and wait
1580 for the next exec event. */
1581 if (inferior_ignoring_leading_exec_events)
1582 {
1583 inferior_ignoring_leading_exec_events--;
1584 if (pending_follow.kind == TARGET_WAITKIND_VFORKED)
1585 ENSURE_VFORKING_PARENT_REMAINS_STOPPED (pending_follow.fork_event.parent_pid);
1586 target_resume (ecs->pid, 0, TARGET_SIGNAL_0);
1587 goto wfi_continue;
1588 }
1589 inferior_ignoring_leading_exec_events =
1590 target_reported_exec_events_per_exec_call () - 1;
c906108c 1591
c5aa993b
JM
1592 pending_follow.execd_pathname = savestring (ecs->ws.value.execd_pathname,
1593 strlen (ecs->ws.value.execd_pathname));
c906108c 1594
c5aa993b
JM
1595 /* Did inferior_pid exec, or did a (possibly not-yet-followed)
1596 child of a vfork exec?
c906108c 1597
c5aa993b
JM
1598 ??rehrauer: This is unabashedly an HP-UX specific thing. On
1599 HP-UX, events associated with a vforking inferior come in
1600 threes: a vfork event for the child (always first), followed
1601 a vfork event for the parent and an exec event for the child.
1602 The latter two can come in either order.
c906108c 1603
c5aa993b
JM
1604 If we get the parent vfork event first, life's good: We follow
1605 either the parent or child, and then the child's exec event is
1606 a "don't care".
c906108c 1607
c5aa993b
JM
1608 But if we get the child's exec event first, then we delay
1609 responding to it until we handle the parent's vfork. Because,
1610 otherwise we can't satisfy a "catch vfork". */
1611 if (pending_follow.kind == TARGET_WAITKIND_VFORKED)
1612 {
1613 pending_follow.fork_event.saw_child_exec = 1;
1614
1615 /* On some targets, the child must be resumed before
1616 the parent vfork event is delivered. A single-step
1617 suffices. */
1618 if (RESUME_EXECD_VFORKING_CHILD_TO_GET_PARENT_VFORK ())
1619 target_resume (ecs->pid, 1, TARGET_SIGNAL_0);
1620 /* We expect the parent vfork event to be available now. */
1621 goto wfi_continue;
1622 }
c906108c 1623
c5aa993b
JM
1624 /* This causes the eventpoints and symbol table to be reset. Must
1625 do this now, before trying to determine whether to stop. */
1626 follow_exec (inferior_pid, pending_follow.execd_pathname);
1627 free (pending_follow.execd_pathname);
1628
1629 stop_pc = read_pc_pid (ecs->pid);
1630 ecs->saved_inferior_pid = inferior_pid;
1631 inferior_pid = ecs->pid;
1632 stop_bpstat = bpstat_stop_status
1633 (&stop_pc,
1634 (DECR_PC_AFTER_BREAK ?
1635 (prev_pc != stop_pc - DECR_PC_AFTER_BREAK
1636 && currently_stepping (ecs))
1637 : 0)
1638 );
1639 ecs->random_signal = !bpstat_explains_signal (stop_bpstat);
1640 inferior_pid = ecs->saved_inferior_pid;
1641 goto process_event_stop_test;
1642
1643 /* These syscall events are returned on HP-UX, as part of its
1644 implementation of page-protection-based "hardware" watchpoints.
1645 HP-UX has unfortunate interactions between page-protections and
1646 some system calls. Our solution is to disable hardware watches
1647 when a system call is entered, and reenable them when the syscall
1648 completes. The downside of this is that we may miss the precise
1649 point at which a watched piece of memory is modified. "Oh well."
1650
1651 Note that we may have multiple threads running, which may each
1652 enter syscalls at roughly the same time. Since we don't have a
1653 good notion currently of whether a watched piece of memory is
1654 thread-private, we'd best not have any page-protections active
1655 when any thread is in a syscall. Thus, we only want to reenable
1656 hardware watches when no threads are in a syscall.
1657
1658 Also, be careful not to try to gather much state about a thread
1659 that's in a syscall. It's frequently a losing proposition. */
1660 case TARGET_WAITKIND_SYSCALL_ENTRY:
1661 number_of_threads_in_syscalls++;
1662 if (number_of_threads_in_syscalls == 1)
1663 {
1664 TARGET_DISABLE_HW_WATCHPOINTS (inferior_pid);
1665 }
1666 resume (0, TARGET_SIGNAL_0);
1667 goto wfi_continue;
c906108c 1668
c5aa993b 1669 /* Before examining the threads further, step this thread to
c906108c
SS
1670 get it entirely out of the syscall. (We get notice of the
1671 event when the thread is just on the verge of exiting a
1672 syscall. Stepping one instruction seems to get it back
1673 into user code.)
1674
1675 Note that although the logical place to reenable h/w watches
1676 is here, we cannot. We cannot reenable them before stepping
1677 the thread (this causes the next wait on the thread to hang).
1678
1679 Nor can we enable them after stepping until we've done a wait.
cd0fc7c3 1680 Thus, we simply set the flag ecs->enable_hw_watchpoints_after_wait
c906108c
SS
1681 here, which will be serviced immediately after the target
1682 is waited on. */
c5aa993b
JM
1683 case TARGET_WAITKIND_SYSCALL_RETURN:
1684 target_resume (ecs->pid, 1, TARGET_SIGNAL_0);
c906108c 1685
c5aa993b
JM
1686 if (number_of_threads_in_syscalls > 0)
1687 {
1688 number_of_threads_in_syscalls--;
1689 ecs->enable_hw_watchpoints_after_wait =
1690 (number_of_threads_in_syscalls == 0);
1691 }
1692 goto wfi_continue;
c906108c 1693
c5aa993b
JM
1694 case TARGET_WAITKIND_STOPPED:
1695 stop_signal = ecs->ws.value.sig;
1696 break;
1697 }
c906108c 1698
c5aa993b
JM
1699 /* We may want to consider not doing a resume here in order to give
1700 the user a chance to play with the new thread. It might be good
1701 to make that a user-settable option. */
c906108c 1702
c5aa993b
JM
1703 /* At this point, all threads are stopped (happens automatically in
1704 either the OS or the native code). Therefore we need to continue
1705 all threads in order to make progress. */
1706 if (ecs->new_thread_event)
1707 {
1708 target_resume (-1, 0, TARGET_SIGNAL_0);
1709 goto wfi_continue;
1710 }
c906108c 1711
c5aa993b 1712 stop_pc = read_pc_pid (ecs->pid);
c906108c 1713
c5aa993b
JM
1714 /* See if a thread hit a thread-specific breakpoint that was meant for
1715 another thread. If so, then step that thread past the breakpoint,
1716 and continue it. */
c906108c 1717
c5aa993b
JM
1718 if (stop_signal == TARGET_SIGNAL_TRAP)
1719 {
1720 if (SOFTWARE_SINGLE_STEP_P && singlestep_breakpoints_inserted_p)
1721 ecs->random_signal = 0;
1722 else if (breakpoints_inserted
1723 && breakpoint_here_p (stop_pc - DECR_PC_AFTER_BREAK))
1724 {
cd0fc7c3 1725 ecs->random_signal = 0;
c5aa993b
JM
1726 if (!breakpoint_thread_match (stop_pc - DECR_PC_AFTER_BREAK,
1727 ecs->pid))
1728 {
1729 int remove_status;
1730
1731 /* Saw a breakpoint, but it was hit by the wrong thread.
1732 Just continue. */
1733 write_pc_pid (stop_pc - DECR_PC_AFTER_BREAK, ecs->pid);
1734
1735 remove_status = remove_breakpoints ();
1736 /* Did we fail to remove breakpoints? If so, try
1737 to set the PC past the bp. (There's at least
1738 one situation in which we can fail to remove
1739 the bp's: On HP-UX's that use ttrace, we can't
1740 change the address space of a vforking child
1741 process until the child exits (well, okay, not
1742 then either :-) or execs. */
1743 if (remove_status != 0)
1744 {
1745 write_pc_pid (stop_pc - DECR_PC_AFTER_BREAK + 4, ecs->pid);
1746 }
1747 else
1748 { /* Single step */
1749 target_resume (ecs->pid, 1, TARGET_SIGNAL_0);
1750 /* FIXME: What if a signal arrives instead of the
1751 single-step happening? */
1752
1753 ecs->waiton_pid = ecs->pid;
1754 ecs->wp = &(ecs->ws);
1755 ecs->infwait_state = infwait_thread_hop_state;
cd0fc7c3 1756 goto wfi_continue;
c5aa993b 1757 }
c906108c 1758
c5aa993b
JM
1759 /* We need to restart all the threads now,
1760 * unles we're running in scheduler-locked mode.
1761 * FIXME: shouldn't we look at currently_stepping ()?
1762 */
1763 if (scheduler_mode == schedlock_on)
1764 target_resume (ecs->pid, 0, TARGET_SIGNAL_0);
1765 else
1766 target_resume (-1, 0, TARGET_SIGNAL_0);
1767 goto wfi_continue;
1768 }
1769 else
1770 {
1771 /* This breakpoint matches--either it is the right
1772 thread or it's a generic breakpoint for all threads.
1773 Remember that we'll need to step just _this_ thread
1774 on any following user continuation! */
1775 thread_step_needed = 1;
1776 }
1777 }
1778 }
1779 else
1780 ecs->random_signal = 1;
1781
1782 /* See if something interesting happened to the non-current thread. If
1783 so, then switch to that thread, and eventually give control back to
1784 the user.
1785
1786 Note that if there's any kind of pending follow (i.e., of a fork,
1787 vfork or exec), we don't want to do this now. Rather, we'll let
1788 the next resume handle it. */
1789 if ((ecs->pid != inferior_pid) &&
1790 (pending_follow.kind == TARGET_WAITKIND_SPURIOUS))
1791 {
1792 int printed = 0;
c906108c 1793
c5aa993b
JM
1794 /* If it's a random signal for a non-current thread, notify user
1795 if he's expressed an interest. */
1796 if (ecs->random_signal
1797 && signal_print[stop_signal])
1798 {
c906108c
SS
1799/* ??rehrauer: I don't understand the rationale for this code. If the
1800 inferior will stop as a result of this signal, then the act of handling
1801 the stop ought to print a message that's couches the stoppage in user
1802 terms, e.g., "Stopped for breakpoint/watchpoint". If the inferior
1803 won't stop as a result of the signal -- i.e., if the signal is merely
1804 a side-effect of something GDB's doing "under the covers" for the
1805 user, such as stepping threads over a breakpoint they shouldn't stop
1806 for -- then the message seems to be a serious annoyance at best.
1807
1808 For now, remove the message altogether. */
1809#if 0
c5aa993b
JM
1810 printed = 1;
1811 target_terminal_ours_for_output ();
1812 printf_filtered ("\nProgram received signal %s, %s.\n",
1813 target_signal_to_name (stop_signal),
1814 target_signal_to_string (stop_signal));
1815 gdb_flush (gdb_stdout);
c906108c 1816#endif
c5aa993b 1817 }
c906108c 1818
c5aa993b
JM
1819 /* If it's not SIGTRAP and not a signal we want to stop for, then
1820 continue the thread. */
c906108c 1821
c5aa993b
JM
1822 if (stop_signal != TARGET_SIGNAL_TRAP
1823 && !signal_stop[stop_signal])
1824 {
1825 if (printed)
1826 target_terminal_inferior ();
c906108c 1827
c5aa993b
JM
1828 /* Clear the signal if it should not be passed. */
1829 if (signal_program[stop_signal] == 0)
1830 stop_signal = TARGET_SIGNAL_0;
c906108c 1831
c5aa993b
JM
1832 target_resume (ecs->pid, 0, stop_signal);
1833 goto wfi_continue;
1834 }
c906108c 1835
c5aa993b
JM
1836 /* It's a SIGTRAP or a signal we're interested in. Switch threads,
1837 and fall into the rest of wait_for_inferior(). */
1838
1839 /* Save infrun state for the old thread. */
1840 save_infrun_state (inferior_pid, prev_pc,
1841 prev_func_start, prev_func_name,
1842 trap_expected, step_resume_breakpoint,
1843 through_sigtramp_breakpoint,
1844 step_range_start, step_range_end,
1845 step_frame_address, ecs->handling_longjmp,
1846 ecs->another_trap,
1847 ecs->stepping_through_solib_after_catch,
1848 ecs->stepping_through_solib_catchpoints,
1849 ecs->stepping_through_sigtramp);
1850
1851 if (may_switch_from_inferior_pid)
1852 switched_from_inferior_pid = inferior_pid;
1853
1854 inferior_pid = ecs->pid;
1855
1856 /* Load infrun state for the new thread. */
1857 load_infrun_state (inferior_pid, &prev_pc,
1858 &prev_func_start, &prev_func_name,
1859 &trap_expected, &step_resume_breakpoint,
1860 &through_sigtramp_breakpoint,
1861 &step_range_start, &step_range_end,
1862 &step_frame_address, &ecs->handling_longjmp,
1863 &ecs->another_trap,
1864 &ecs->stepping_through_solib_after_catch,
1865 &ecs->stepping_through_solib_catchpoints,
1866 &ecs->stepping_through_sigtramp);
1867
1868 if (context_hook)
1869 context_hook (pid_to_thread_id (ecs->pid));
1870
1871 printf_filtered ("[Switching to %s]\n", target_pid_to_str (ecs->pid));
1872 flush_cached_frames ();
1873 }
c906108c 1874
c5aa993b
JM
1875 if (SOFTWARE_SINGLE_STEP_P && singlestep_breakpoints_inserted_p)
1876 {
1877 /* Pull the single step breakpoints out of the target. */
1878 SOFTWARE_SINGLE_STEP (0, 0);
1879 singlestep_breakpoints_inserted_p = 0;
1880 }
c906108c 1881
c5aa993b
JM
1882 /* If PC is pointing at a nullified instruction, then step beyond
1883 it so that the user won't be confused when GDB appears to be ready
1884 to execute it. */
c906108c 1885
c5aa993b
JM
1886 /* if (INSTRUCTION_NULLIFIED && currently_stepping (ecs)) */
1887 if (INSTRUCTION_NULLIFIED)
1888 {
1889 registers_changed ();
1890 target_resume (ecs->pid, 1, TARGET_SIGNAL_0);
c906108c 1891
c5aa993b
JM
1892 /* We may have received a signal that we want to pass to
1893 the inferior; therefore, we must not clobber the waitstatus
1894 in WS. */
c906108c 1895
c5aa993b
JM
1896 ecs->infwait_state = infwait_nullified_state;
1897 ecs->waiton_pid = ecs->pid;
1898 ecs->wp = &(ecs->tmpstatus);
1899 goto wfi_continue;
1900 }
c906108c 1901
c5aa993b
JM
1902 /* It may not be necessary to disable the watchpoint to stop over
1903 it. For example, the PA can (with some kernel cooperation)
1904 single step over a watchpoint without disabling the watchpoint. */
1905 if (HAVE_STEPPABLE_WATCHPOINT && STOPPED_BY_WATCHPOINT (ecs->ws))
1906 {
1907 resume (1, 0);
1908 goto wfi_continue;
1909 }
c906108c 1910
c5aa993b
JM
1911 /* It is far more common to need to disable a watchpoint to step
1912 the inferior over it. FIXME. What else might a debug
1913 register or page protection watchpoint scheme need here? */
1914 if (HAVE_NONSTEPPABLE_WATCHPOINT && STOPPED_BY_WATCHPOINT (ecs->ws))
1915 {
1916 /* At this point, we are stopped at an instruction which has
1917 attempted to write to a piece of memory under control of
1918 a watchpoint. The instruction hasn't actually executed
1919 yet. If we were to evaluate the watchpoint expression
1920 now, we would get the old value, and therefore no change
1921 would seem to have occurred.
1922
1923 In order to make watchpoints work `right', we really need
1924 to complete the memory write, and then evaluate the
1925 watchpoint expression. The following code does that by
1926 removing the watchpoint (actually, all watchpoints and
1927 breakpoints), single-stepping the target, re-inserting
1928 watchpoints, and then falling through to let normal
1929 single-step processing handle proceed. Since this
1930 includes evaluating watchpoints, things will come to a
1931 stop in the correct manner. */
1932
1933 write_pc (stop_pc - DECR_PC_AFTER_BREAK);
1934
1935 remove_breakpoints ();
1936 registers_changed ();
1937 target_resume (ecs->pid, 1, TARGET_SIGNAL_0); /* Single step */
1938
1939 ecs->waiton_pid = ecs->pid;
1940 ecs->wp = &(ecs->ws);
1941 ecs->infwait_state = infwait_nonstep_watch_state;
1942 goto wfi_continue;
1943 }
c906108c 1944
c5aa993b
JM
1945 /* It may be possible to simply continue after a watchpoint. */
1946 if (HAVE_CONTINUABLE_WATCHPOINT)
1947 STOPPED_BY_WATCHPOINT (ecs->ws);
1948
1949 ecs->stop_func_start = 0;
1950 ecs->stop_func_end = 0;
1951 ecs->stop_func_name = 0;
1952 /* Don't care about return value; stop_func_start and stop_func_name
1953 will both be 0 if it doesn't work. */
1954 find_pc_partial_function (stop_pc, &ecs->stop_func_name,
1955 &ecs->stop_func_start, &ecs->stop_func_end);
1956 ecs->stop_func_start += FUNCTION_START_OFFSET;
1957 ecs->another_trap = 0;
1958 bpstat_clear (&stop_bpstat);
1959 stop_step = 0;
1960 stop_stack_dummy = 0;
1961 stop_print_frame = 1;
1962 ecs->random_signal = 0;
1963 stopped_by_random_signal = 0;
1964 breakpoints_failed = 0;
1965
1966 /* Look at the cause of the stop, and decide what to do.
1967 The alternatives are:
1968 1) break; to really stop and return to the debugger,
1969 2) drop through to start up again
1970 (set ecs->another_trap to 1 to single step once)
1971 3) set ecs->random_signal to 1, and the decision between 1 and 2
1972 will be made according to the signal handling tables. */
1973
1974 /* First, distinguish signals caused by the debugger from signals
1975 that have to do with the program's own actions.
1976 Note that breakpoint insns may cause SIGTRAP or SIGILL
1977 or SIGEMT, depending on the operating system version.
1978 Here we detect when a SIGILL or SIGEMT is really a breakpoint
1979 and change it to SIGTRAP. */
1980
1981 if (stop_signal == TARGET_SIGNAL_TRAP
1982 || (breakpoints_inserted &&
1983 (stop_signal == TARGET_SIGNAL_ILL
1984 || stop_signal == TARGET_SIGNAL_EMT
1985 ))
1986 || stop_soon_quietly)
1987 {
1988 if (stop_signal == TARGET_SIGNAL_TRAP && stop_after_trap)
1989 {
1990 stop_print_frame = 0;
cd0fc7c3 1991 goto wfi_break;
c5aa993b
JM
1992 }
1993 if (stop_soon_quietly)
1994 goto wfi_break;
c906108c 1995
c5aa993b
JM
1996 /* Don't even think about breakpoints
1997 if just proceeded over a breakpoint.
c906108c 1998
c5aa993b
JM
1999 However, if we are trying to proceed over a breakpoint
2000 and end up in sigtramp, then through_sigtramp_breakpoint
2001 will be set and we should check whether we've hit the
2002 step breakpoint. */
2003 if (stop_signal == TARGET_SIGNAL_TRAP && trap_expected
2004 && through_sigtramp_breakpoint == NULL)
2005 bpstat_clear (&stop_bpstat);
2006 else
2007 {
2008 /* See if there is a breakpoint at the current PC. */
2009 stop_bpstat = bpstat_stop_status
2010 (&stop_pc,
2011 (DECR_PC_AFTER_BREAK ?
2012 /* Notice the case of stepping through a jump
2013 that lands just after a breakpoint.
2014 Don't confuse that with hitting the breakpoint.
2015 What we check for is that 1) stepping is going on
2016 and 2) the pc before the last insn does not match
2017 the address of the breakpoint before the current pc
2018 and 3) we didn't hit a breakpoint in a signal handler
2019 without an intervening stop in sigtramp, which is
2020 detected by a new stack pointer value below
2021 any usual function calling stack adjustments. */
2022 (currently_stepping (ecs)
2023 && prev_pc != stop_pc - DECR_PC_AFTER_BREAK
2024 && !(step_range_end
2025 && INNER_THAN (read_sp (), (step_sp - 16)))) :
2026 0)
2027 );
2028 /* Following in case break condition called a
2029 function. */
2030 stop_print_frame = 1;
2031 }
c906108c 2032
c5aa993b
JM
2033 if (stop_signal == TARGET_SIGNAL_TRAP)
2034 ecs->random_signal
2035 = !(bpstat_explains_signal (stop_bpstat)
2036 || trap_expected
2037 || (!CALL_DUMMY_BREAKPOINT_OFFSET_P
2038 && PC_IN_CALL_DUMMY (stop_pc, read_sp (),
2039 FRAME_FP (get_current_frame ())))
2040 || (step_range_end && step_resume_breakpoint == NULL));
2041
2042 else
2043 {
cd0fc7c3 2044 ecs->random_signal
c906108c 2045 = !(bpstat_explains_signal (stop_bpstat)
c5aa993b
JM
2046 /* End of a stack dummy. Some systems (e.g. Sony
2047 news) give another signal besides SIGTRAP, so
2048 check here as well as above. */
7a292a7a
SS
2049 || (!CALL_DUMMY_BREAKPOINT_OFFSET_P
2050 && PC_IN_CALL_DUMMY (stop_pc, read_sp (),
2051 FRAME_FP (get_current_frame ())))
c5aa993b
JM
2052 );
2053 if (!ecs->random_signal)
2054 stop_signal = TARGET_SIGNAL_TRAP;
2055 }
2056 }
c906108c 2057
c5aa993b
JM
2058 /* When we reach this point, we've pretty much decided
2059 that the reason for stopping must've been a random
2060 (unexpected) signal. */
2061
2062 else
2063 ecs->random_signal = 1;
2064 /* If a fork, vfork or exec event was seen, then there are two
2065 possible responses we can make:
2066
2067 1. If a catchpoint triggers for the event (ecs->random_signal == 0),
2068 then we must stop now and issue a prompt. We will resume
2069 the inferior when the user tells us to.
2070 2. If no catchpoint triggers for the event (ecs->random_signal == 1),
2071 then we must resume the inferior now and keep checking.
2072
2073 In either case, we must take appropriate steps to "follow" the
2074 the fork/vfork/exec when the inferior is resumed. For example,
2075 if follow-fork-mode is "child", then we must detach from the
2076 parent inferior and follow the new child inferior.
2077
2078 In either case, setting pending_follow causes the next resume()
2079 to take the appropriate following action. */
2080 process_event_stop_test:
2081 if (ecs->ws.kind == TARGET_WAITKIND_FORKED)
2082 {
2083 if (ecs->random_signal) /* I.e., no catchpoint triggered for this. */
2084 {
2085 trap_expected = 1;
2086 stop_signal = TARGET_SIGNAL_0;
2087 goto keep_going;
2088 }
2089 }
2090 else if (ecs->ws.kind == TARGET_WAITKIND_VFORKED)
2091 {
2092 if (ecs->random_signal) /* I.e., no catchpoint triggered for this. */
2093 {
2094 stop_signal = TARGET_SIGNAL_0;
2095 goto keep_going;
2096 }
2097 }
2098 else if (ecs->ws.kind == TARGET_WAITKIND_EXECD)
2099 {
2100 pending_follow.kind = ecs->ws.kind;
2101 if (ecs->random_signal) /* I.e., no catchpoint triggered for this. */
2102 {
2103 trap_expected = 1;
2104 stop_signal = TARGET_SIGNAL_0;
2105 goto keep_going;
2106 }
2107 }
c906108c 2108
c5aa993b
JM
2109 /* For the program's own signals, act according to
2110 the signal handling tables. */
c906108c 2111
c5aa993b
JM
2112 if (ecs->random_signal)
2113 {
2114 /* Signal not for debugging purposes. */
2115 int printed = 0;
2116
2117 stopped_by_random_signal = 1;
2118
2119 if (signal_print[stop_signal])
2120 {
2121 printed = 1;
2122 target_terminal_ours_for_output ();
2123 annotate_signal ();
2124 printf_filtered ("\nProgram received signal ");
2125 annotate_signal_name ();
2126 printf_filtered ("%s", target_signal_to_name (stop_signal));
2127 annotate_signal_name_end ();
2128 printf_filtered (", ");
2129 annotate_signal_string ();
2130 printf_filtered ("%s", target_signal_to_string (stop_signal));
2131 annotate_signal_string_end ();
2132 printf_filtered (".\n");
2133 gdb_flush (gdb_stdout);
2134 }
2135 if (signal_stop[stop_signal])
2136 goto wfi_break;
2137 /* If not going to stop, give terminal back
2138 if we took it away. */
2139 else if (printed)
2140 target_terminal_inferior ();
2141
2142 /* Clear the signal if it should not be passed. */
2143 if (signal_program[stop_signal] == 0)
2144 stop_signal = TARGET_SIGNAL_0;
2145
2146 /* If we're in the middle of a "next" command, let the code for
2147 stepping over a function handle this. pai/1997-09-10
2148
2149 A previous comment here suggested it was possible to change
2150 this to jump to keep_going in all cases. */
2151
2152 if (step_over_calls > 0)
2153 goto step_over_function;
2154 else
2155 goto check_sigtramp2;
2156 }
2157
2158 /* Handle cases caused by hitting a breakpoint. */
2159 {
2160 CORE_ADDR jmp_buf_pc;
2161 struct bpstat_what what;
2162
2163 what = bpstat_what (stop_bpstat);
2164
2165 if (what.call_dummy)
c906108c 2166 {
c5aa993b
JM
2167 stop_stack_dummy = 1;
2168#ifdef HP_OS_BUG
2169 trap_expected_after_continue = 1;
2170#endif
c906108c 2171 }
c5aa993b
JM
2172
2173 switch (what.main_action)
c906108c 2174 {
c5aa993b
JM
2175 case BPSTAT_WHAT_SET_LONGJMP_RESUME:
2176 /* If we hit the breakpoint at longjmp, disable it for the
2177 duration of this command. Then, install a temporary
2178 breakpoint at the target of the jmp_buf. */
2179 disable_longjmp_breakpoint ();
2180 remove_breakpoints ();
2181 breakpoints_inserted = 0;
2182 if (!GET_LONGJMP_TARGET (&jmp_buf_pc))
2183 goto keep_going;
2184
2185 /* Need to blow away step-resume breakpoint, as it
2186 interferes with us */
2187 if (step_resume_breakpoint != NULL)
c906108c 2188 {
c5aa993b
JM
2189 delete_breakpoint (step_resume_breakpoint);
2190 step_resume_breakpoint = NULL;
c906108c 2191 }
c5aa993b
JM
2192 /* Not sure whether we need to blow this away too, but probably
2193 it is like the step-resume breakpoint. */
2194 if (through_sigtramp_breakpoint != NULL)
c906108c 2195 {
c5aa993b
JM
2196 delete_breakpoint (through_sigtramp_breakpoint);
2197 through_sigtramp_breakpoint = NULL;
c906108c 2198 }
c906108c 2199
c5aa993b
JM
2200#if 0
2201 /* FIXME - Need to implement nested temporary breakpoints */
2202 if (step_over_calls > 0)
2203 set_longjmp_resume_breakpoint (jmp_buf_pc,
2204 get_current_frame ());
2205 else
2206#endif /* 0 */
2207 set_longjmp_resume_breakpoint (jmp_buf_pc, NULL);
2208 ecs->handling_longjmp = 1; /* FIXME */
2209 goto keep_going;
c906108c 2210
c5aa993b
JM
2211 case BPSTAT_WHAT_CLEAR_LONGJMP_RESUME:
2212 case BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE:
2213 remove_breakpoints ();
2214 breakpoints_inserted = 0;
2215#if 0
2216 /* FIXME - Need to implement nested temporary breakpoints */
2217 if (step_over_calls
2218 && (INNER_THAN (FRAME_FP (get_current_frame ()),
2219 step_frame_address)))
2220 {
2221 ecs->another_trap = 1;
2222 goto keep_going;
2223 }
2224#endif /* 0 */
2225 disable_longjmp_breakpoint ();
2226 ecs->handling_longjmp = 0; /* FIXME */
2227 if (what.main_action == BPSTAT_WHAT_CLEAR_LONGJMP_RESUME)
2228 break;
2229 /* else fallthrough */
c906108c 2230
c5aa993b
JM
2231 case BPSTAT_WHAT_SINGLE:
2232 if (breakpoints_inserted)
c906108c 2233 {
c5aa993b
JM
2234 thread_step_needed = 1;
2235 remove_breakpoints ();
c906108c 2236 }
c5aa993b
JM
2237 breakpoints_inserted = 0;
2238 ecs->another_trap = 1;
2239 /* Still need to check other stuff, at least the case
2240 where we are stepping and step out of the right range. */
2241 break;
c906108c 2242
c5aa993b
JM
2243 case BPSTAT_WHAT_STOP_NOISY:
2244 stop_print_frame = 1;
c906108c 2245
c5aa993b
JM
2246 /* We are about to nuke the step_resume_breakpoint and
2247 through_sigtramp_breakpoint via the cleanup chain, so
2248 no need to worry about it here. */
c906108c 2249
c5aa993b 2250 goto stop_stepping;
c906108c 2251
c5aa993b
JM
2252 case BPSTAT_WHAT_STOP_SILENT:
2253 stop_print_frame = 0;
c906108c 2254
c5aa993b
JM
2255 /* We are about to nuke the step_resume_breakpoint and
2256 through_sigtramp_breakpoint via the cleanup chain, so
2257 no need to worry about it here. */
c906108c 2258
c5aa993b 2259 goto stop_stepping;
c906108c 2260
c5aa993b
JM
2261 case BPSTAT_WHAT_STEP_RESUME:
2262 /* This proably demands a more elegant solution, but, yeah
2263 right...
2264
2265 This function's use of the simple variable
2266 step_resume_breakpoint doesn't seem to accomodate
2267 simultaneously active step-resume bp's, although the
2268 breakpoint list certainly can.
2269
2270 If we reach here and step_resume_breakpoint is already
2271 NULL, then apparently we have multiple active
2272 step-resume bp's. We'll just delete the breakpoint we
2273 stopped at, and carry on. */
2274 if (step_resume_breakpoint == NULL)
2275 {
2276 step_resume_breakpoint =
2277 bpstat_find_step_resume_breakpoint (stop_bpstat);
2278 }
2279 delete_breakpoint (step_resume_breakpoint);
2280 step_resume_breakpoint = NULL;
2281 break;
2282
2283 case BPSTAT_WHAT_THROUGH_SIGTRAMP:
2284 if (through_sigtramp_breakpoint)
2285 delete_breakpoint (through_sigtramp_breakpoint);
2286 through_sigtramp_breakpoint = NULL;
2287
2288 /* If were waiting for a trap, hitting the step_resume_break
2289 doesn't count as getting it. */
2290 if (trap_expected)
2291 ecs->another_trap = 1;
2292 break;
c906108c 2293
c5aa993b
JM
2294 case BPSTAT_WHAT_CHECK_SHLIBS:
2295 case BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK:
2296#ifdef SOLIB_ADD
c906108c 2297 {
c5aa993b
JM
2298 /* Remove breakpoints, we eventually want to step over the
2299 shlib event breakpoint, and SOLIB_ADD might adjust
2300 breakpoint addresses via breakpoint_re_set. */
2301 if (breakpoints_inserted)
2302 remove_breakpoints ();
c906108c 2303 breakpoints_inserted = 0;
c906108c 2304
c5aa993b
JM
2305 /* Check for any newly added shared libraries if we're
2306 supposed to be adding them automatically. */
2307 if (auto_solib_add)
c906108c 2308 {
c5aa993b
JM
2309 /* Switch terminal for any messages produced by
2310 breakpoint_re_set. */
2311 target_terminal_ours_for_output ();
2312 SOLIB_ADD (NULL, 0, NULL);
2313 target_terminal_inferior ();
c906108c 2314 }
c5aa993b
JM
2315
2316 /* Try to reenable shared library breakpoints, additional
2317 code segments in shared libraries might be mapped in now. */
2318 re_enable_breakpoints_in_shlibs ();
2319
2320 /* If requested, stop when the dynamic linker notifies
2321 gdb of events. This allows the user to get control
2322 and place breakpoints in initializer routines for
2323 dynamically loaded objects (among other things). */
2324 if (stop_on_solib_events)
c906108c 2325 {
c5aa993b
JM
2326 stop_print_frame = 0;
2327 goto stop_stepping;
c906108c
SS
2328 }
2329
c5aa993b
JM
2330 /* If we stopped due to an explicit catchpoint, then the
2331 (see above) call to SOLIB_ADD pulled in any symbols
2332 from a newly-loaded library, if appropriate.
2333
2334 We do want the inferior to stop, but not where it is
2335 now, which is in the dynamic linker callback. Rather,
2336 we would like it stop in the user's program, just after
2337 the call that caused this catchpoint to trigger. That
2338 gives the user a more useful vantage from which to
2339 examine their program's state. */
2340 else if (what.main_action == BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK)
2341 {
2342 /* ??rehrauer: If I could figure out how to get the
2343 right return PC from here, we could just set a temp
2344 breakpoint and resume. I'm not sure we can without
2345 cracking open the dld's shared libraries and sniffing
2346 their unwind tables and text/data ranges, and that's
2347 not a terribly portable notion.
2348
2349 Until that time, we must step the inferior out of the
2350 dld callback, and also out of the dld itself (and any
2351 code or stubs in libdld.sl, such as "shl_load" and
2352 friends) until we reach non-dld code. At that point,
2353 we can stop stepping. */
2354 bpstat_get_triggered_catchpoints (stop_bpstat,
2355 &ecs->stepping_through_solib_catchpoints);
2356 ecs->stepping_through_solib_after_catch = 1;
2357
2358 /* Be sure to lift all breakpoints, so the inferior does
2359 actually step past this point... */
2360 ecs->another_trap = 1;
2361 break;
2362 }
2363 else
c906108c 2364 {
c5aa993b 2365 /* We want to step over this breakpoint, then keep going. */
cd0fc7c3 2366 ecs->another_trap = 1;
c5aa993b 2367 break;
c906108c 2368 }
c5aa993b
JM
2369 }
2370#endif
2371 break;
c906108c 2372
c5aa993b
JM
2373 case BPSTAT_WHAT_LAST:
2374 /* Not a real code, but listed here to shut up gcc -Wall. */
c906108c 2375
c5aa993b
JM
2376 case BPSTAT_WHAT_KEEP_CHECKING:
2377 break;
2378 }
2379 }
c906108c 2380
c5aa993b
JM
2381 /* We come here if we hit a breakpoint but should not
2382 stop for it. Possibly we also were stepping
2383 and should stop for that. So fall through and
2384 test for stepping. But, if not stepping,
2385 do not stop. */
c906108c 2386
c5aa993b
JM
2387 /* Are we stepping to get the inferior out of the dynamic
2388 linker's hook (and possibly the dld itself) after catching
2389 a shlib event? */
2390 if (ecs->stepping_through_solib_after_catch)
2391 {
2392#if defined(SOLIB_ADD)
2393 /* Have we reached our destination? If not, keep going. */
2394 if (SOLIB_IN_DYNAMIC_LINKER (ecs->pid, stop_pc))
2395 {
2396 ecs->another_trap = 1;
2397 goto keep_going;
2398 }
2399#endif
2400 /* Else, stop and report the catchpoint(s) whose triggering
2401 caused us to begin stepping. */
2402 ecs->stepping_through_solib_after_catch = 0;
2403 bpstat_clear (&stop_bpstat);
2404 stop_bpstat = bpstat_copy (ecs->stepping_through_solib_catchpoints);
2405 bpstat_clear (&ecs->stepping_through_solib_catchpoints);
2406 stop_print_frame = 1;
2407 goto stop_stepping;
2408 }
c906108c 2409
c5aa993b
JM
2410 if (!CALL_DUMMY_BREAKPOINT_OFFSET_P)
2411 {
2412 /* This is the old way of detecting the end of the stack dummy.
2413 An architecture which defines CALL_DUMMY_BREAKPOINT_OFFSET gets
2414 handled above. As soon as we can test it on all of them, all
2415 architectures should define it. */
2416
2417 /* If this is the breakpoint at the end of a stack dummy,
2418 just stop silently, unless the user was doing an si/ni, in which
2419 case she'd better know what she's doing. */
2420
2421 if (CALL_DUMMY_HAS_COMPLETED (stop_pc, read_sp (),
2422 FRAME_FP (get_current_frame ()))
2423 && !step_range_end)
2424 {
c906108c 2425 stop_print_frame = 0;
c5aa993b
JM
2426 stop_stack_dummy = 1;
2427#ifdef HP_OS_BUG
2428 trap_expected_after_continue = 1;
2429#endif
2430 goto wfi_break;
2431 }
2432 }
c906108c 2433
c5aa993b
JM
2434 if (step_resume_breakpoint)
2435 /* Having a step-resume breakpoint overrides anything
2436 else having to do with stepping commands until
2437 that breakpoint is reached. */
2438 /* I'm not sure whether this needs to be check_sigtramp2 or
2439 whether it could/should be keep_going. */
2440 goto check_sigtramp2;
2441
2442 if (step_range_end == 0)
2443 /* Likewise if we aren't even stepping. */
2444 /* I'm not sure whether this needs to be check_sigtramp2 or
2445 whether it could/should be keep_going. */
2446 goto check_sigtramp2;
2447
2448 /* If stepping through a line, keep going if still within it.
2449
2450 Note that step_range_end is the address of the first instruction
2451 beyond the step range, and NOT the address of the last instruction
2452 within it! */
2453 if (stop_pc >= step_range_start
2454 && stop_pc < step_range_end)
2455 {
2456 /* We might be doing a BPSTAT_WHAT_SINGLE and getting a signal.
2457 So definately need to check for sigtramp here. */
2458 goto check_sigtramp2;
2459 }
c906108c 2460
c5aa993b 2461 /* We stepped out of the stepping range. */
c906108c 2462
c5aa993b
JM
2463 /* If we are stepping at the source level and entered the runtime
2464 loader dynamic symbol resolution code, we keep on single stepping
2465 until we exit the run time loader code and reach the callee's
2466 address. */
2467 if (step_over_calls < 0 && IN_SOLIB_DYNSYM_RESOLVE_CODE (stop_pc))
2468 goto keep_going;
c906108c 2469
c5aa993b
JM
2470 /* We can't update step_sp every time through the loop, because
2471 reading the stack pointer would slow down stepping too much.
2472 But we can update it every time we leave the step range. */
2473 ecs->update_step_sp = 1;
c906108c 2474
c5aa993b
JM
2475 /* Did we just take a signal? */
2476 if (IN_SIGTRAMP (stop_pc, ecs->stop_func_name)
2477 && !IN_SIGTRAMP (prev_pc, prev_func_name)
2478 && INNER_THAN (read_sp (), step_sp))
2479 {
2480 /* We've just taken a signal; go until we are back to
2481 the point where we took it and one more. */
c906108c 2482
c5aa993b
JM
2483 /* Note: The test above succeeds not only when we stepped
2484 into a signal handler, but also when we step past the last
2485 statement of a signal handler and end up in the return stub
2486 of the signal handler trampoline. To distinguish between
2487 these two cases, check that the frame is INNER_THAN the
2488 previous one below. pai/1997-09-11 */
c906108c 2489
c906108c 2490
c5aa993b
JM
2491 {
2492 CORE_ADDR current_frame = FRAME_FP (get_current_frame ());
c906108c 2493
c5aa993b
JM
2494 if (INNER_THAN (current_frame, step_frame_address))
2495 {
2496 /* We have just taken a signal; go until we are back to
2497 the point where we took it and one more. */
c906108c 2498
c5aa993b
JM
2499 /* This code is needed at least in the following case:
2500 The user types "next" and then a signal arrives (before
2501 the "next" is done). */
c906108c 2502
c5aa993b
JM
2503 /* Note that if we are stopped at a breakpoint, then we need
2504 the step_resume breakpoint to override any breakpoints at
2505 the same location, so that we will still step over the
2506 breakpoint even though the signal happened. */
2507 struct symtab_and_line sr_sal;
c906108c 2508
c5aa993b
JM
2509 INIT_SAL (&sr_sal);
2510 sr_sal.symtab = NULL;
2511 sr_sal.line = 0;
2512 sr_sal.pc = prev_pc;
2513 /* We could probably be setting the frame to
2514 step_frame_address; I don't think anyone thought to
2515 try it. */
2516 step_resume_breakpoint =
2517 set_momentary_breakpoint (sr_sal, NULL, bp_step_resume);
2518 if (breakpoints_inserted)
2519 insert_breakpoints ();
c906108c 2520 }
c5aa993b 2521 else
c906108c 2522 {
c5aa993b
JM
2523 /* We just stepped out of a signal handler and into
2524 its calling trampoline.
2525
2526 Normally, we'd jump to step_over_function from
2527 here, but for some reason GDB can't unwind the
2528 stack correctly to find the real PC for the point
2529 user code where the signal trampoline will return
2530 -- FRAME_SAVED_PC fails, at least on HP-UX 10.20.
2531 But signal trampolines are pretty small stubs of
2532 code, anyway, so it's OK instead to just
2533 single-step out. Note: assuming such trampolines
2534 don't exhibit recursion on any platform... */
2535 find_pc_partial_function (stop_pc, &ecs->stop_func_name,
2536 &ecs->stop_func_start,
2537 &ecs->stop_func_end);
2538 /* Readjust stepping range */
2539 step_range_start = ecs->stop_func_start;
2540 step_range_end = ecs->stop_func_end;
2541 ecs->stepping_through_sigtramp = 1;
c906108c 2542 }
c906108c
SS
2543 }
2544
c906108c 2545
c5aa993b
JM
2546 /* If this is stepi or nexti, make sure that the stepping range
2547 gets us past that instruction. */
2548 if (step_range_end == 1)
2549 /* FIXME: Does this run afoul of the code below which, if
2550 we step into the middle of a line, resets the stepping
2551 range? */
2552 step_range_end = (step_range_start = prev_pc) + 1;
c906108c 2553
c5aa993b 2554 ecs->remove_breakpoints_on_following_step = 1;
c906108c 2555 goto keep_going;
c5aa993b 2556 }
c906108c 2557
c5aa993b
JM
2558 if (stop_pc == ecs->stop_func_start /* Quick test */
2559 || (in_prologue (stop_pc, ecs->stop_func_start) &&
2560 !IN_SOLIB_RETURN_TRAMPOLINE (stop_pc, ecs->stop_func_name))
2561 || IN_SOLIB_CALL_TRAMPOLINE (stop_pc, ecs->stop_func_name)
2562 || ecs->stop_func_name == 0)
2563 {
2564 /* It's a subroutine call. */
c906108c 2565
c5aa993b 2566 if (step_over_calls == 0)
c906108c 2567 {
c5aa993b
JM
2568 /* I presume that step_over_calls is only 0 when we're
2569 supposed to be stepping at the assembly language level
2570 ("stepi"). Just stop. */
2571 stop_step = 1;
2572 goto wfi_break;
2573 }
c906108c 2574
c5aa993b
JM
2575 if (step_over_calls > 0 || IGNORE_HELPER_CALL (stop_pc))
2576 /* We're doing a "next". */
2577 goto step_over_function;
2578
2579 /* If we are in a function call trampoline (a stub between
2580 the calling routine and the real function), locate the real
2581 function. That's what tells us (a) whether we want to step
2582 into it at all, and (b) what prologue we want to run to
2583 the end of, if we do step into it. */
2584 tmp = SKIP_TRAMPOLINE_CODE (stop_pc);
2585 if (tmp != 0)
2586 ecs->stop_func_start = tmp;
2587 else
2588 {
2589 tmp = DYNAMIC_TRAMPOLINE_NEXTPC (stop_pc);
2590 if (tmp)
c906108c 2591 {
c5aa993b
JM
2592 struct symtab_and_line xxx;
2593 /* Why isn't this s_a_l called "sr_sal", like all of the
2594 other s_a_l's where this code is duplicated? */
2595 INIT_SAL (&xxx); /* initialize to zeroes */
2596 xxx.pc = tmp;
2597 xxx.section = find_pc_overlay (xxx.pc);
c906108c 2598 step_resume_breakpoint =
c5aa993b
JM
2599 set_momentary_breakpoint (xxx, NULL, bp_step_resume);
2600 insert_breakpoints ();
2601 goto keep_going;
c906108c
SS
2602 }
2603 }
2604
c5aa993b
JM
2605 /* If we have line number information for the function we
2606 are thinking of stepping into, step into it.
c906108c 2607
c5aa993b
JM
2608 If there are several symtabs at that PC (e.g. with include
2609 files), just want to know whether *any* of them have line
2610 numbers. find_pc_line handles this. */
2611 {
2612 struct symtab_and_line tmp_sal;
c906108c 2613
c5aa993b
JM
2614 tmp_sal = find_pc_line (ecs->stop_func_start, 0);
2615 if (tmp_sal.line != 0)
2616 goto step_into_function;
c906108c
SS
2617 }
2618
c5aa993b
JM
2619 step_over_function:
2620 /* A subroutine call has happened. */
c906108c 2621 {
c5aa993b
JM
2622 /* Set a special breakpoint after the return */
2623 struct symtab_and_line sr_sal;
c906108c 2624
c5aa993b
JM
2625 INIT_SAL (&sr_sal);
2626 sr_sal.symtab = NULL;
2627 sr_sal.line = 0;
2628
2629 /* If we came here after encountering a signal in the middle of
2630 a "next", use the stashed-away previous frame pc */
2631 sr_sal.pc
2632 = stopped_by_random_signal
2633 ? prev_pc
2634 : ADDR_BITS_REMOVE (SAVED_PC_AFTER_CALL (get_current_frame ()));
2635
2636 step_resume_breakpoint =
2637 set_momentary_breakpoint (sr_sal,
2638 stopped_by_random_signal ?
2639 NULL : get_current_frame (),
2640 bp_step_resume);
2641
2642 /* We've just entered a callee, and we wish to resume until
2643 it returns to the caller. Setting a step_resume bp on
2644 the return PC will catch a return from the callee.
2645
2646 However, if the callee is recursing, we want to be
2647 careful not to catch returns of those recursive calls,
2648 but of THIS instance of the call.
2649
2650 To do this, we set the step_resume bp's frame to our
2651 current caller's frame (step_frame_address, which is
2652 set by the "next" or "until" command, before execution
2653 begins).
2654
2655 But ... don't do it if we're single-stepping out of a
2656 sigtramp, because the reason we're single-stepping is
2657 precisely because unwinding is a problem (HP-UX 10.20,
2658 e.g.) and the frame address is likely to be incorrect.
2659 No danger of sigtramp recursion. */
2660
2661 if (ecs->stepping_through_sigtramp)
c906108c 2662 {
c5aa993b
JM
2663 step_resume_breakpoint->frame = (CORE_ADDR) NULL;
2664 ecs->stepping_through_sigtramp = 0;
c906108c 2665 }
c5aa993b
JM
2666 else if (!IN_SOLIB_DYNSYM_RESOLVE_CODE (sr_sal.pc))
2667 step_resume_breakpoint->frame = step_frame_address;
c906108c 2668
c5aa993b
JM
2669 if (breakpoints_inserted)
2670 insert_breakpoints ();
2671 }
2672 goto keep_going;
c906108c 2673
c5aa993b
JM
2674 step_into_function:
2675 /* Subroutine call with source code we should not step over.
2676 Do step to the first line of code in it. */
2677 {
2678 struct symtab *s;
c906108c 2679
c5aa993b
JM
2680 s = find_pc_symtab (stop_pc);
2681 if (s && s->language != language_asm)
2682 ecs->stop_func_start = SKIP_PROLOGUE (ecs->stop_func_start);
2683 }
2684 ecs->sal = find_pc_line (ecs->stop_func_start, 0);
2685 /* Use the step_resume_break to step until
2686 the end of the prologue, even if that involves jumps
2687 (as it seems to on the vax under 4.2). */
2688 /* If the prologue ends in the middle of a source line,
2689 continue to the end of that source line (if it is still
2690 within the function). Otherwise, just go to end of prologue. */
2691#ifdef PROLOGUE_FIRSTLINE_OVERLAP
2692 /* no, don't either. It skips any code that's
2693 legitimately on the first line. */
2694#else
2695 if (ecs->sal.end && ecs->sal.pc != ecs->stop_func_start && ecs->sal.end < ecs->stop_func_end)
2696 ecs->stop_func_start = ecs->sal.end;
2697#endif
c906108c 2698
c5aa993b
JM
2699 if (ecs->stop_func_start == stop_pc)
2700 {
2701 /* We are already there: stop now. */
2702 stop_step = 1;
2703 goto wfi_break;
c906108c 2704 }
c5aa993b
JM
2705 else
2706 /* Put the step-breakpoint there and go until there. */
c906108c 2707 {
c906108c
SS
2708 struct symtab_and_line sr_sal;
2709
c5aa993b
JM
2710 INIT_SAL (&sr_sal); /* initialize to zeroes */
2711 sr_sal.pc = ecs->stop_func_start;
2712 sr_sal.section = find_pc_overlay (ecs->stop_func_start);
2713 /* Do not specify what the fp should be when we stop
2714 since on some machines the prologue
2715 is where the new fp value is established. */
c906108c 2716 step_resume_breakpoint =
c5aa993b 2717 set_momentary_breakpoint (sr_sal, NULL, bp_step_resume);
c906108c
SS
2718 if (breakpoints_inserted)
2719 insert_breakpoints ();
c906108c 2720
c5aa993b
JM
2721 /* And make sure stepping stops right away then. */
2722 step_range_end = step_range_start;
c906108c 2723 }
c5aa993b
JM
2724 goto keep_going;
2725 }
c906108c 2726
c5aa993b 2727 /* We've wandered out of the step range. */
c906108c 2728
c5aa993b 2729 ecs->sal = find_pc_line (stop_pc, 0);
c906108c 2730
c5aa993b
JM
2731 if (step_range_end == 1)
2732 {
2733 /* It is stepi or nexti. We always want to stop stepping after
2734 one instruction. */
2735 stop_step = 1;
2736 goto wfi_break;
2737 }
c906108c 2738
c5aa993b
JM
2739 /* If we're in the return path from a shared library trampoline,
2740 we want to proceed through the trampoline when stepping. */
2741 if (IN_SOLIB_RETURN_TRAMPOLINE (stop_pc, ecs->stop_func_name))
2742 {
2743 CORE_ADDR tmp;
c906108c 2744
c5aa993b
JM
2745 /* Determine where this trampoline returns. */
2746 tmp = SKIP_TRAMPOLINE_CODE (stop_pc);
c906108c 2747
c5aa993b
JM
2748 /* Only proceed through if we know where it's going. */
2749 if (tmp)
2750 {
2751 /* And put the step-breakpoint there and go until there. */
2752 struct symtab_and_line sr_sal;
c906108c 2753
c5aa993b
JM
2754 INIT_SAL (&sr_sal); /* initialize to zeroes */
2755 sr_sal.pc = tmp;
2756 sr_sal.section = find_pc_overlay (sr_sal.pc);
2757 /* Do not specify what the fp should be when we stop
2758 since on some machines the prologue
2759 is where the new fp value is established. */
2760 step_resume_breakpoint =
2761 set_momentary_breakpoint (sr_sal, NULL, bp_step_resume);
2762 if (breakpoints_inserted)
2763 insert_breakpoints ();
c906108c 2764
c5aa993b
JM
2765 /* Restart without fiddling with the step ranges or
2766 other state. */
2767 goto keep_going;
2768 }
2769 }
c906108c 2770
c5aa993b 2771 if (ecs->sal.line == 0)
c906108c 2772 {
c5aa993b
JM
2773 /* We have no line number information. That means to stop
2774 stepping (does this always happen right after one instruction,
2775 when we do "s" in a function with no line numbers,
2776 or can this happen as a result of a return or longjmp?). */
2777 stop_step = 1;
2778 goto wfi_break;
c906108c
SS
2779 }
2780
c5aa993b
JM
2781 if ((stop_pc == ecs->sal.pc)
2782 && (ecs->current_line != ecs->sal.line || ecs->current_symtab != ecs->sal.symtab))
2783 {
2784 /* We are at the start of a different line. So stop. Note that
2785 we don't stop if we step into the middle of a different line.
2786 That is said to make things like for (;;) statements work
2787 better. */
2788 stop_step = 1;
2789 goto wfi_break;
2790 }
c906108c 2791
c5aa993b 2792 /* We aren't done stepping.
c906108c 2793
c5aa993b
JM
2794 Optimize by setting the stepping range to the line.
2795 (We might not be in the original line, but if we entered a
2796 new line in mid-statement, we continue stepping. This makes
2797 things like for(;;) statements work better.) */
c906108c 2798
c5aa993b
JM
2799 if (ecs->stop_func_end && ecs->sal.end >= ecs->stop_func_end)
2800 {
2801 /* If this is the last line of the function, don't keep stepping
2802 (it would probably step us out of the function).
2803 This is particularly necessary for a one-line function,
2804 in which after skipping the prologue we better stop even though
2805 we will be in mid-line. */
2806 stop_step = 1;
2807 goto wfi_break;
2808 }
2809 step_range_start = ecs->sal.pc;
2810 step_range_end = ecs->sal.end;
2811 step_frame_address = FRAME_FP (get_current_frame ());
2812 ecs->current_line = ecs->sal.line;
2813 ecs->current_symtab = ecs->sal.symtab;
2814
2815 /* In the case where we just stepped out of a function into the middle
2816 of a line of the caller, continue stepping, but step_frame_address
2817 must be modified to current frame */
2818 {
2819 CORE_ADDR current_frame = FRAME_FP (get_current_frame ());
2820 if (!(INNER_THAN (current_frame, step_frame_address)))
2821 step_frame_address = current_frame;
2822 }
c906108c 2823
c906108c 2824
c5aa993b 2825 goto keep_going;
c906108c 2826
c5aa993b
JM
2827 check_sigtramp2:
2828 if (trap_expected
2829 && IN_SIGTRAMP (stop_pc, ecs->stop_func_name)
2830 && !IN_SIGTRAMP (prev_pc, prev_func_name)
2831 && INNER_THAN (read_sp (), step_sp))
2832 {
2833 /* What has happened here is that we have just stepped the inferior
2834 with a signal (because it is a signal which shouldn't make
2835 us stop), thus stepping into sigtramp.
2836
2837 So we need to set a step_resume_break_address breakpoint
2838 and continue until we hit it, and then step. FIXME: This should
2839 be more enduring than a step_resume breakpoint; we should know
2840 that we will later need to keep going rather than re-hitting
2841 the breakpoint here (see testsuite/gdb.t06/signals.exp where
2842 it says "exceedingly difficult"). */
2843 struct symtab_and_line sr_sal;
2844
2845 INIT_SAL (&sr_sal); /* initialize to zeroes */
2846 sr_sal.pc = prev_pc;
2847 sr_sal.section = find_pc_overlay (sr_sal.pc);
2848 /* We perhaps could set the frame if we kept track of what
2849 the frame corresponding to prev_pc was. But we don't,
2850 so don't. */
2851 through_sigtramp_breakpoint =
2852 set_momentary_breakpoint (sr_sal, NULL, bp_through_sigtramp);
2853 if (breakpoints_inserted)
2854 insert_breakpoints ();
c906108c 2855
c5aa993b
JM
2856 ecs->remove_breakpoints_on_following_step = 1;
2857 ecs->another_trap = 1;
2858 }
c906108c 2859
c5aa993b
JM
2860 keep_going:
2861 /* Come to this label when you need to resume the inferior.
2862 It's really much cleaner to do a goto than a maze of if-else
2863 conditions. */
2864
2865 /* ??rehrauer: ttrace on HP-UX theoretically allows one to debug
2866 a vforked child beetween its creation and subsequent exit or
2867 call to exec(). However, I had big problems in this rather
2868 creaky exec engine, getting that to work. The fundamental
2869 problem is that I'm trying to debug two processes via an
2870 engine that only understands a single process with possibly
2871 multiple threads.
2872
2873 Hence, this spot is known to have problems when
2874 target_can_follow_vfork_prior_to_exec returns 1. */
2875
2876 /* Save the pc before execution, to compare with pc after stop. */
2877 prev_pc = read_pc (); /* Might have been DECR_AFTER_BREAK */
2878 prev_func_start = ecs->stop_func_start; /* Ok, since if DECR_PC_AFTER
2879 BREAK is defined, the
2880 original pc would not have
2881 been at the start of a
2882 function. */
2883 prev_func_name = ecs->stop_func_name;
2884
2885 if (ecs->update_step_sp)
2886 step_sp = read_sp ();
2887 ecs->update_step_sp = 0;
2888
2889 /* If we did not do break;, it means we should keep
2890 running the inferior and not return to debugger. */
2891
2892 if (trap_expected && stop_signal != TARGET_SIGNAL_TRAP)
2893 {
2894 /* We took a signal (which we are supposed to pass through to
2895 the inferior, else we'd have done a break above) and we
2896 haven't yet gotten our trap. Simply continue. */
2897 resume (currently_stepping (ecs), stop_signal);
2898 }
2899 else
2900 {
2901 /* Either the trap was not expected, but we are continuing
2902 anyway (the user asked that this signal be passed to the
2903 child)
2904 -- or --
2905 The signal was SIGTRAP, e.g. it was our signal, but we
2906 decided we should resume from it.
2907
2908 We're going to run this baby now!
2909
2910 Insert breakpoints now, unless we are trying
2911 to one-proceed past a breakpoint. */
2912 /* If we've just finished a special step resume and we don't
2913 want to hit a breakpoint, pull em out. */
2914 if (step_resume_breakpoint == NULL
2915 && through_sigtramp_breakpoint == NULL
2916 && ecs->remove_breakpoints_on_following_step)
2917 {
2918 ecs->remove_breakpoints_on_following_step = 0;
2919 remove_breakpoints ();
2920 breakpoints_inserted = 0;
2921 }
2922 else if (!breakpoints_inserted &&
2923 (through_sigtramp_breakpoint != NULL || !ecs->another_trap))
2924 {
2925 breakpoints_failed = insert_breakpoints ();
2926 if (breakpoints_failed)
2927 goto wfi_break;
2928 breakpoints_inserted = 1;
2929 }
c906108c 2930
c5aa993b 2931 trap_expected = ecs->another_trap;
c906108c 2932
c5aa993b
JM
2933 /* Do not deliver SIGNAL_TRAP (except when the user
2934 explicitly specifies that such a signal should be
2935 delivered to the target program).
c906108c 2936
c5aa993b
JM
2937 Typically, this would occure when a user is debugging a
2938 target monitor on a simulator: the target monitor sets a
2939 breakpoint; the simulator encounters this break-point and
2940 halts the simulation handing control to GDB; GDB, noteing
2941 that the break-point isn't valid, returns control back to
2942 the simulator; the simulator then delivers the hardware
2943 equivalent of a SIGNAL_TRAP to the program being
2944 debugged. */
c906108c 2945
c5aa993b
JM
2946 if (stop_signal == TARGET_SIGNAL_TRAP
2947 && !signal_program[stop_signal])
2948 stop_signal = TARGET_SIGNAL_0;
c906108c
SS
2949
2950#ifdef SHIFT_INST_REGS
c5aa993b
JM
2951 /* I'm not sure when this following segment applies. I do know,
2952 now, that we shouldn't rewrite the regs when we were stopped
2953 by a random signal from the inferior process. */
2954 /* FIXME: Shouldn't this be based on the valid bit of the SXIP?
2955 (this is only used on the 88k). */
2956
2957 if (!bpstat_explains_signal (stop_bpstat)
2958 && (stop_signal != TARGET_SIGNAL_CHLD)
2959 && !stopped_by_random_signal)
2960 SHIFT_INST_REGS ();
c906108c
SS
2961#endif /* SHIFT_INST_REGS */
2962
c5aa993b
JM
2963 resume (currently_stepping (ecs), stop_signal);
2964 }
cd0fc7c3 2965
c5aa993b
JM
2966 /* Former continues in the main loop goto here. */
2967 wfi_continue:
2968 /* This used to be at the top of the loop. */
2969 if (ecs->infwait_state == infwait_normal_state)
2970 {
2971 overlay_cache_invalid = 1;
cd0fc7c3 2972
c5aa993b
JM
2973 /* We have to invalidate the registers BEFORE calling
2974 target_wait because they can be loaded from the target
2975 while in target_wait. This makes remote debugging a bit
2976 more efficient for those targets that provide critical
2977 registers as part of their normal status mechanism. */
cd0fc7c3 2978
c5aa993b
JM
2979 registers_changed ();
2980 ecs->waiton_pid = -1;
2981 ecs->wp = &(ecs->ws);
2982 }
2983 /* This is the old end of the while loop. Let everybody know
2984 we want to wait for the inferior some more and get called
2985 again soon. */
2986 ecs->wait_some_more = 1;
2987 return;
2988 }
c906108c 2989
cd0fc7c3
SS
2990 /* Former breaks in the main loop goto here. */
2991wfi_break:
2992
c906108c
SS
2993stop_stepping:
2994 if (target_has_execution)
2995 {
2996 /* Are we stopping for a vfork event? We only stop when we see
2997 the child's event. However, we may not yet have seen the
2998 parent's event. And, inferior_pid is still set to the parent's
2999 pid, until we resume again and follow either the parent or child.
3000
3001 To ensure that we can really touch inferior_pid (aka, the
3002 parent process) -- which calls to functions like read_pc
3003 implicitly do -- wait on the parent if necessary. */
3004 if ((pending_follow.kind == TARGET_WAITKIND_VFORKED)
3005 && !pending_follow.fork_event.saw_parent_fork)
3006 {
3007 int parent_pid;
3008
3009 do
3010 {
3011 if (target_wait_hook)
cd0fc7c3 3012 parent_pid = target_wait_hook (-1, &(ecs->ws));
c906108c 3013 else
cd0fc7c3 3014 parent_pid = target_wait (-1, &(ecs->ws));
c906108c
SS
3015 }
3016 while (parent_pid != inferior_pid);
3017 }
3018
c906108c 3019 /* Assuming the inferior still exists, set these up for next
c5aa993b
JM
3020 time, just like we did above if we didn't break out of the
3021 loop. */
c906108c 3022 prev_pc = read_pc ();
cd0fc7c3
SS
3023 prev_func_start = ecs->stop_func_start;
3024 prev_func_name = ecs->stop_func_name;
c906108c 3025 }
cd0fc7c3
SS
3026 /* Let callers know we don't want to wait for the inferior anymore. */
3027 ecs->wait_some_more = 0;
3028}
3029
3030/* Are we in the middle of stepping? */
3031
392a587b 3032static int
cd0fc7c3
SS
3033currently_stepping (ecs)
3034 struct execution_control_state *ecs;
3035{
3036 return ((through_sigtramp_breakpoint == NULL
3037 && !ecs->handling_longjmp
3038 && ((step_range_end && step_resume_breakpoint == NULL)
3039 || trap_expected))
3040 || ecs->stepping_through_solib_after_catch
3041 || bpstat_should_step ());
c906108c
SS
3042}
3043
3044/* This function returns TRUE if ep is an internal breakpoint
3045 set to catch generic shared library (aka dynamically-linked
3046 library) events. (This is *NOT* the same as a catchpoint for a
3047 shlib event. The latter is something a user can set; this is
3048 something gdb sets for its own use, and isn't ever shown to a
3049 user.) */
3050static int
3051is_internal_shlib_eventpoint (ep)
3052 struct breakpoint *ep;
3053{
3054 return
3055 (ep->type == bp_shlib_event)
3056 ;
3057}
3058
3059/* This function returns TRUE if bs indicates that the inferior
3060 stopped due to a shared library (aka dynamically-linked library)
3061 event. */
3062static int
3063stopped_for_internal_shlib_event (bs)
3064 bpstat bs;
3065{
3066 /* Note that multiple eventpoints may've caused the stop. Any
3067 that are associated with shlib events will be accepted. */
3068 for (; bs != NULL; bs = bs->next)
3069 {
3070 if ((bs->breakpoint_at != NULL)
3071 && is_internal_shlib_eventpoint (bs->breakpoint_at))
3072 return 1;
3073 }
3074
3075 /* If we get here, then no candidate was found. */
3076 return 0;
3077}
3078
3079/* This function returns TRUE if bs indicates that the inferior
3080 stopped due to a shared library (aka dynamically-linked library)
3081 event caught by a catchpoint.
3082
3083 If TRUE, cp_p is set to point to the catchpoint.
3084
3085 Else, the value of cp_p is undefined. */
3086static int
3087stopped_for_shlib_catchpoint (bs, cp_p)
3088 bpstat bs;
3089 struct breakpoint **cp_p;
3090{
3091 /* Note that multiple eventpoints may've caused the stop. Any
3092 that are associated with shlib events will be accepted. */
3093 *cp_p = NULL;
3094
3095 for (; bs != NULL; bs = bs->next)
3096 {
3097 if ((bs->breakpoint_at != NULL)
3098 && ep_is_shlib_catchpoint (bs->breakpoint_at))
3099 {
3100 *cp_p = bs->breakpoint_at;
3101 return 1;
3102 }
3103 }
3104
3105 /* If we get here, then no candidate was found. */
3106 return 0;
3107}
3108\f
3109
43ff13b4
JM
3110/* Reset proper settings after an asynchronous command has finished.
3111 If the execution command was in synchronous mode, register stdin
3112 with the event loop, and reset the prompt. */
3113static void
3114complete_execution ()
3115{
c5aa993b 3116 extern cleanup_sigint_signal_handler PARAMS ((void));
43ff13b4 3117
adf40b2e 3118 target_executing = 0;
43ff13b4
JM
3119 if (sync_execution)
3120 {
3121 add_file_handler (input_fd, (file_handler_func *) call_readline, 0);
3122 pop_prompt ();
3123 sync_execution = 0;
3124 cleanup_sigint_signal_handler ();
3125 display_gdb_prompt (0);
3126 }
43ff13b4
JM
3127}
3128
c906108c
SS
3129/* Here to return control to GDB when the inferior stops for real.
3130 Print appropriate messages, remove breakpoints, give terminal our modes.
3131
3132 STOP_PRINT_FRAME nonzero means print the executing frame
3133 (pc, function, args, file, line number and line text).
3134 BREAKPOINTS_FAILED nonzero means stop was due to error
3135 attempting to insert breakpoints. */
3136
3137void
3138normal_stop ()
3139{
c906108c
SS
3140 /* As with the notification of thread events, we want to delay
3141 notifying the user that we've switched thread context until
3142 the inferior actually stops.
3143
3144 (Note that there's no point in saying anything if the inferior
3145 has exited!) */
7a292a7a
SS
3146 if (may_switch_from_inferior_pid
3147 && (switched_from_inferior_pid != inferior_pid)
3148 && target_has_execution)
c906108c
SS
3149 {
3150 target_terminal_ours_for_output ();
3151 printf_filtered ("[Switched to %s]\n",
3152 target_pid_or_tid_to_str (inferior_pid));
3153 switched_from_inferior_pid = inferior_pid;
3154 }
c906108c
SS
3155
3156 /* Make sure that the current_frame's pc is correct. This
3157 is a correction for setting up the frame info before doing
3158 DECR_PC_AFTER_BREAK */
3159 if (target_has_execution && get_current_frame ())
3160 (get_current_frame ())->pc = read_pc ();
3161
3162 if (breakpoints_failed)
3163 {
3164 target_terminal_ours_for_output ();
3165 print_sys_errmsg ("ptrace", breakpoints_failed);
3166 printf_filtered ("Stopped; cannot insert breakpoints.\n\
3167The same program may be running in another process.\n");
3168 }
3169
3170 if (target_has_execution && breakpoints_inserted)
3171 {
3172 if (remove_breakpoints ())
3173 {
3174 target_terminal_ours_for_output ();
3175 printf_filtered ("Cannot remove breakpoints because ");
3176 printf_filtered ("program is no longer writable.\n");
3177 printf_filtered ("It might be running in another process.\n");
3178 printf_filtered ("Further execution is probably impossible.\n");
3179 }
3180 }
3181 breakpoints_inserted = 0;
3182
3183 /* Delete the breakpoint we stopped at, if it wants to be deleted.
3184 Delete any breakpoint that is to be deleted at the next stop. */
3185
3186 breakpoint_auto_delete (stop_bpstat);
3187
3188 /* If an auto-display called a function and that got a signal,
3189 delete that auto-display to avoid an infinite recursion. */
3190
3191 if (stopped_by_random_signal)
3192 disable_current_display ();
3193
3194 /* Don't print a message if in the middle of doing a "step n"
3195 operation for n > 1 */
3196 if (step_multi && stop_step)
3197 goto done;
3198
3199 target_terminal_ours ();
3200
3201 /* Did we stop because the user set the stop_on_solib_events
3202 variable? (If so, we report this as a generic, "Stopped due
3203 to shlib event" message.) */
3204 if (stopped_for_internal_shlib_event (stop_bpstat))
3205 {
3206 printf_filtered ("Stopped due to shared library event\n");
3207 }
3208
3209 /* Look up the hook_stop and run it if it exists. */
3210
3211 if (stop_command && stop_command->hook)
3212 {
3213 catch_errors (hook_stop_stub, stop_command->hook,
3214 "Error while running hook_stop:\n", RETURN_MASK_ALL);
3215 }
3216
3217 if (!target_has_stack)
3218 {
3219
3220 goto done;
3221 }
3222
3223 /* Select innermost stack frame - i.e., current frame is frame 0,
3224 and current location is based on that.
3225 Don't do this on return from a stack dummy routine,
3226 or if the program has exited. */
3227
3228 if (!stop_stack_dummy)
3229 {
3230 select_frame (get_current_frame (), 0);
3231
3232 /* Print current location without a level number, if
c5aa993b
JM
3233 we have changed functions or hit a breakpoint.
3234 Print source line if we have one.
3235 bpstat_print() contains the logic deciding in detail
3236 what to print, based on the event(s) that just occurred. */
c906108c
SS
3237
3238 if (stop_print_frame)
3239 {
3240 int bpstat_ret;
3241 int source_flag;
3242
3243 bpstat_ret = bpstat_print (stop_bpstat);
3244 /* bpstat_print() returned one of:
c5aa993b
JM
3245 -1: Didn't print anything
3246 0: Printed preliminary "Breakpoint n, " message, desires
3247 location tacked on
3248 1: Printed something, don't tack on location */
c906108c
SS
3249
3250 if (bpstat_ret == -1)
3251 if (stop_step
3252 && step_frame_address == FRAME_FP (get_current_frame ())
3253 && step_start_function == find_pc_function (stop_pc))
3254 source_flag = -1; /* finished step, just print source line */
3255 else
3256 source_flag = 1; /* print location and source line */
3257 else if (bpstat_ret == 0) /* hit bpt, desire location */
3258 source_flag = 1; /* print location and source line */
3259 else /* bpstat_ret == 1, hit bpt, do not desire location */
3260 source_flag = -1; /* just print source line */
3261
3262 /* The behavior of this routine with respect to the source
3263 flag is:
3264 -1: Print only source line
3265 0: Print only location
3266 1: Print location and source line */
3267 show_and_print_stack_frame (selected_frame, -1, source_flag);
3268
3269 /* Display the auto-display expressions. */
3270 do_displays ();
3271 }
3272 }
3273
3274 /* Save the function value return registers, if we care.
3275 We might be about to restore their previous contents. */
3276 if (proceed_to_finish)
3277 read_register_bytes (0, stop_registers, REGISTER_BYTES);
3278
3279 if (stop_stack_dummy)
3280 {
3281 /* Pop the empty frame that contains the stack dummy.
3282 POP_FRAME ends with a setting of the current frame, so we
c5aa993b 3283 can use that next. */
c906108c
SS
3284 POP_FRAME;
3285 /* Set stop_pc to what it was before we called the function.
c5aa993b
JM
3286 Can't rely on restore_inferior_status because that only gets
3287 called if we don't stop in the called function. */
c906108c
SS
3288 stop_pc = read_pc ();
3289 select_frame (get_current_frame (), 0);
3290 }
3291
3292
3293 TUIDO (((TuiOpaqueFuncPtr) tui_vCheckDataValues, selected_frame));
3294
3295done:
3296 annotate_stopped ();
3297}
3298
3299static int
3300hook_stop_stub (cmd)
3301 PTR cmd;
3302{
3303 execute_user_command ((struct cmd_list_element *) cmd, 0);
3304 return (0);
3305}
3306\f
c5aa993b 3307int
c906108c
SS
3308signal_stop_state (signo)
3309 int signo;
3310{
3311 return signal_stop[signo];
3312}
3313
c5aa993b 3314int
c906108c
SS
3315signal_print_state (signo)
3316 int signo;
3317{
3318 return signal_print[signo];
3319}
3320
c5aa993b 3321int
c906108c
SS
3322signal_pass_state (signo)
3323 int signo;
3324{
3325 return signal_program[signo];
3326}
3327
3328static void
3329sig_print_header ()
3330{
3331 printf_filtered ("\
3332Signal Stop\tPrint\tPass to program\tDescription\n");
3333}
3334
3335static void
3336sig_print_info (oursig)
3337 enum target_signal oursig;
3338{
3339 char *name = target_signal_to_name (oursig);
3340 int name_padding = 13 - strlen (name);
3341 if (name_padding <= 0)
3342 name_padding = 0;
3343
3344 printf_filtered ("%s", name);
3345 printf_filtered ("%*.*s ", name_padding, name_padding,
3346 " ");
3347 printf_filtered ("%s\t", signal_stop[oursig] ? "Yes" : "No");
3348 printf_filtered ("%s\t", signal_print[oursig] ? "Yes" : "No");
3349 printf_filtered ("%s\t\t", signal_program[oursig] ? "Yes" : "No");
3350 printf_filtered ("%s\n", target_signal_to_string (oursig));
3351}
3352
3353/* Specify how various signals in the inferior should be handled. */
3354
3355static void
3356handle_command (args, from_tty)
3357 char *args;
3358 int from_tty;
3359{
3360 char **argv;
3361 int digits, wordlen;
3362 int sigfirst, signum, siglast;
3363 enum target_signal oursig;
3364 int allsigs;
3365 int nsigs;
3366 unsigned char *sigs;
3367 struct cleanup *old_chain;
3368
3369 if (args == NULL)
3370 {
3371 error_no_arg ("signal to handle");
3372 }
3373
3374 /* Allocate and zero an array of flags for which signals to handle. */
3375
3376 nsigs = (int) TARGET_SIGNAL_LAST;
3377 sigs = (unsigned char *) alloca (nsigs);
3378 memset (sigs, 0, nsigs);
3379
3380 /* Break the command line up into args. */
3381
3382 argv = buildargv (args);
3383 if (argv == NULL)
3384 {
3385 nomem (0);
3386 }
7a292a7a 3387 old_chain = make_cleanup_freeargv (argv);
c906108c
SS
3388
3389 /* Walk through the args, looking for signal oursigs, signal names, and
3390 actions. Signal numbers and signal names may be interspersed with
3391 actions, with the actions being performed for all signals cumulatively
3392 specified. Signal ranges can be specified as <LOW>-<HIGH>. */
3393
3394 while (*argv != NULL)
3395 {
3396 wordlen = strlen (*argv);
3397 for (digits = 0; isdigit ((*argv)[digits]); digits++)
3398 {;
3399 }
3400 allsigs = 0;
3401 sigfirst = siglast = -1;
3402
3403 if (wordlen >= 1 && !strncmp (*argv, "all", wordlen))
3404 {
3405 /* Apply action to all signals except those used by the
3406 debugger. Silently skip those. */
3407 allsigs = 1;
3408 sigfirst = 0;
3409 siglast = nsigs - 1;
3410 }
3411 else if (wordlen >= 1 && !strncmp (*argv, "stop", wordlen))
3412 {
3413 SET_SIGS (nsigs, sigs, signal_stop);
3414 SET_SIGS (nsigs, sigs, signal_print);
3415 }
3416 else if (wordlen >= 1 && !strncmp (*argv, "ignore", wordlen))
3417 {
3418 UNSET_SIGS (nsigs, sigs, signal_program);
3419 }
3420 else if (wordlen >= 2 && !strncmp (*argv, "print", wordlen))
3421 {
3422 SET_SIGS (nsigs, sigs, signal_print);
3423 }
3424 else if (wordlen >= 2 && !strncmp (*argv, "pass", wordlen))
3425 {
3426 SET_SIGS (nsigs, sigs, signal_program);
3427 }
3428 else if (wordlen >= 3 && !strncmp (*argv, "nostop", wordlen))
3429 {
3430 UNSET_SIGS (nsigs, sigs, signal_stop);
3431 }
3432 else if (wordlen >= 3 && !strncmp (*argv, "noignore", wordlen))
3433 {
3434 SET_SIGS (nsigs, sigs, signal_program);
3435 }
3436 else if (wordlen >= 4 && !strncmp (*argv, "noprint", wordlen))
3437 {
3438 UNSET_SIGS (nsigs, sigs, signal_print);
3439 UNSET_SIGS (nsigs, sigs, signal_stop);
3440 }
3441 else if (wordlen >= 4 && !strncmp (*argv, "nopass", wordlen))
3442 {
3443 UNSET_SIGS (nsigs, sigs, signal_program);
3444 }
3445 else if (digits > 0)
3446 {
3447 /* It is numeric. The numeric signal refers to our own
3448 internal signal numbering from target.h, not to host/target
3449 signal number. This is a feature; users really should be
3450 using symbolic names anyway, and the common ones like
3451 SIGHUP, SIGINT, SIGALRM, etc. will work right anyway. */
3452
3453 sigfirst = siglast = (int)
3454 target_signal_from_command (atoi (*argv));
3455 if ((*argv)[digits] == '-')
3456 {
3457 siglast = (int)
3458 target_signal_from_command (atoi ((*argv) + digits + 1));
3459 }
3460 if (sigfirst > siglast)
3461 {
3462 /* Bet he didn't figure we'd think of this case... */
3463 signum = sigfirst;
3464 sigfirst = siglast;
3465 siglast = signum;
3466 }
3467 }
3468 else
3469 {
3470 oursig = target_signal_from_name (*argv);
3471 if (oursig != TARGET_SIGNAL_UNKNOWN)
3472 {
3473 sigfirst = siglast = (int) oursig;
3474 }
3475 else
3476 {
3477 /* Not a number and not a recognized flag word => complain. */
3478 error ("Unrecognized or ambiguous flag word: \"%s\".", *argv);
3479 }
3480 }
3481
3482 /* If any signal numbers or symbol names were found, set flags for
c5aa993b 3483 which signals to apply actions to. */
c906108c
SS
3484
3485 for (signum = sigfirst; signum >= 0 && signum <= siglast; signum++)
3486 {
3487 switch ((enum target_signal) signum)
3488 {
3489 case TARGET_SIGNAL_TRAP:
3490 case TARGET_SIGNAL_INT:
3491 if (!allsigs && !sigs[signum])
3492 {
3493 if (query ("%s is used by the debugger.\n\
3494Are you sure you want to change it? ",
3495 target_signal_to_name
3496 ((enum target_signal) signum)))
3497 {
3498 sigs[signum] = 1;
3499 }
3500 else
3501 {
3502 printf_unfiltered ("Not confirmed, unchanged.\n");
3503 gdb_flush (gdb_stdout);
3504 }
3505 }
3506 break;
3507 case TARGET_SIGNAL_0:
3508 case TARGET_SIGNAL_DEFAULT:
3509 case TARGET_SIGNAL_UNKNOWN:
3510 /* Make sure that "all" doesn't print these. */
3511 break;
3512 default:
3513 sigs[signum] = 1;
3514 break;
3515 }
3516 }
3517
3518 argv++;
3519 }
3520
3521 target_notice_signals (inferior_pid);
3522
3523 if (from_tty)
3524 {
3525 /* Show the results. */
3526 sig_print_header ();
3527 for (signum = 0; signum < nsigs; signum++)
3528 {
3529 if (sigs[signum])
3530 {
3531 sig_print_info (signum);
3532 }
3533 }
3534 }
3535
3536 do_cleanups (old_chain);
3537}
3538
3539static void
3540xdb_handle_command (args, from_tty)
3541 char *args;
3542 int from_tty;
3543{
3544 char **argv;
3545 struct cleanup *old_chain;
3546
3547 /* Break the command line up into args. */
3548
3549 argv = buildargv (args);
3550 if (argv == NULL)
3551 {
3552 nomem (0);
3553 }
7a292a7a 3554 old_chain = make_cleanup_freeargv (argv);
c906108c
SS
3555 if (argv[1] != (char *) NULL)
3556 {
3557 char *argBuf;
3558 int bufLen;
3559
3560 bufLen = strlen (argv[0]) + 20;
3561 argBuf = (char *) xmalloc (bufLen);
3562 if (argBuf)
3563 {
3564 int validFlag = 1;
3565 enum target_signal oursig;
3566
3567 oursig = target_signal_from_name (argv[0]);
3568 memset (argBuf, 0, bufLen);
3569 if (strcmp (argv[1], "Q") == 0)
3570 sprintf (argBuf, "%s %s", argv[0], "noprint");
3571 else
3572 {
3573 if (strcmp (argv[1], "s") == 0)
3574 {
3575 if (!signal_stop[oursig])
3576 sprintf (argBuf, "%s %s", argv[0], "stop");
3577 else
3578 sprintf (argBuf, "%s %s", argv[0], "nostop");
3579 }
3580 else if (strcmp (argv[1], "i") == 0)
3581 {
3582 if (!signal_program[oursig])
3583 sprintf (argBuf, "%s %s", argv[0], "pass");
3584 else
3585 sprintf (argBuf, "%s %s", argv[0], "nopass");
3586 }
3587 else if (strcmp (argv[1], "r") == 0)
3588 {
3589 if (!signal_print[oursig])
3590 sprintf (argBuf, "%s %s", argv[0], "print");
3591 else
3592 sprintf (argBuf, "%s %s", argv[0], "noprint");
3593 }
3594 else
3595 validFlag = 0;
3596 }
3597 if (validFlag)
3598 handle_command (argBuf, from_tty);
3599 else
3600 printf_filtered ("Invalid signal handling flag.\n");
3601 if (argBuf)
3602 free (argBuf);
3603 }
3604 }
3605 do_cleanups (old_chain);
3606}
3607
3608/* Print current contents of the tables set by the handle command.
3609 It is possible we should just be printing signals actually used
3610 by the current target (but for things to work right when switching
3611 targets, all signals should be in the signal tables). */
3612
3613static void
3614signals_info (signum_exp, from_tty)
3615 char *signum_exp;
3616 int from_tty;
3617{
3618 enum target_signal oursig;
3619 sig_print_header ();
3620
3621 if (signum_exp)
3622 {
3623 /* First see if this is a symbol name. */
3624 oursig = target_signal_from_name (signum_exp);
3625 if (oursig == TARGET_SIGNAL_UNKNOWN)
3626 {
3627 /* No, try numeric. */
3628 oursig =
3629 target_signal_from_command (parse_and_eval_address (signum_exp));
3630 }
3631 sig_print_info (oursig);
3632 return;
3633 }
3634
3635 printf_filtered ("\n");
3636 /* These ugly casts brought to you by the native VAX compiler. */
3637 for (oursig = TARGET_SIGNAL_FIRST;
3638 (int) oursig < (int) TARGET_SIGNAL_LAST;
3639 oursig = (enum target_signal) ((int) oursig + 1))
3640 {
3641 QUIT;
3642
3643 if (oursig != TARGET_SIGNAL_UNKNOWN
3644 && oursig != TARGET_SIGNAL_DEFAULT
3645 && oursig != TARGET_SIGNAL_0)
3646 sig_print_info (oursig);
3647 }
3648
3649 printf_filtered ("\nUse the \"handle\" command to change these tables.\n");
3650}
3651\f
7a292a7a
SS
3652struct inferior_status
3653{
3654 enum target_signal stop_signal;
3655 CORE_ADDR stop_pc;
3656 bpstat stop_bpstat;
3657 int stop_step;
3658 int stop_stack_dummy;
3659 int stopped_by_random_signal;
3660 int trap_expected;
3661 CORE_ADDR step_range_start;
3662 CORE_ADDR step_range_end;
3663 CORE_ADDR step_frame_address;
3664 int step_over_calls;
3665 CORE_ADDR step_resume_break_address;
3666 int stop_after_trap;
3667 int stop_soon_quietly;
3668 CORE_ADDR selected_frame_address;
3669 char *stop_registers;
3670
3671 /* These are here because if call_function_by_hand has written some
3672 registers and then decides to call error(), we better not have changed
3673 any registers. */
3674 char *registers;
3675
3676 int selected_level;
3677 int breakpoint_proceeded;
3678 int restore_stack_info;
3679 int proceed_to_finish;
3680};
3681
3682
3683static struct inferior_status *xmalloc_inferior_status PARAMS ((void));
3684static struct inferior_status *
3685xmalloc_inferior_status ()
3686{
3687 struct inferior_status *inf_status;
3688 inf_status = xmalloc (sizeof (struct inferior_status));
3689 inf_status->stop_registers = xmalloc (REGISTER_BYTES);
3690 inf_status->registers = xmalloc (REGISTER_BYTES);
3691 return inf_status;
3692}
3693
3694static void free_inferior_status PARAMS ((struct inferior_status *));
3695static void
3696free_inferior_status (inf_status)
3697 struct inferior_status *inf_status;
3698{
3699 free (inf_status->registers);
3700 free (inf_status->stop_registers);
3701 free (inf_status);
3702}
3703
3704void
3705write_inferior_status_register (inf_status, regno, val)
3706 struct inferior_status *inf_status;
3707 int regno;
3708 LONGEST val;
3709{
c5aa993b 3710 int size = REGISTER_RAW_SIZE (regno);
7a292a7a
SS
3711 void *buf = alloca (size);
3712 store_signed_integer (buf, size, val);
3713 memcpy (&inf_status->registers[REGISTER_BYTE (regno)], buf, size);
3714}
3715
3716
3717
c906108c
SS
3718/* Save all of the information associated with the inferior<==>gdb
3719 connection. INF_STATUS is a pointer to a "struct inferior_status"
3720 (defined in inferior.h). */
3721
7a292a7a
SS
3722struct inferior_status *
3723save_inferior_status (restore_stack_info)
c906108c
SS
3724 int restore_stack_info;
3725{
7a292a7a
SS
3726 struct inferior_status *inf_status = xmalloc_inferior_status ();
3727
c906108c
SS
3728 inf_status->stop_signal = stop_signal;
3729 inf_status->stop_pc = stop_pc;
3730 inf_status->stop_step = stop_step;
3731 inf_status->stop_stack_dummy = stop_stack_dummy;
3732 inf_status->stopped_by_random_signal = stopped_by_random_signal;
3733 inf_status->trap_expected = trap_expected;
3734 inf_status->step_range_start = step_range_start;
3735 inf_status->step_range_end = step_range_end;
3736 inf_status->step_frame_address = step_frame_address;
3737 inf_status->step_over_calls = step_over_calls;
3738 inf_status->stop_after_trap = stop_after_trap;
3739 inf_status->stop_soon_quietly = stop_soon_quietly;
3740 /* Save original bpstat chain here; replace it with copy of chain.
3741 If caller's caller is walking the chain, they'll be happier if we
7a292a7a
SS
3742 hand them back the original chain when restore_inferior_status is
3743 called. */
c906108c
SS
3744 inf_status->stop_bpstat = stop_bpstat;
3745 stop_bpstat = bpstat_copy (stop_bpstat);
3746 inf_status->breakpoint_proceeded = breakpoint_proceeded;
3747 inf_status->restore_stack_info = restore_stack_info;
3748 inf_status->proceed_to_finish = proceed_to_finish;
c5aa993b 3749
c906108c
SS
3750 memcpy (inf_status->stop_registers, stop_registers, REGISTER_BYTES);
3751
3752 read_register_bytes (0, inf_status->registers, REGISTER_BYTES);
3753
3754 record_selected_frame (&(inf_status->selected_frame_address),
3755 &(inf_status->selected_level));
7a292a7a 3756 return inf_status;
c906108c
SS
3757}
3758
3759struct restore_selected_frame_args
3760{
3761 CORE_ADDR frame_address;
3762 int level;
3763};
3764
3765static int restore_selected_frame PARAMS ((PTR));
3766
c906108c
SS
3767static int
3768restore_selected_frame (args)
3769 PTR args;
3770{
3771 struct restore_selected_frame_args *fr =
3772 (struct restore_selected_frame_args *) args;
3773 struct frame_info *frame;
3774 int level = fr->level;
3775
3776 frame = find_relative_frame (get_current_frame (), &level);
3777
3778 /* If inf_status->selected_frame_address is NULL, there was no
3779 previously selected frame. */
3780 if (frame == NULL ||
3781 /* FRAME_FP (frame) != fr->frame_address || */
3782 /* elz: deleted this check as a quick fix to the problem that
c5aa993b
JM
3783 for function called by hand gdb creates no internal frame
3784 structure and the real stack and gdb's idea of stack are
3785 different if nested calls by hands are made.
c906108c 3786
c5aa993b 3787 mvs: this worries me. */
c906108c
SS
3788 level != 0)
3789 {
3790 warning ("Unable to restore previously selected frame.\n");
3791 return 0;
3792 }
3793
3794 select_frame (frame, fr->level);
3795
3796 return (1);
3797}
3798
3799void
3800restore_inferior_status (inf_status)
3801 struct inferior_status *inf_status;
3802{
3803 stop_signal = inf_status->stop_signal;
3804 stop_pc = inf_status->stop_pc;
3805 stop_step = inf_status->stop_step;
3806 stop_stack_dummy = inf_status->stop_stack_dummy;
3807 stopped_by_random_signal = inf_status->stopped_by_random_signal;
3808 trap_expected = inf_status->trap_expected;
3809 step_range_start = inf_status->step_range_start;
3810 step_range_end = inf_status->step_range_end;
3811 step_frame_address = inf_status->step_frame_address;
3812 step_over_calls = inf_status->step_over_calls;
3813 stop_after_trap = inf_status->stop_after_trap;
3814 stop_soon_quietly = inf_status->stop_soon_quietly;
3815 bpstat_clear (&stop_bpstat);
3816 stop_bpstat = inf_status->stop_bpstat;
3817 breakpoint_proceeded = inf_status->breakpoint_proceeded;
3818 proceed_to_finish = inf_status->proceed_to_finish;
3819
7a292a7a 3820 /* FIXME: Is the restore of stop_registers always needed */
c906108c
SS
3821 memcpy (stop_registers, inf_status->stop_registers, REGISTER_BYTES);
3822
3823 /* The inferior can be gone if the user types "print exit(0)"
3824 (and perhaps other times). */
3825 if (target_has_execution)
3826 write_register_bytes (0, inf_status->registers, REGISTER_BYTES);
3827
c906108c
SS
3828 /* FIXME: If we are being called after stopping in a function which
3829 is called from gdb, we should not be trying to restore the
3830 selected frame; it just prints a spurious error message (The
3831 message is useful, however, in detecting bugs in gdb (like if gdb
3832 clobbers the stack)). In fact, should we be restoring the
3833 inferior status at all in that case? . */
3834
3835 if (target_has_stack && inf_status->restore_stack_info)
3836 {
3837 struct restore_selected_frame_args fr;
3838 fr.level = inf_status->selected_level;
3839 fr.frame_address = inf_status->selected_frame_address;
3840 /* The point of catch_errors is that if the stack is clobbered,
c5aa993b
JM
3841 walking the stack might encounter a garbage pointer and error()
3842 trying to dereference it. */
c906108c
SS
3843 if (catch_errors (restore_selected_frame, &fr,
3844 "Unable to restore previously selected frame:\n",
3845 RETURN_MASK_ERROR) == 0)
3846 /* Error in restoring the selected frame. Select the innermost
3847 frame. */
3848
3849
3850 select_frame (get_current_frame (), 0);
3851
3852 }
c906108c 3853
7a292a7a
SS
3854 free_inferior_status (inf_status);
3855}
c906108c
SS
3856
3857void
7a292a7a
SS
3858discard_inferior_status (inf_status)
3859 struct inferior_status *inf_status;
3860{
3861 /* See save_inferior_status for info on stop_bpstat. */
3862 bpstat_clear (&inf_status->stop_bpstat);
3863 free_inferior_status (inf_status);
3864}
3865
3866static void
c906108c
SS
3867set_follow_fork_mode_command (arg, from_tty, c)
3868 char *arg;
3869 int from_tty;
3870 struct cmd_list_element *c;
3871{
3872 if (!STREQ (arg, "parent") &&
3873 !STREQ (arg, "child") &&
3874 !STREQ (arg, "both") &&
3875 !STREQ (arg, "ask"))
3876 error ("follow-fork-mode must be one of \"parent\", \"child\", \"both\" or \"ask\".");
3877
3878 if (follow_fork_mode_string != NULL)
3879 free (follow_fork_mode_string);
3880 follow_fork_mode_string = savestring (arg, strlen (arg));
3881}
c5aa993b 3882\f
7a292a7a
SS
3883
3884
7a292a7a
SS
3885static void build_infrun PARAMS ((void));
3886static void
3887build_infrun ()
3888{
3889 stop_registers = xmalloc (REGISTER_BYTES);
3890}
c906108c
SS
3891
3892
3893void
3894_initialize_infrun ()
3895{
3896 register int i;
3897 register int numsigs;
3898 struct cmd_list_element *c;
3899
7a292a7a
SS
3900 build_infrun ();
3901
0f71a2f6
JM
3902 register_gdbarch_swap (&stop_registers, sizeof (stop_registers), NULL);
3903 register_gdbarch_swap (NULL, 0, build_infrun);
3904
c906108c
SS
3905 add_info ("signals", signals_info,
3906 "What debugger does when program gets various signals.\n\
3907Specify a signal as argument to print info on that signal only.");
3908 add_info_alias ("handle", "signals", 0);
3909
3910 add_com ("handle", class_run, handle_command,
3911 concat ("Specify how to handle a signal.\n\
3912Args are signals and actions to apply to those signals.\n\
3913Symbolic signals (e.g. SIGSEGV) are recommended but numeric signals\n\
3914from 1-15 are allowed for compatibility with old versions of GDB.\n\
3915Numeric ranges may be specified with the form LOW-HIGH (e.g. 1-5).\n\
3916The special arg \"all\" is recognized to mean all signals except those\n\
3917used by the debugger, typically SIGTRAP and SIGINT.\n",
3918 "Recognized actions include \"stop\", \"nostop\", \"print\", \"noprint\",\n\
3919\"pass\", \"nopass\", \"ignore\", or \"noignore\".\n\
3920Stop means reenter debugger if this signal happens (implies print).\n\
3921Print means print a message if this signal happens.\n\
3922Pass means let program see this signal; otherwise program doesn't know.\n\
3923Ignore is a synonym for nopass and noignore is a synonym for pass.\n\
3924Pass and Stop may be combined.", NULL));
3925 if (xdb_commands)
3926 {
3927 add_com ("lz", class_info, signals_info,
3928 "What debugger does when program gets various signals.\n\
3929Specify a signal as argument to print info on that signal only.");
3930 add_com ("z", class_run, xdb_handle_command,
3931 concat ("Specify how to handle a signal.\n\
3932Args are signals and actions to apply to those signals.\n\
3933Symbolic signals (e.g. SIGSEGV) are recommended but numeric signals\n\
3934from 1-15 are allowed for compatibility with old versions of GDB.\n\
3935Numeric ranges may be specified with the form LOW-HIGH (e.g. 1-5).\n\
3936The special arg \"all\" is recognized to mean all signals except those\n\
3937used by the debugger, typically SIGTRAP and SIGINT.\n",
3938 "Recognized actions include \"s\" (toggles between stop and nostop), \n\
3939\"r\" (toggles between print and noprint), \"i\" (toggles between pass and \
3940nopass), \"Q\" (noprint)\n\
3941Stop means reenter debugger if this signal happens (implies print).\n\
3942Print means print a message if this signal happens.\n\
3943Pass means let program see this signal; otherwise program doesn't know.\n\
3944Ignore is a synonym for nopass and noignore is a synonym for pass.\n\
3945Pass and Stop may be combined.", NULL));
3946 }
3947
3948 if (!dbx_commands)
3949 stop_command = add_cmd ("stop", class_obscure, not_just_help_class_command,
3950 "There is no `stop' command, but you can set a hook on `stop'.\n\
3951This allows you to set a list of commands to be run each time execution\n\
3952of the program stops.", &cmdlist);
3953
3954 numsigs = (int) TARGET_SIGNAL_LAST;
3955 signal_stop = (unsigned char *)
3956 xmalloc (sizeof (signal_stop[0]) * numsigs);
3957 signal_print = (unsigned char *)
3958 xmalloc (sizeof (signal_print[0]) * numsigs);
3959 signal_program = (unsigned char *)
3960 xmalloc (sizeof (signal_program[0]) * numsigs);
3961 for (i = 0; i < numsigs; i++)
3962 {
3963 signal_stop[i] = 1;
3964 signal_print[i] = 1;
3965 signal_program[i] = 1;
3966 }
3967
3968 /* Signals caused by debugger's own actions
3969 should not be given to the program afterwards. */
3970 signal_program[TARGET_SIGNAL_TRAP] = 0;
3971 signal_program[TARGET_SIGNAL_INT] = 0;
3972
3973 /* Signals that are not errors should not normally enter the debugger. */
3974 signal_stop[TARGET_SIGNAL_ALRM] = 0;
3975 signal_print[TARGET_SIGNAL_ALRM] = 0;
3976 signal_stop[TARGET_SIGNAL_VTALRM] = 0;
3977 signal_print[TARGET_SIGNAL_VTALRM] = 0;
3978 signal_stop[TARGET_SIGNAL_PROF] = 0;
3979 signal_print[TARGET_SIGNAL_PROF] = 0;
3980 signal_stop[TARGET_SIGNAL_CHLD] = 0;
3981 signal_print[TARGET_SIGNAL_CHLD] = 0;
3982 signal_stop[TARGET_SIGNAL_IO] = 0;
3983 signal_print[TARGET_SIGNAL_IO] = 0;
3984 signal_stop[TARGET_SIGNAL_POLL] = 0;
3985 signal_print[TARGET_SIGNAL_POLL] = 0;
3986 signal_stop[TARGET_SIGNAL_URG] = 0;
3987 signal_print[TARGET_SIGNAL_URG] = 0;
3988 signal_stop[TARGET_SIGNAL_WINCH] = 0;
3989 signal_print[TARGET_SIGNAL_WINCH] = 0;
3990
cd0fc7c3
SS
3991 /* These signals are used internally by user-level thread
3992 implementations. (See signal(5) on Solaris.) Like the above
3993 signals, a healthy program receives and handles them as part of
3994 its normal operation. */
3995 signal_stop[TARGET_SIGNAL_LWP] = 0;
3996 signal_print[TARGET_SIGNAL_LWP] = 0;
3997 signal_stop[TARGET_SIGNAL_WAITING] = 0;
3998 signal_print[TARGET_SIGNAL_WAITING] = 0;
3999 signal_stop[TARGET_SIGNAL_CANCEL] = 0;
4000 signal_print[TARGET_SIGNAL_CANCEL] = 0;
4001
c906108c
SS
4002#ifdef SOLIB_ADD
4003 add_show_from_set
4004 (add_set_cmd ("stop-on-solib-events", class_support, var_zinteger,
4005 (char *) &stop_on_solib_events,
4006 "Set stopping for shared library events.\n\
4007If nonzero, gdb will give control to the user when the dynamic linker\n\
4008notifies gdb of shared library events. The most common event of interest\n\
4009to the user would be loading/unloading of a new library.\n",
4010 &setlist),
4011 &showlist);
4012#endif
4013
4014 c = add_set_enum_cmd ("follow-fork-mode",
4015 class_run,
4016 follow_fork_mode_kind_names,
4017 (char *) &follow_fork_mode_string,
4018/* ??rehrauer: The "both" option is broken, by what may be a 10.20
4019 kernel problem. It's also not terribly useful without a GUI to
4020 help the user drive two debuggers. So for now, I'm disabling
4021 the "both" option. */
c5aa993b
JM
4022/* "Set debugger response to a program call of fork \
4023 or vfork.\n\
4024 A fork or vfork creates a new process. follow-fork-mode can be:\n\
4025 parent - the original process is debugged after a fork\n\
4026 child - the new process is debugged after a fork\n\
4027 both - both the parent and child are debugged after a fork\n\
4028 ask - the debugger will ask for one of the above choices\n\
4029 For \"both\", another copy of the debugger will be started to follow\n\
4030 the new child process. The original debugger will continue to follow\n\
4031 the original parent process. To distinguish their prompts, the\n\
4032 debugger copy's prompt will be changed.\n\
4033 For \"parent\" or \"child\", the unfollowed process will run free.\n\
4034 By default, the debugger will follow the parent process.",
4035 */
c906108c
SS
4036 "Set debugger response to a program call of fork \
4037or vfork.\n\
4038A fork or vfork creates a new process. follow-fork-mode can be:\n\
4039 parent - the original process is debugged after a fork\n\
4040 child - the new process is debugged after a fork\n\
4041 ask - the debugger will ask for one of the above choices\n\
4042For \"parent\" or \"child\", the unfollowed process will run free.\n\
4043By default, the debugger will follow the parent process.",
4044 &setlist);
c5aa993b 4045/* c->function.sfunc = ; */
c906108c
SS
4046 add_show_from_set (c, &showlist);
4047
4048 set_follow_fork_mode_command ("parent", 0, NULL);
4049
4050 c = add_set_enum_cmd ("scheduler-locking", class_run,
4051 scheduler_enums, /* array of string names */
4052 (char *) &scheduler_mode, /* current mode */
4053 "Set mode for locking scheduler during execution.\n\
4054off == no locking (threads may preempt at any time)\n\
4055on == full locking (no thread except the current thread may run)\n\
4056step == scheduler locked during every single-step operation.\n\
4057 In this mode, no other thread may run during a step command.\n\
4058 Other threads may run while stepping over a function call ('next').",
4059 &setlist);
4060
4061 c->function.sfunc = set_schedlock_func; /* traps on target vector */
4062 add_show_from_set (c, &showlist);
4063}