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