X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbserver%2Fgdbreplay.c;h=1f823e0addc59eee8c621d158d189ea8ddeb9e6c;hb=a3d08894e544f6b9e65581469cbbafbe39a353fe;hp=a128413c478c0669cb55412245b696a9a4a67722;hpb=12ea4b698643d57c73ac153d8b87adf2db0e8bd8;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbserver/gdbreplay.c b/gdb/gdbserver/gdbreplay.c index a128413c47..1f823e0add 100644 --- a/gdb/gdbserver/gdbreplay.c +++ b/gdb/gdbserver/gdbreplay.c @@ -1,6 +1,5 @@ /* Replay a remote debug session logfile for GDB. - Copyright (C) 1996, 1998, 1999, 2000, 2002, 2003, 2005, 2006, 2007, 2008, - 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1996-2013 Free Software Foundation, Inc. Written by Fred Fish (fnf@cygnus.com) from pieces of gdbserver. This file is part of GDB. @@ -19,6 +18,9 @@ along with this program. If not, see . */ #include "config.h" +#include "build-gnulib-gdbserver/config.h" +#include "version.h" + #include #if HAVE_SYS_FILE_H #include @@ -36,12 +38,8 @@ #ifdef HAVE_STDLIB_H #include #endif -#ifdef HAVE_STRING_H #include -#endif -#ifdef HAVE_UNISTD_H #include -#endif #ifdef HAVE_NETINET_IN_H #include #endif @@ -54,10 +52,12 @@ #if HAVE_NETINET_TCP_H #include #endif +#if HAVE_ALLOCA_H +#include +#endif #if HAVE_MALLOC_H #include #endif - #if USE_WIN32API #include #endif @@ -69,10 +69,6 @@ typedef int socklen_t; /* Sort of a hack... */ #define EOL (EOF - 1) -/* Version information, from version.c. */ -extern const char version[]; -extern const char host_name[]; - static int remote_desc; #ifdef __MINGW32CE__ @@ -162,6 +158,14 @@ sync_error (FILE *fp, char *desc, int expect, int got) exit (1); } +static void +remote_error (const char *desc) +{ + fprintf (stderr, "\n%s\n", desc); + fflush (stderr); + exit (1); +} + static void remote_close (void) { @@ -210,7 +214,7 @@ remote_open (char *name) #endif tmp_desc = socket (PF_INET, SOCK_STREAM, 0); - if (tmp_desc < 0) + if (tmp_desc == -1) perror_with_name ("Can't open socket"); /* Allow rapid reuse of this port. */ @@ -233,7 +237,8 @@ remote_open (char *name) /* Enable TCP keep alive process. */ tmp = 1; - setsockopt (tmp_desc, SOL_SOCKET, SO_KEEPALIVE, (char *) &tmp, sizeof (tmp)); + setsockopt (tmp_desc, SOL_SOCKET, SO_KEEPALIVE, + (char *) &tmp, sizeof (tmp)); /* Tell TCP not to delay small packets. This greatly speeds up interactive response. */ @@ -244,8 +249,9 @@ remote_open (char *name) #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. */ + 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 @@ -339,6 +345,17 @@ logchar (FILE *fp) return (ch); } +static int +gdbchar (int desc) +{ + unsigned char fromgdb; + + if (read (desc, &fromgdb, 1) != 1) + return -1; + else + return fromgdb; +} + /* Accept input from gdb and match with chars from fp (after skipping one blank) up until a \n is read from fp (which is not matched) */ @@ -346,7 +363,7 @@ static void expect (FILE *fp) { int fromlog; - unsigned char fromgdb; + int fromgdb; if ((fromlog = logchar (fp)) != ' ') { @@ -357,15 +374,16 @@ expect (FILE *fp) { fromlog = logchar (fp); if (fromlog == EOL) - { - break; - } - read (remote_desc, &fromgdb, 1); + break; + fromgdb = gdbchar (remote_desc); + if (fromgdb < 0) + remote_error ("Error during read from gdb"); } while (fromlog == fromgdb); + if (fromlog != EOL) { - sync_error (fp, "Sync error during read of gdb packet", fromlog, + sync_error (fp, "Sync error during read of gdb packet from log", fromlog, fromgdb); } } @@ -387,7 +405,8 @@ play (FILE *fp) while ((fromlog = logchar (fp)) != EOL) { ch = fromlog; - write (remote_desc, &ch, 1); + if (write (remote_desc, &ch, 1) != 1) + remote_error ("Error during write to gdb"); } } @@ -395,8 +414,9 @@ static void gdbreplay_version (void) { printf ("GNU gdbreplay %s%s\n" - "Copyright (C) 2010 Free Software Foundation, Inc.\n" - "gdbreplay is free software, covered by the GNU General Public License.\n" + "Copyright (C) 2013 Free Software Foundation, Inc.\n" + "gdbreplay is free software, covered by " + "the GNU General Public License.\n" "This gdbreplay was configured as \"%s\"\n", PKGVERSION, version, host_name); }