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