aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2018-06-08 20:48:28 +0100
committerPedro Alves <palves@redhat.com>2018-06-08 20:48:28 +0100
commit03349c934525d0f78a3f971a351b1202ea21ec94 (patch)
tree33a3d907c10bc81da33e87be44b25a950b1ff548
parentecf99cc09236316db27fd8ffaedca864f81ea081 (diff)
downloadgdb-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/ChangeLog14
-rw-r--r--gdb/gdbserver/Makefile.in11
-rw-r--r--gdb/gdbserver/gdbreplay.c64
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");
+}