import gdb-1999-07-19 snapshot
[platform/upstream/binutils.git] / gdb / infrun.c
1 /* Target-struct-independent code to start (run) and stop an inferior process.
2    Copyright 1986-1989, 1991-1999 Free Software Foundation, Inc.
3
4    This file is part of GDB.
5
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.
10
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.
15
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.  */
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 */
35 #include "top.h"
36 #include <signal.h>
37 #include "event-loop.h"
38
39 /* Prototypes for local functions */
40
41 static void signals_info PARAMS ((char *, int));
42
43 static void handle_command PARAMS ((char *, int));
44
45 static void sig_print_info PARAMS ((enum target_signal));
46
47 static void sig_print_header PARAMS ((void));
48
49 static void resume_cleanups PARAMS ((int));
50
51 static int hook_stop_stub PARAMS ((PTR));
52
53 static void delete_breakpoint_current_contents PARAMS ((PTR));
54
55 static void set_follow_fork_mode_command PARAMS ((char *arg, int from_tty, struct cmd_list_element * c));
56
57 static void complete_execution PARAMS ((void));
58
59 int inferior_ignoring_startup_exec_events = 0;
60 int inferior_ignoring_leading_exec_events = 0;
61
62 /* In asynchronous mode, but simulating synchronous execution. */
63 int sync_execution = 0;
64
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. */
68 static int switched_from_inferior_pid;
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
78 static 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)
85 #endif
86
87 static int may_follow_exec = MAY_FOLLOW_EXEC;
88
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. */
102 static int thread_step_needed = 0;
103
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
111 static int use_thread_step_needed = USE_THREAD_STEP_NEEDED;
112
113 static void follow_inferior_fork PARAMS ((int parent_pid,
114                                           int child_pid,
115                                           int has_forked,
116                                           int has_vforked));
117
118 static void follow_fork PARAMS ((int parent_pid, int child_pid));
119
120 static void follow_vfork PARAMS ((int parent_pid, int child_pid));
121
122 static void set_schedlock_func PARAMS ((char *args, int from_tty,
123                                         struct cmd_list_element * c));
124
125 static int is_internal_shlib_eventpoint PARAMS ((struct breakpoint * ep));
126
127 static int stopped_for_internal_shlib_event PARAMS ((bpstat bs));
128
129 static int stopped_for_shlib_catchpoint PARAMS ((bpstat bs,
130                                                  struct breakpoint ** cp_p));
131
132 #if __STDC__
133 struct execution_control_state;
134 #endif
135 static int currently_stepping PARAMS ((struct execution_control_state * ecs));
136
137 static void xdb_handle_command PARAMS ((char *args, int from_tty));
138
139 void _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
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
251 /* Tables of how to react to signals; the user sets them.  */
252
253 static unsigned char *signal_stop;
254 static unsigned char *signal_print;
255 static 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
276 static struct cmd_list_element *stop_command;
277
278 /* Nonzero if breakpoints are now inserted in the inferior.  */
279
280 static int breakpoints_inserted;
281
282 /* Function inferior was in as of last step command.  */
283
284 static struct symbol *step_start_function;
285
286 /* Nonzero if we are expecting a trace trap and should proceed from it.  */
287
288 static 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.  */
293 static 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
301 static 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
307 int 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
314 int 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
319 int 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
326 char *stop_registers;
327
328 /* Nonzero if program stopped due to error trying to insert breakpoints.  */
329
330 static int breakpoints_failed;
331
332 /* Nonzero after stop if current stack frame should be printed.  */
333
334 static int stop_print_frame;
335
336 static struct breakpoint *step_resume_breakpoint = NULL;
337 static 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. */
345 static 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. */
351 static 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   }
365 pending_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.) */
380 static int follow_vfork_when_exec;
381
382 static 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.
388    "parent", "child", "both", "ask" };
389  */
390   "parent", "child", "ask"};
391
392 static char *follow_fork_mode_string = NULL;
393 \f
394
395 static void
396 follow_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);
435 #ifdef SOLIB_REMOVE_INFERIOR_HOOK
436           SOLIB_REMOVE_INFERIOR_HOOK (child_pid);
437 #endif
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. */
469 #ifdef SOLIB_REMOVE_INFERIOR_HOOK
470       SOLIB_REMOVE_INFERIOR_HOOK (inferior_pid);
471 #endif
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
515          involvement with child_pid; our clone will take it from here... */
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
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 */
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
570 static void
571 follow_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. */
580 static void follow_exec PARAMS ((int, char *));
581
582 static void
583 follow_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 }
598
599 static void
600 follow_exec (pid, execd_pathname)
601      int pid;
602      char *execd_pathname;
603 {
604   int saved_pid = pid;
605   struct target_ops *tgt;
606
607   if (!may_follow_exec)
608     return;
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. */
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
669   gdb_flush (gdb_stdout);
670   target_mourn_inferior ();
671   inferior_pid = saved_pid;     /* Because mourn_inferior resets inferior_pid. */
672   push_target (tgt);
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. */
683 #if defined(SOLIB_RESTART)
684   SOLIB_RESTART ();
685 #endif
686 #ifdef SOLIB_CREATE_INFERIOR_HOOK
687   SOLIB_CREATE_INFERIOR_HOOK (inferior_pid);
688 #endif
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.) */
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'.  */
704 static int singlestep_breakpoints_inserted_p = 0;
705 \f
706
707 /* Things to clean up if we QUIT out of resume ().  */
708 /* ARGSUSED */
709 static void
710 resume_cleanups (arg)
711      int arg;
712 {
713   normal_stop ();
714 }
715
716 static char schedlock_off[] = "off";
717 static char schedlock_on[] = "on";
718 static char schedlock_step[] = "step";
719 static char *scheduler_mode = schedlock_off;
720 static char *scheduler_enums[] =
721 {schedlock_off, schedlock_on, schedlock_step};
722
723 static void
724 set_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).  */
747 void
748 resume (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 */
768       SOFTWARE_SINGLE_STEP (sig, 1 /*insert-breakpoints */ );
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
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?
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. */
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
809          an exec, then now might be the time! */
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     }
817
818   /* Install inferior's terminal modes.  */
819   target_terminal_inferior ();
820
821   if (should_resume)
822     {
823       if (use_thread_step_needed && thread_step_needed)
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
833                  where all the threads either step or continue. */
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
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
869 void
870 clear_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,
890    or -1 for act according to how it stopped.
891    STEP is nonzero if should trap after one instruction.
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.
895
896    You should call clear_proceed_status before calling proceed.  */
897
898 void
899 proceed (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,
914          step one instruction before inserting breakpoints
915          so that we do not stop right away (and report a second
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
926          (it just checks internal GDB data structures) and STEP_SKIPS_DELAY
927          is slow (it needs to read memory from the target).  */
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
938          over a breakpoint we just hit, 'cause we aren't
939          continuing from there.
940
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? */
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. */
960   if (PREPARE_TO_PROCEED (1) && breakpoint_here_p (read_pc ()))
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
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.  */
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\
991 The 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.  */
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     }
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.  */
1028 static CORE_ADDR prev_pc;
1029 static CORE_ADDR prev_func_start;
1030 static char *prev_func_name;
1031 \f
1032
1033 /* Start remote-debugging of a machine over a serial link.  */
1034 void
1035 start_remote ()
1036 {
1037   init_thread_list ();
1038   init_wait_for_inferior ();
1039   stop_soon_quietly = 1;
1040   trap_expected = 0;
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,
1052          i.e. display the prompt only once it has connected and
1053          started the target. */
1054       sync_execution = 1;
1055       push_prompt ("", "", "");
1056       delete_file_handler (input_fd);
1057       target_executing = 1;
1058     }
1059 }
1060
1061 /* Initialize static vars when a new inferior begins.  */
1062
1063 void
1064 init_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
1092 static void
1093 delete_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
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
1108 enum infwait_states
1109 {
1110   infwait_normal_state,
1111   infwait_thread_hop_state,
1112   infwait_nullified_state,
1113   infwait_nonstep_watch_state
1114 };
1115
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
1120 struct 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
1148 void init_execution_control_state PARAMS ((struct execution_control_state * ecs));
1149
1150 void handle_inferior_event PARAMS ((struct execution_control_state * ecs));
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
1158 void
1159 wait_for_inferior ()
1160 {
1161   struct cleanup *old_cleanups;
1162   struct execution_control_state ecss;
1163   struct execution_control_state *ecs;
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);
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
1177   thread_step_needed = 0;
1178
1179   /* We'll update this if & when we switch to a new thread. */
1180   if (may_switch_from_inferior_pid)
1181     switched_from_inferior_pid = inferior_pid;
1182
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 ();
1192
1193   while (1)
1194     {
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);
1199
1200       /* Now figure out what to do with the result of the result.  */
1201       handle_inferior_event (ecs);
1202
1203       if (!ecs->wait_some_more)
1204         break;
1205     }
1206   do_cleanups (old_cleanups);
1207 }
1208
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
1218 struct execution_control_state async_ecss;
1219 struct execution_control_state *async_ecs;
1220
1221 void
1222 fetch_inferior_event ()
1223 {
1224   static struct cleanup *old_cleanups;
1225
1226   async_ecs = &async_ecss;
1227
1228   if (!async_ecs->wait_some_more)
1229     {
1230       old_cleanups = make_exec_cleanup (delete_breakpoint_current_contents,
1231                                         &step_resume_breakpoint);
1232       make_exec_cleanup (delete_breakpoint_current_contents,
1233                          &through_sigtramp_breakpoint);
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
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. */
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     {
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. */
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
1278 /* Prepare an execution control state for looping through a
1279    wait_for_inferior-type loop.  */
1280
1281 void
1282 init_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.  */
1304
1305 void
1306 handle_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   {
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;
1331
1332       case infwait_thread_hop_state:
1333         insert_breakpoints ();
1334
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;
1345
1346       case infwait_nullified_state:
1347         break;
1348
1349       case infwait_nonstep_watch_state:
1350         insert_breakpoints ();
1351
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;
1359
1360     flush_cached_frames ();
1361
1362     /* If it's a new process, add it to the thread database */
1363
1364     ecs->new_thread_event = ((ecs->pid != inferior_pid) && !in_thread_list (ecs->pid));
1365
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);
1371
1372         printf_filtered ("[New %s]\n", target_pid_or_tid_to_str (ecs->pid));
1373
1374 #if 0
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;
1396 #endif
1397       }
1398
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.  */
1405 #ifdef SOLIB_ADD
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 ();
1412
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               }
1423
1424             /* Reinsert breakpoints and continue.  */
1425             if (breakpoints_inserted)
1426               insert_breakpoints ();
1427           }
1428 #endif
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           }
1507
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           }
1545
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           }
1562
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;
1591
1592         pending_follow.execd_pathname = savestring (ecs->ws.value.execd_pathname,
1593                                      strlen (ecs->ws.value.execd_pathname));
1594
1595         /* Did inferior_pid exec, or did a (possibly not-yet-followed)
1596            child of a vfork exec?
1597
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.
1603
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".
1607
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           }
1623
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;
1668
1669         /* Before examining the threads further, step this thread to
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.
1680            Thus, we simply set the flag ecs->enable_hw_watchpoints_after_wait
1681            here, which will be serviced immediately after the target
1682            is waited on. */
1683       case TARGET_WAITKIND_SYSCALL_RETURN:
1684         target_resume (ecs->pid, 1, TARGET_SIGNAL_0);
1685
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;
1693
1694       case TARGET_WAITKIND_STOPPED:
1695         stop_signal = ecs->ws.value.sig;
1696         break;
1697       }
1698
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.  */
1702
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       }
1711
1712     stop_pc = read_pc_pid (ecs->pid);
1713
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.  */
1717
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           {
1725             ecs->random_signal = 0;
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;
1756                     goto wfi_continue;
1757                   }
1758
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;
1793
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           {
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
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);
1816 #endif
1817           }
1818
1819         /* If it's not SIGTRAP and not a signal we want to stop for, then
1820            continue the thread. */
1821
1822         if (stop_signal != TARGET_SIGNAL_TRAP
1823             && !signal_stop[stop_signal])
1824           {
1825             if (printed)
1826               target_terminal_inferior ();
1827
1828             /* Clear the signal if it should not be passed.  */
1829             if (signal_program[stop_signal] == 0)
1830               stop_signal = TARGET_SIGNAL_0;
1831
1832             target_resume (ecs->pid, 0, stop_signal);
1833             goto wfi_continue;
1834           }
1835
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       }
1874
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       }
1881
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. */
1885
1886     /*      if (INSTRUCTION_NULLIFIED && currently_stepping (ecs)) */
1887     if (INSTRUCTION_NULLIFIED)
1888       {
1889         registers_changed ();
1890         target_resume (ecs->pid, 1, TARGET_SIGNAL_0);
1891
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. */
1895
1896         ecs->infwait_state = infwait_nullified_state;
1897         ecs->waiton_pid = ecs->pid;
1898         ecs->wp = &(ecs->tmpstatus);
1899         goto wfi_continue;
1900       }
1901
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       }
1910
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       }
1944
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;
1991             goto wfi_break;
1992           }
1993         if (stop_soon_quietly)
1994           goto wfi_break;
1995
1996         /* Don't even think about breakpoints
1997            if just proceeded over a breakpoint.
1998
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           }
2032
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           {
2044             ecs->random_signal
2045               = !(bpstat_explains_signal (stop_bpstat)
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.  */
2049                   || (!CALL_DUMMY_BREAKPOINT_OFFSET_P
2050                       && PC_IN_CALL_DUMMY (stop_pc, read_sp (),
2051                                            FRAME_FP (get_current_frame ())))
2052               );
2053             if (!ecs->random_signal)
2054               stop_signal = TARGET_SIGNAL_TRAP;
2055           }
2056       }
2057
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       }
2108
2109     /* For the program's own signals, act according to
2110        the signal handling tables.  */
2111
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)
2166         {
2167           stop_stack_dummy = 1;
2168 #ifdef HP_OS_BUG
2169           trap_expected_after_continue = 1;
2170 #endif
2171         }
2172
2173       switch (what.main_action)
2174         {
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)
2188             {
2189               delete_breakpoint (step_resume_breakpoint);
2190               step_resume_breakpoint = NULL;
2191             }
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)
2195             {
2196               delete_breakpoint (through_sigtramp_breakpoint);
2197               through_sigtramp_breakpoint = NULL;
2198             }
2199
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;
2210
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 */
2230
2231         case BPSTAT_WHAT_SINGLE:
2232           if (breakpoints_inserted)
2233             {
2234               thread_step_needed = 1;
2235               remove_breakpoints ();
2236             }
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;
2242
2243         case BPSTAT_WHAT_STOP_NOISY:
2244           stop_print_frame = 1;
2245
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.  */
2249
2250           goto stop_stepping;
2251
2252         case BPSTAT_WHAT_STOP_SILENT:
2253           stop_print_frame = 0;
2254
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.  */
2258
2259           goto stop_stepping;
2260
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;
2293
2294         case BPSTAT_WHAT_CHECK_SHLIBS:
2295         case BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK:
2296 #ifdef SOLIB_ADD
2297           {
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 ();
2303             breakpoints_inserted = 0;
2304
2305             /* Check for any newly added shared libraries if we're
2306                supposed to be adding them automatically.  */
2307             if (auto_solib_add)
2308               {
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 ();
2314               }
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)
2325               {
2326                 stop_print_frame = 0;
2327                 goto stop_stepping;
2328               }
2329
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
2364               {
2365                 /* We want to step over this breakpoint, then keep going.  */
2366                 ecs->another_trap = 1;
2367                 break;
2368               }
2369           }
2370 #endif
2371           break;
2372
2373         case BPSTAT_WHAT_LAST:
2374           /* Not a real code, but listed here to shut up gcc -Wall.  */
2375
2376         case BPSTAT_WHAT_KEEP_CHECKING:
2377           break;
2378         }
2379     }
2380
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.  */
2386
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       }
2409
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           {
2425             stop_print_frame = 0;
2426             stop_stack_dummy = 1;
2427 #ifdef HP_OS_BUG
2428             trap_expected_after_continue = 1;
2429 #endif
2430             goto wfi_break;
2431           }
2432       }
2433
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       }
2460
2461     /* We stepped out of the stepping range.  */
2462
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;
2469
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;
2474
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.  */
2482
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 */
2489
2490
2491         {
2492           CORE_ADDR current_frame = FRAME_FP (get_current_frame ());
2493
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.  */
2498
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).  */
2502
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;
2508
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 ();
2520             }
2521           else
2522             {
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;
2542             }
2543         }
2544
2545
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;
2553
2554         ecs->remove_breakpoints_on_following_step = 1;
2555         goto keep_going;
2556       }
2557
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.  */
2565
2566         if (step_over_calls == 0)
2567           {
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           }
2574
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)
2591               {
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);
2598                 step_resume_breakpoint =
2599                   set_momentary_breakpoint (xxx, NULL, bp_step_resume);
2600                 insert_breakpoints ();
2601                 goto keep_going;
2602               }
2603           }
2604
2605         /* If we have line number information for the function we
2606            are thinking of stepping into, step into it.
2607
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;
2613
2614           tmp_sal = find_pc_line (ecs->stop_func_start, 0);
2615           if (tmp_sal.line != 0)
2616             goto step_into_function;
2617         }
2618
2619       step_over_function:
2620         /* A subroutine call has happened.  */
2621         {
2622           /* Set a special breakpoint after the return */
2623           struct symtab_and_line sr_sal;
2624
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)
2662             {
2663               step_resume_breakpoint->frame = (CORE_ADDR) NULL;
2664               ecs->stepping_through_sigtramp = 0;
2665             }
2666           else if (!IN_SOLIB_DYNSYM_RESOLVE_CODE (sr_sal.pc))
2667             step_resume_breakpoint->frame = step_frame_address;
2668
2669           if (breakpoints_inserted)
2670             insert_breakpoints ();
2671         }
2672         goto keep_going;
2673
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;
2679
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
2698
2699         if (ecs->stop_func_start == stop_pc)
2700           {
2701             /* We are already there: stop now.  */
2702             stop_step = 1;
2703             goto wfi_break;
2704           }
2705         else
2706           /* Put the step-breakpoint there and go until there. */
2707           {
2708             struct symtab_and_line sr_sal;
2709
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.  */
2716             step_resume_breakpoint =
2717               set_momentary_breakpoint (sr_sal, NULL, bp_step_resume);
2718             if (breakpoints_inserted)
2719               insert_breakpoints ();
2720
2721             /* And make sure stepping stops right away then.  */
2722             step_range_end = step_range_start;
2723           }
2724         goto keep_going;
2725       }
2726
2727     /* We've wandered out of the step range.  */
2728
2729     ecs->sal = find_pc_line (stop_pc, 0);
2730
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       }
2738
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;
2744
2745         /* Determine where this trampoline returns.  */
2746         tmp = SKIP_TRAMPOLINE_CODE (stop_pc);
2747
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;
2753
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 ();
2764
2765             /* Restart without fiddling with the step ranges or
2766                other state.  */
2767             goto keep_going;
2768           }
2769       }
2770
2771     if (ecs->sal.line == 0)
2772       {
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;
2779       }
2780
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       }
2791
2792     /* We aren't done stepping.
2793
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.)  */
2798
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     }
2823
2824
2825     goto keep_going;
2826
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 ();
2855
2856         ecs->remove_breakpoints_on_following_step = 1;
2857         ecs->another_trap = 1;
2858       }
2859
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           }
2930
2931         trap_expected = ecs->another_trap;
2932
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).
2936
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. */
2945
2946         if (stop_signal == TARGET_SIGNAL_TRAP
2947             && !signal_program[stop_signal])
2948           stop_signal = TARGET_SIGNAL_0;
2949
2950 #ifdef SHIFT_INST_REGS
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 ();
2961 #endif /* SHIFT_INST_REGS */
2962
2963         resume (currently_stepping (ecs), stop_signal);
2964       }
2965
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;
2972
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. */
2978
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   }
2989
2990   /* Former breaks in the main loop goto here.  */
2991 wfi_break:
2992
2993 stop_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)
3012                 parent_pid = target_wait_hook (-1, &(ecs->ws));
3013               else
3014                 parent_pid = target_wait (-1, &(ecs->ws));
3015             }
3016           while (parent_pid != inferior_pid);
3017         }
3018
3019       /* Assuming the inferior still exists, set these up for next
3020          time, just like we did above if we didn't break out of the
3021          loop.  */
3022       prev_pc = read_pc ();
3023       prev_func_start = ecs->stop_func_start;
3024       prev_func_name = ecs->stop_func_name;
3025     }
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
3032 static int
3033 currently_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 ());
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.) */
3050 static int
3051 is_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. */
3062 static int
3063 stopped_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. */
3086 static int
3087 stopped_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
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. */
3113 static void
3114 complete_execution ()
3115 {
3116   extern cleanup_sigint_signal_handler PARAMS ((void));
3117
3118   target_executing = 0;
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     }
3127 }
3128
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
3137 void
3138 normal_stop ()
3139 {
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!) */
3146   if (may_switch_from_inferior_pid
3147       && (switched_from_inferior_pid != inferior_pid)
3148       && target_has_execution)
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     }
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\
3167 The 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
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. */
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:
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 */
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
3283          can use that next. */
3284       POP_FRAME;
3285       /* Set stop_pc to what it was before we called the function.
3286          Can't rely on restore_inferior_status because that only gets
3287          called if we don't stop in the called function.  */
3288       stop_pc = read_pc ();
3289       select_frame (get_current_frame (), 0);
3290     }
3291
3292
3293   TUIDO (((TuiOpaqueFuncPtr) tui_vCheckDataValues, selected_frame));
3294
3295 done:
3296   annotate_stopped ();
3297 }
3298
3299 static int
3300 hook_stop_stub (cmd)
3301      PTR cmd;
3302 {
3303   execute_user_command ((struct cmd_list_element *) cmd, 0);
3304   return (0);
3305 }
3306 \f
3307 int
3308 signal_stop_state (signo)
3309      int signo;
3310 {
3311   return signal_stop[signo];
3312 }
3313
3314 int
3315 signal_print_state (signo)
3316      int signo;
3317 {
3318   return signal_print[signo];
3319 }
3320
3321 int
3322 signal_pass_state (signo)
3323      int signo;
3324 {
3325   return signal_program[signo];
3326 }
3327
3328 static void
3329 sig_print_header ()
3330 {
3331   printf_filtered ("\
3332 Signal        Stop\tPrint\tPass to program\tDescription\n");
3333 }
3334
3335 static void
3336 sig_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
3355 static void
3356 handle_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     }
3387   old_chain = make_cleanup_freeargv (argv);
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
3483          which signals to apply actions to. */
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\
3494 Are 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
3539 static void
3540 xdb_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     }
3554   old_chain = make_cleanup_freeargv (argv);
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
3613 static void
3614 signals_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
3652 struct 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
3683 static struct inferior_status *xmalloc_inferior_status PARAMS ((void));
3684 static struct inferior_status *
3685 xmalloc_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
3694 static void free_inferior_status PARAMS ((struct inferior_status *));
3695 static void
3696 free_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
3704 void
3705 write_inferior_status_register (inf_status, regno, val)
3706      struct inferior_status *inf_status;
3707      int regno;
3708      LONGEST val;
3709 {
3710   int size = REGISTER_RAW_SIZE (regno);
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
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
3722 struct inferior_status *
3723 save_inferior_status (restore_stack_info)
3724      int restore_stack_info;
3725 {
3726   struct inferior_status *inf_status = xmalloc_inferior_status ();
3727
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
3742      hand them back the original chain when restore_inferior_status is
3743      called.  */
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;
3749
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));
3756   return inf_status;
3757 }
3758
3759 struct restore_selected_frame_args
3760 {
3761   CORE_ADDR frame_address;
3762   int level;
3763 };
3764
3765 static int restore_selected_frame PARAMS ((PTR));
3766
3767 static int
3768 restore_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
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.
3786
3787      mvs: this worries me.  */
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
3799 void
3800 restore_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
3820   /* FIXME: Is the restore of stop_registers always needed */
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
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,
3841          walking the stack might encounter a garbage pointer and error()
3842          trying to dereference it.  */
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     }
3853
3854   free_inferior_status (inf_status);
3855 }
3856
3857 void
3858 discard_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
3866 static void
3867 set_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 }
3882 \f
3883
3884
3885 static void build_infrun PARAMS ((void));
3886 static void
3887 build_infrun ()
3888 {
3889   stop_registers = xmalloc (REGISTER_BYTES);
3890 }
3891
3892
3893 void
3894 _initialize_infrun ()
3895 {
3896   register int i;
3897   register int numsigs;
3898   struct cmd_list_element *c;
3899
3900   build_infrun ();
3901
3902   register_gdbarch_swap (&stop_registers, sizeof (stop_registers), NULL);
3903   register_gdbarch_swap (NULL, 0, build_infrun);
3904
3905   add_info ("signals", signals_info,
3906             "What debugger does when program gets various signals.\n\
3907 Specify 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\
3912 Args are signals and actions to apply to those signals.\n\
3913 Symbolic signals (e.g. SIGSEGV) are recommended but numeric signals\n\
3914 from 1-15 are allowed for compatibility with old versions of GDB.\n\
3915 Numeric ranges may be specified with the form LOW-HIGH (e.g. 1-5).\n\
3916 The special arg \"all\" is recognized to mean all signals except those\n\
3917 used by the debugger, typically SIGTRAP and SIGINT.\n",
3918                    "Recognized actions include \"stop\", \"nostop\", \"print\", \"noprint\",\n\
3919 \"pass\", \"nopass\", \"ignore\", or \"noignore\".\n\
3920 Stop means reenter debugger if this signal happens (implies print).\n\
3921 Print means print a message if this signal happens.\n\
3922 Pass means let program see this signal; otherwise program doesn't know.\n\
3923 Ignore is a synonym for nopass and noignore is a synonym for pass.\n\
3924 Pass 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\
3929 Specify 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\
3932 Args are signals and actions to apply to those signals.\n\
3933 Symbolic signals (e.g. SIGSEGV) are recommended but numeric signals\n\
3934 from 1-15 are allowed for compatibility with old versions of GDB.\n\
3935 Numeric ranges may be specified with the form LOW-HIGH (e.g. 1-5).\n\
3936 The special arg \"all\" is recognized to mean all signals except those\n\
3937 used 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 \
3940 nopass), \"Q\" (noprint)\n\
3941 Stop means reenter debugger if this signal happens (implies print).\n\
3942 Print means print a message if this signal happens.\n\
3943 Pass means let program see this signal; otherwise program doesn't know.\n\
3944 Ignore is a synonym for nopass and noignore is a synonym for pass.\n\
3945 Pass 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\
3951 This allows you to set a list of commands to be run each time execution\n\
3952 of 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
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
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\
4007 If nonzero, gdb will give control to the user when the dynamic linker\n\
4008 notifies gdb of shared library events.  The most common event of interest\n\
4009 to 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.  */
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  */
4036                         "Set debugger response to a program call of fork \
4037 or vfork.\n\
4038 A 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\
4042 For \"parent\" or \"child\", the unfollowed process will run free.\n\
4043 By default, the debugger will follow the parent process.",
4044                         &setlist);
4045 /*  c->function.sfunc = ; */
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\
4054 off  == no locking (threads may preempt at any time)\n\
4055 on   == full locking (no thread except the current thread may run)\n\
4056 step == 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 }