Make gdbreplay use more common routines
authorPedro Alves <palves@redhat.com>
Fri, 8 Jun 2018 19:48:28 +0000 (20:48 +0100)
committerPedro Alves <palves@redhat.com>
Fri, 8 Jun 2018 19:48:28 +0000 (20:48 +0100)
This makes gdbreplay share a bit more code with gdbserver, and paves
the way to share more in future.  Including common-defs.h pulls in
defines and headers that gdb and gdbserver assume are always
defined/available too, such as for example _(), ansidecl.h or a set of
system headers.  Including that revealed (static vs extern conflict)
gdbreplay had a local copy of perror_with_name (which exited directly
instead of throwing an error).  So I removed gdbreplay's local copy,
and then added enough .o files until gdbreplay linked successfully.

Also, use xstrdup instead of strdup.

gdb/gdbserver/ChangeLog:
2018-06-08  Pedro Alves  <palves@redhat.com>

* Makefile.in (GDBREPLAY_OBS): Add common/cleanups.o,
common/common-exceptions.o, common/common-utils.o,
common/errors.o, common/print-utils.o and utils.o.
* gdbreplay.c: Include "common-defs.h" instead of the two
'config.h's here.  Don't include stdio.h, errno.h, stdlib.h,
string.h or alloca.h.
(perror_with_name): Delete.
(remote_open): Use xstrdup instead of strdup.
(main): Rename to ...
(captured_main): ... this.
(main): New.

gdb/gdbserver/ChangeLog
gdb/gdbserver/Makefile.in
gdb/gdbserver/gdbreplay.c

index 4e55c365be0f19e50e4845550b10487859b66ecc..d040dc1af490fc57e2243947075a8ee0bdd32aaf 100644 (file)
@@ -1,3 +1,17 @@
+2018-06-08  Pedro Alves  <palves@redhat.com>
+
+       * Makefile.in (GDBREPLAY_OBS): Add common/cleanups.o,
+       common/common-exceptions.o, common/common-utils.o,
+       common/errors.o, common/print-utils.o and utils.o.
+       * gdbreplay.c: Include "common-defs.h" instead of the two
+       'config.h's here.  Don't include stdio.h, errno.h, stdlib.h,
+       string.h or alloca.h.
+       (perror_with_name): Delete.
+       (remote_open): Use xstrdup instead of strdup.
+       (main): Rename to ...
+       (captured_main): ... this.
+       (main): New.
+
 2018-06-08  Tom Tromey  <tom@tromey.com>
 
        * linux-low.c (linux_low_read_btrace): Update.
index 675faa43642ffc716123e577dbe5cf806a5053bf..cf04b7d7b5adba6d93c9c65be35cd7402701b03b 100644 (file)
@@ -284,7 +284,16 @@ OBS = \
        $(LIBOBJS) \
        $(XML_BUILTIN)
 
-GDBREPLAY_OBS = gdbreplay.o version.o
+GDBREPLAY_OBS = \
+       common/cleanups.o \
+       common/common-exceptions.o \
+       common/common-utils.o \
+       common/errors.o \
+       common/print-utils.o \
+       gdbreplay.o \
+       utils.o \
+       version.o
+
 GDBSERVER_LIBS = @GDBSERVER_LIBS@
 XM_CLIBS = @LIBS@
 CDEPS = $(srcdir)/proc-service.list
index c1a639069a60067d3c5f01219ae69e6918857999..a4bc8924623dd04ed0d3e3e3018bf077a9101040 100644 (file)
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#include "config.h"
-#include "build-gnulib-gdbserver/config.h"
+#include "common-defs.h"
 #include "version.h"
 
-#include <stdio.h>
 #if HAVE_SYS_FILE_H
 #include <sys/file.h>
 #endif
@@ -32,9 +30,6 @@
 #if HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
 #include <unistd.h>
 #ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h>
@@ -49,8 +44,6 @@
 #include <netinet/tcp.h>
 #endif
 
-#include <alloca.h>
-
 #if USE_WIN32API
 #include <winsock2.h>
 #endif
@@ -115,32 +108,6 @@ strerror (DWORD error)
 
 #endif /* __MINGW32CE__ */
 
-/* Print the system error message for errno, and also mention STRING
-   as the file name for which the error was encountered.
-   Then return to command level.  */
-
-static void
-perror_with_name (const char *string)
-{
-#ifndef STDC_HEADERS
-  extern int errno;
-#endif
-  const char *err;
-  char *combined;
-
-  err = strerror (errno);
-  if (err == NULL)
-    err = "unknown error";
-
-  combined = (char *) alloca (strlen (err) + strlen (string) + 3);
-  strcpy (combined, string);
-  strcat (combined, ": ");
-  strcat (combined, err);
-  fprintf (stderr, "\n%s.\n", combined);
-  fflush (stderr);
-  exit (1);
-}
-
 static void
 sync_error (FILE *fp, const char *desc, int expect, int got)
 {
@@ -422,8 +389,11 @@ gdbreplay_usage (FILE *stream)
     fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
 }
 
-int
-main (int argc, char *argv[])
+/* Main function.  This is called by the real "main" function,
+   wrapped in a TRY_CATCH that handles any uncaught exceptions.  */
+
+static void ATTRIBUTE_NORETURN
+captured_main (int argc, char *argv[])
 {
   FILE *fp;
   int ch;
@@ -471,3 +441,25 @@ main (int argc, char *argv[])
   remote_close ();
   exit (0);
 }
+
+int
+main (int argc, char *argv[])
+{
+  TRY
+    {
+      captured_main (argc, argv);
+    }
+  CATCH (exception, RETURN_MASK_ALL)
+    {
+      if (exception.reason == RETURN_ERROR)
+       {
+         fflush (stdout);
+         fprintf (stderr, "%s\n", exception.message);
+       }
+
+      exit (1);
+    }
+  END_CATCH
+
+  gdb_assert_not_reached ("captured_main should never return");
+}