From 03349c934525d0f78a3f971a351b1202ea21ec94 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 8 Jun 2018 20:48:28 +0100 Subject: [PATCH] Make gdbreplay use more common routines 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 * 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 | 14 +++++++++ gdb/gdbserver/Makefile.in | 11 ++++++- gdb/gdbserver/gdbreplay.c | 64 +++++++++++++++++---------------------- 3 files changed, 52 insertions(+), 37 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 4e55c365be0..d040dc1af49 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,17 @@ +2018-06-08 Pedro Alves + + * 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 * linux-low.c (linux_low_read_btrace): Update. diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 675faa43642..cf04b7d7b5a 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -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 diff --git a/gdb/gdbserver/gdbreplay.c b/gdb/gdbserver/gdbreplay.c index c1a639069a6..a4bc8924623 100644 --- a/gdb/gdbserver/gdbreplay.c +++ b/gdb/gdbserver/gdbreplay.c @@ -17,11 +17,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "config.h" -#include "build-gnulib-gdbserver/config.h" +#include "common-defs.h" #include "version.h" -#include #if HAVE_SYS_FILE_H #include #endif @@ -32,9 +30,6 @@ #if HAVE_FCNTL_H #include #endif -#include -#include -#include #include #ifdef HAVE_NETINET_IN_H #include @@ -49,8 +44,6 @@ #include #endif -#include - #if USE_WIN32API #include #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"); +} -- 2.30.2