diff options
author | Pedro Alves <palves@redhat.com> | 2018-06-08 20:48:28 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2018-06-08 20:48:28 +0100 |
commit | 03349c934525d0f78a3f971a351b1202ea21ec94 (patch) | |
tree | 33a3d907c10bc81da33e87be44b25a950b1ff548 | |
parent | ecf99cc09236316db27fd8ffaedca864f81ea081 (diff) | |
download | gdb-03349c934525d0f78a3f971a351b1202ea21ec94.zip gdb-03349c934525d0f78a3f971a351b1202ea21ec94.tar.gz gdb-03349c934525d0f78a3f971a351b1202ea21ec94.tar.bz2 |
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 <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.
-rw-r--r-- | gdb/gdbserver/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/gdbserver/Makefile.in | 11 | ||||
-rw-r--r-- | gdb/gdbserver/gdbreplay.c | 64 |
3 files changed, 52 insertions, 37 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 4e55c36..d040dc1 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -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. diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 675faa4..cf04b7d 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 c1a6390..a4bc892 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 <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"); +} |