diff options
author | Stu Grossman <grossman@cygnus> | 1996-05-06 21:27:37 +0000 |
---|---|---|
committer | Stu Grossman <grossman@cygnus> | 1996-05-06 21:27:37 +0000 |
commit | 8fc2b4170d265de393242b325b4ff76f51c52555 (patch) | |
tree | e19352114da659be8fbb01723a2acb00e8384597 /gdb/infrun.c | |
parent | 1ed0c0e75db12ea291a4bfef18fc6e59243ba52a (diff) | |
download | gdb-8fc2b4170d265de393242b325b4ff76f51c52555.zip gdb-8fc2b4170d265de393242b325b4ff76f51c52555.tar.gz gdb-8fc2b4170d265de393242b325b4ff76f51c52555.tar.bz2 |
* fork-child.c (fork_inferior), inferior.h: init_trace_fun now
returns a possibly modified pid.
* inftarg.c (ptrace_him): Now returns pid;
* m3-nat.c (m3_trace_him): Now returns pid;
* infcmd.c (run_command): Minor cleanup.
* infrun.c (wait_for_inferior): Add another check for one_stepped
near where we read the pc to avoid erroneously setting
random_signal for multi-threaded support.
* procfs.c: Add support for Solaris LWPs. Remove def of
LOSING_POLL. Many cleanups... Several workarounds for Solaris
lossage. System call entry and exit are now handled by
dynamically registered handlers.
* (syscallname): Don't barf when handed an unknown syscall
number.
* (info_proc_syscalls): Ditto.
* sol-thread.c: New file. Implements Solaris thread support.
* symfile.c (symbol_file_add): Add call to target_new_objfile to
notify target-dependent code about new symbol tables.
* (clear_symtab_users): Call target_new_objfile to notify it of
the removal of all symbol tables.
* target.c (push_target): Make sure that to_close is non-zero
before calling it.
* target.h (target_new_objfile): Provide default.
* config/alpha/nm-osf2.h: Define LOSING_POLL because this version
of OSF can't hack using poll with /proc.
* config/sparc/nm-sun4sol2.h (target_new_objfile): Define to be
sol-thread-new-objfile.
* config/sparc/sun4sol2.mh: Add sol-thread.o to NATDEFFILES, and
add libthread_db.so.1 to NAT_CLIBS.
* config/sparc/tm-sun4sol2.h: Define PIDGET, TIDGET, and
target_pid_to_str.
Diffstat (limited to 'gdb/infrun.c')
-rw-r--r-- | gdb/infrun.c | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/gdb/infrun.c b/gdb/infrun.c index 80cb5ba..ee41c09 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -614,31 +614,38 @@ wait_for_inferior () another thread. If so, then step that thread past the breakpoint, and continue it. */ - if (stop_signal == TARGET_SIGNAL_TRAP - && breakpoints_inserted - && breakpoint_here_p (stop_pc - DECR_PC_AFTER_BREAK)) + if (stop_signal == TARGET_SIGNAL_TRAP) { - random_signal = 0; - if (!breakpoint_thread_match (stop_pc - DECR_PC_AFTER_BREAK, pid)) - { - /* Saw a breakpoint, but it was hit by the wrong thread. Just continue. */ - write_pc_pid (stop_pc - DECR_PC_AFTER_BREAK, pid); +#ifdef NO_SINGLE_STEP + if (one_stepped) + random_signal = 0; + else +#endif + if (breakpoints_inserted + && breakpoint_here_p (stop_pc - DECR_PC_AFTER_BREAK)) + { + random_signal = 0; + if (!breakpoint_thread_match (stop_pc - DECR_PC_AFTER_BREAK, pid)) + { + /* Saw a breakpoint, but it was hit by the wrong thread. Just continue. */ + write_pc_pid (stop_pc - DECR_PC_AFTER_BREAK, pid); - remove_breakpoints (); - target_resume (pid, 1, TARGET_SIGNAL_0); /* Single step */ - /* FIXME: What if a signal arrives instead of the single-step - happening? */ + remove_breakpoints (); + target_resume (pid, 1, TARGET_SIGNAL_0); /* Single step */ + /* FIXME: What if a signal arrives instead of the single-step + happening? */ - if (target_wait_hook) - target_wait_hook (pid, &w); - else - target_wait (pid, &w); - insert_breakpoints (); + if (target_wait_hook) + target_wait_hook (pid, &w); + else + target_wait (pid, &w); + insert_breakpoints (); - /* We need to restart all the threads now. */ - target_resume (-1, 0, TARGET_SIGNAL_0); - continue; - } + /* We need to restart all the threads now. */ + target_resume (-1, 0, TARGET_SIGNAL_0); + continue; + } + } } else random_signal = 1; |