+2001-07-11 Greg McGary <greg@mcgary.org>
+
+ * gdbserver/remote-utils.c (remote_open): Set gdbserver as "owner"
+ of SIGIO.
+ (input_interrupt): Don't block on read, in case we got redundant
+ SIGIO. Don't gripe about redundant SIGIO.
+ * gdbserver/low-hppabsd.c (mywait): Use waitpid(). Enable SIGIO
+ handler while waiting.
+ * gdbserver/low-linux.c (mywait): Likewise.
+ * gdbserver/low-nbsd.c (mywait): Likewise.
+ * gdbserver/low-sparc.c (mywait): Likewise.
+
2001-07-11 Keith Seitz <keiths@redhat.com>
* infrun.c (print_stop_reason): Add missing uiout field
/* Remote utility routines for the remote server for GDB.
- Copyright 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+ Copyright 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
This file is part of GDB.
#include <sys/ioctl.h>
#include <signal.h>
#include <fcntl.h>
+#include <sys/time.h>
+#include <unistd.h>
int remote_debug = 0;
struct ui_file *gdb_stdlog;
#if defined(F_SETFL) && defined (FASYNC)
save_fcntl_flags = fcntl (remote_desc, F_GETFL, 0);
fcntl (remote_desc, F_SETFL, save_fcntl_flags | FASYNC);
+#endif
+#if defined (F_SETOWN)
+ fcntl (remote_desc, F_SETOWN, getpid ());
+#endif
disable_async_io ();
-#endif /* FASYNC */
fprintf (stderr, "Remote debugging using %s\n", name);
}
static void
input_interrupt (void)
{
- int cc;
- char c;
+ fd_set readset;
+ struct timeval immediate = { 0, 0 };
- cc = read (remote_desc, &c, 1);
+ /* Protect against spurious interrupts. This has been observed to
+ be a problem under NetBSD 1.4 and 1.5. */
- if (cc != 1 || c != '\003')
+ FD_ZERO (&readset);
+ FD_SET (remote_desc, &readset);
+ if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
{
- fprintf (stderr, "input_interrupt, cc = %d c = %d\n", cc, c);
- return;
- }
+ int cc;
+ char c;
+
+ cc = read (remote_desc, &c, 1);
- kill (inferior_pid, SIGINT);
+ if (cc != 1 || c != '\003')
+ {
+ fprintf (stderr, "input_interrupt, cc = %d c = %d\n", cc, c);
+ return;
+ }
+
+ kill (inferior_pid, SIGINT);
+ }
}
void