aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver/gdbreplay.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2006-07-23 03:52:15 +0000
committerDaniel Jacobowitz <drow@false.org>2006-07-23 03:52:15 +0000
commitb80864fbe54e0280d6cd040b0ede0568dd66d90f (patch)
treecd09718cd52c0dd8bdfe7e6cf2bfad8217dfa674 /gdb/gdbserver/gdbreplay.c
parent66a79c16a65742d14f5991b596541276245d24ba (diff)
downloadgdb-b80864fbe54e0280d6cd040b0ede0568dd66d90f.zip
gdb-b80864fbe54e0280d6cd040b0ede0568dd66d90f.tar.gz
gdb-b80864fbe54e0280d6cd040b0ede0568dd66d90f.tar.bz2
gdb/
* configure.tgt: Build gdbserver for Cygwin and mingw32. gdb/gdbserver/ * configure.ac: Check for more headers which are missing on Windows. Automatically supply -lwsock32 and USE_WIN32API. * configure.srv: Add Cygwin and mingw32. * remote-utils.c: Don't include headers unconditionally which are missing on mingw32. Include <winsock.h> for mingw32. (remote_open): Adjust for mingw32 support. Flush standard error after writing to it. (remote_close, putpkt_binary, input_interrupt, block_async_io) (unblock_async_io, enable_async_io, disable_async_io) (readchar, getpkt): Update for Winsock support. (prepare_resume_reply): Expect a protocol signal number. * server.c: Disable <sys/wait.h> on mingw32. (start_inferior): Adjust for mingw32 support. Flush standard error after writing to it. (attach_inferior): Likewise. Use protocol signal numbers. (main): Skip 'D' packet on mingw32. Use protocol signal numbers and names. * win32-i386-low.c: New file. * Makefile.in (XM_CLIBS): Set. (gdbserver, gdbreplay): Use $(INTERNAL_CFLAGS). (win32-i386-low.o): New dependency rule. * linux-low.c (linux_wait): Use target signal numbers. * target.h (struct target_ops): Doc fix. * server.h (target_signal_to_name): New prototype. * gdbreplay.c: Don't include headers unconditionally which are missing on mingw32. Include <winsock.h> for mingw32. (remote_close, remote_open): Adjust for Winsock support. * configure, config.in: Regenerated.
Diffstat (limited to 'gdb/gdbserver/gdbreplay.c')
-rw-r--r--gdb/gdbserver/gdbreplay.c47
1 files changed, 42 insertions, 5 deletions
diff --git a/gdb/gdbserver/gdbreplay.c b/gdb/gdbserver/gdbreplay.c
index 7b3a7e9..34d55bf 100644
--- a/gdb/gdbserver/gdbreplay.c
+++ b/gdb/gdbserver/gdbreplay.c
@@ -1,5 +1,5 @@
/* Replay a remote debug session logfile for GDB.
- Copyright (C) 1996, 1998, 1999, 2000, 2002, 2003, 2005
+ Copyright (C) 1996, 1998, 1999, 2000, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
Written by Fred Fish (fnf@cygnus.com) from pieces of gdbserver.
@@ -23,10 +23,6 @@
#include "config.h"
#include <stdio.h>
#include <sys/file.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <netinet/tcp.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
@@ -41,6 +37,22 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#if HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#if HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
+
+#if USE_WIN32API
+#include <winsock.h>
+#endif
#ifndef HAVE_SOCKLEN_T
typedef int socklen_t;
@@ -90,7 +102,11 @@ sync_error (FILE *fp, char *desc, int expect, int got)
static void
remote_close (void)
{
+#ifdef USE_WIN32API
+ closesocket (remote_desc);
+#else
close (remote_desc);
+#endif
}
/* Open a connection to a remote debugger.
@@ -107,6 +123,9 @@ remote_open (char *name)
}
else
{
+#ifdef USE_WIN32API
+ static int winsock_initialized;
+#endif
char *port_str;
int port;
struct sockaddr_in sockaddr;
@@ -117,6 +136,16 @@ remote_open (char *name)
port = atoi (port_str + 1);
+#ifdef USE_WIN32API
+ if (!winsock_initialized)
+ {
+ WSADATA wsad;
+
+ WSAStartup (MAKEWORD (1, 0), &wsad);
+ winsock_initialized = 1;
+ }
+#endif
+
tmp_desc = socket (PF_INET, SOCK_STREAM, 0);
if (tmp_desc < 0)
perror_with_name ("Can't open socket");
@@ -151,11 +180,19 @@ remote_open (char *name)
close (tmp_desc); /* No longer need this */
+#ifndef USE_WIN32API
+ close (tmp_desc); /* No longer need this */
+
signal (SIGPIPE, SIG_IGN); /* If we don't do this, then gdbreplay simply
exits when the remote side dies. */
+#else
+ closesocket (tmp_desc); /* No longer need this */
+#endif
}
+#if defined(F_SETFL) && defined (FASYNC)
fcntl (remote_desc, F_SETFL, FASYNC);
+#endif
fprintf (stderr, "Replay logfile using %s\n", name);
fflush (stderr);