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