diff options
author | Christian Biesinger <cbiesinger@google.com> | 2019-11-06 13:57:52 -0600 |
---|---|---|
committer | Christian Biesinger <cbiesinger@google.com> | 2019-12-10 13:23:01 -0600 |
commit | ab7d13f07027e6232a21448ef51f0a52a96738a9 (patch) | |
tree | ee2099c8cad324e6aea8a9f24a326fe5180e8380 /gdb | |
parent | 0e7aaa728dc23f81a7809f3c5c9b90e85b978a8a (diff) | |
download | gdb-ab7d13f07027e6232a21448ef51f0a52a96738a9.zip gdb-ab7d13f07027e6232a21448ef51f0a52a96738a9.tar.gz gdb-ab7d13f07027e6232a21448ef51f0a52a96738a9.tar.bz2 |
Replace the remaining uses of strerror with safe_strerror
To do that, this patch makes IPA compile safe-strerror as well. Because
it doesn't use Gnulib, it calls the Glibc version of strerror_r directly.
Consequently this patch also removes the configure checks for strerror.
gdb/ChangeLog:
2019-12-10 Christian Biesinger <cbiesinger@google.com>
* config.in: Regenerate.
* configure: Regenerate.
* gdbsupport/agent.c (gdb_connect_sync_socket): Call
safe_strerror instead of strerror.
* gdbsupport/common.m4: Don't check for strerror.
* gdbsupport/safe-strerror.c: Support both the glibc version
of strerror_r and the XSI version.
gdb/gdbserver/ChangeLog:
2019-12-10 Christian Biesinger <cbiesinger@google.com>
* Makefile.in: Add safe-strerror.c to gdbreplay and IPA, and change
UNDO_GNULIB_CFLAGS to undo strerror_r instead of strerror.
* config.in: Regenerate.
* configure: Regenerate.
* configure.ac: Don't check for strerror.
* linux-i386-ipa.c (initialize_fast_tracepoint_trampoline_buffer):
Call safe_strerror instead of strerror.
* server.h (strerror): Remove this now-unnecessary declaration.
* tracepoint.c (init_named_socket): Call safe_strerror instead of
strerror.
(gdb_agent_helper_thread): Likewise.
* utils.c (perror_with_name): Likewise.
Change-Id: I74848f072dcde75cb55c435ef9398dc8f958cd73
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/config.in | 4 | ||||
-rwxr-xr-x | gdb/configure | 12 | ||||
-rw-r--r-- | gdb/gdbserver/ChangeLog | 15 | ||||
-rw-r--r-- | gdb/gdbserver/Makefile.in | 4 | ||||
-rw-r--r-- | gdb/gdbserver/config.in | 4 | ||||
-rwxr-xr-x | gdb/gdbserver/configure | 22 | ||||
-rw-r--r-- | gdb/gdbserver/configure.ac | 2 | ||||
-rw-r--r-- | gdb/gdbserver/linux-i386-ipa.c | 4 | ||||
-rw-r--r-- | gdb/gdbserver/server.h | 6 | ||||
-rw-r--r-- | gdb/gdbserver/tracepoint.c | 12 | ||||
-rw-r--r-- | gdb/gdbserver/utils.c | 2 | ||||
-rw-r--r-- | gdb/gdbsupport/agent.c | 4 | ||||
-rw-r--r-- | gdb/gdbsupport/common.m4 | 2 | ||||
-rw-r--r-- | gdb/gdbsupport/safe-strerror.c | 28 |
15 files changed, 66 insertions, 65 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ac58517..a6e299d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2019-12-10 Christian Biesinger <cbiesinger@google.com> + + * config.in: Regenerate. + * configure: Regenerate. + * gdbsupport/agent.c (gdb_connect_sync_socket): Call + safe_strerror instead of strerror. + * gdbsupport/common.m4: Don't check for strerror. + * gdbsupport/safe-strerror.c: Support both the glibc version + of strerror_r and the XSI version. + 2019-12-10 Tom Tromey <tromey@adacore.com> * ada-typeprint.c (print_choices): Use a single "?". diff --git a/gdb/config.in b/gdb/config.in index 1caf764..cb886ba 100644 --- a/gdb/config.in +++ b/gdb/config.in @@ -117,10 +117,6 @@ don't. */ #undef HAVE_DECL_SNPRINTF -/* Define to 1 if you have the declaration of `strerror', and to 0 if you - don't. */ -#undef HAVE_DECL_STRERROR - /* Define to 1 if you have the declaration of `strstr', and to 0 if you don't. */ #undef HAVE_DECL_STRSTR diff --git a/gdb/configure b/gdb/configure index 6b64619..324eb50 100755 --- a/gdb/configure +++ b/gdb/configure @@ -13630,17 +13630,7 @@ fi done - ac_fn_c_check_decl "$LINENO" "strerror" "ac_cv_have_decl_strerror" "$ac_includes_default" -if test "x$ac_cv_have_decl_strerror" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRERROR $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" + ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" if test "x$ac_cv_have_decl_strstr" = xyes; then : ac_have_decl=1 else diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index de6c311..36dece6 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,18 @@ +2019-12-10 Christian Biesinger <cbiesinger@google.com> + + * Makefile.in: Add safe-strerror.c to gdbreplay and IPA, and change + UNDO_GNULIB_CFLAGS to undo strerror_r instead of strerror. + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Don't check for strerror. + * linux-i386-ipa.c (initialize_fast_tracepoint_trampoline_buffer): + Call safe_strerror instead of strerror. + * server.h (strerror): Remove this now-unnecessary declaration. + * tracepoint.c (init_named_socket): Call safe_strerror instead of + strerror. + (gdb_agent_helper_thread): Likewise. + * utils.c (perror_with_name): Likewise. + 2019-11-26 Tom Tromey <tom@tromey.com> * configure, config.in: Rebuild. diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index e79d24f..10e0040 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -304,6 +304,7 @@ GDBREPLAY_OBS = \ gdbsupport/errors.o \ gdbsupport/netstuff.o \ gdbsupport/print-utils.o \ + gdbsupport/safe-strerror.o \ gdbreplay.o \ utils.o \ version.o @@ -430,6 +431,7 @@ IPA_OBJS = \ gdbsupport/format-ipa.o \ gdbsupport/print-utils-ipa.o \ gdbsupport/rsp-low-ipa.o \ + gdbsupport/safe-strerror-ipa.o \ gdbsupport/tdesc-ipa.o \ regcache-ipa.o \ remote-utils-ipa.o \ @@ -557,7 +559,7 @@ UST_CFLAGS = $(ustinc) -DCONFIG_UST_GDB_INTEGRATION # Undo gnulib replacements for the IPA shared library build. # The gnulib headers are still needed, but gnulib is not linked # into the IPA lib so replacement apis don't work. -UNDO_GNULIB_CFLAGS = -Drpl_strerror=strerror +UNDO_GNULIB_CFLAGS = -Drpl_strerror_r=strerror_r # Note, we only build the IPA if -fvisibility=hidden is supported in # the first place. diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in index 14cf709..b1e58a3 100644 --- a/gdb/gdbserver/config.in +++ b/gdb/gdbserver/config.in @@ -54,10 +54,6 @@ don't. */ #undef HAVE_DECL_SNPRINTF -/* Define to 1 if you have the declaration of `strerror', and to 0 if you - don't. */ -#undef HAVE_DECL_STRERROR - /* Define to 1 if you have the declaration of `strstr', and to 0 if you don't. */ #undef HAVE_DECL_STRSTR diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index da17f8c..ccffde8 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -7022,17 +7022,7 @@ fi done - ac_fn_c_check_decl "$LINENO" "strerror" "ac_cv_have_decl_strerror" "$ac_includes_default" -if test "x$ac_cv_have_decl_strerror" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRERROR $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" + ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" if test "x$ac_cv_have_decl_strstr" = xyes; then : ac_have_decl=1 else @@ -8427,16 +8417,6 @@ _ACEOF -ac_fn_c_check_decl "$LINENO" "strerror" "ac_cv_have_decl_strerror" "$ac_includes_default" -if test "x$ac_cv_have_decl_strerror" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRERROR $ac_have_decl -_ACEOF ac_fn_c_check_decl "$LINENO" "perror" "ac_cv_have_decl_perror" "$ac_includes_default" if test "x$ac_cv_have_decl_perror" = xyes; then : ac_have_decl=1 diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac index 07c9bd7..4a6d88e 100644 --- a/gdb/gdbserver/configure.ac +++ b/gdb/gdbserver/configure.ac @@ -158,7 +158,7 @@ LIBS="$old_LIBS" libiberty_INIT -AC_CHECK_DECLS([strerror, perror, vasprintf, vsnprintf]) +AC_CHECK_DECLS([perror, vasprintf, vsnprintf]) AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize]) diff --git a/gdb/gdbserver/linux-i386-ipa.c b/gdb/gdbserver/linux-i386-ipa.c index 2e3d1ac..4bbc1b5 100644 --- a/gdb/gdbserver/linux-i386-ipa.c +++ b/gdb/gdbserver/linux-i386-ipa.c @@ -210,7 +210,7 @@ initialize_fast_tracepoint_trampoline_buffer (void) if (!f) { snprintf (buf, sizeof (buf), "mmap_min_addr open failed: %s", - strerror (errno)); + safe_strerror (errno)); set_trampoline_buffer_space (0, 0, buf); return; } @@ -233,7 +233,7 @@ initialize_fast_tracepoint_trampoline_buffer (void) else { snprintf (buf, IPA_BUFSIZ, "low-64K-buffer mmap() failed: %s", - strerror (errno)); + safe_strerror (errno)); set_trampoline_buffer_space (0, 0, buf); } } diff --git a/gdb/gdbserver/server.h b/gdb/gdbserver/server.h index e01c4f1..3326159 100644 --- a/gdb/gdbserver/server.h +++ b/gdb/gdbserver/server.h @@ -29,12 +29,6 @@ gdb_static_assert (sizeof (CORE_ADDR) >= sizeof (void *)); #include "gdbsupport/version.h" -#if !HAVE_DECL_STRERROR -#ifndef strerror -extern char *strerror (int); /* X3.159-1989 4.11.6.2 */ -#endif -#endif - #if !HAVE_DECL_PERROR #ifndef perror extern void perror (const char *); diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c index 2bd75df..9f8a491 100644 --- a/gdb/gdbserver/tracepoint.c +++ b/gdb/gdbserver/tracepoint.c @@ -6879,7 +6879,7 @@ init_named_socket (const char *name) result = fd = socket (PF_UNIX, SOCK_STREAM, 0); if (result == -1) { - warning ("socket creation failed: %s", strerror (errno)); + warning ("socket creation failed: %s", safe_strerror (errno)); return -1; } @@ -6895,7 +6895,7 @@ init_named_socket (const char *name) result = unlink (name); if (result == -1) { - warning ("unlink failed: %s", strerror (errno)); + warning ("unlink failed: %s", safe_strerror (errno)); close (fd); return -1; } @@ -6905,7 +6905,7 @@ init_named_socket (const char *name) result = bind (fd, (struct sockaddr *) &addr, sizeof (addr)); if (result == -1) { - warning ("bind failed: %s", strerror (errno)); + warning ("bind failed: %s", safe_strerror (errno)); close (fd); return -1; } @@ -6913,7 +6913,7 @@ init_named_socket (const char *name) result = listen (fd, 1); if (result == -1) { - warning ("listen: %s", strerror (errno)); + warning ("listen: %s", safe_strerror (errno)); close (fd); return -1; } @@ -7219,7 +7219,7 @@ gdb_agent_helper_thread (void *arg) if (fd < 0) { warning ("Accept returned %d, error: %s", - fd, strerror (errno)); + fd, safe_strerror (errno)); break; } @@ -7231,7 +7231,7 @@ gdb_agent_helper_thread (void *arg) if (ret == -1) { warning ("reading socket (fd=%d) failed with %s", - fd, strerror (errno)); + fd, safe_strerror (errno)); close (fd); break; } diff --git a/gdb/gdbserver/utils.c b/gdb/gdbserver/utils.c index 6a0e7a7..b72dd0e 100644 --- a/gdb/gdbserver/utils.c +++ b/gdb/gdbserver/utils.c @@ -47,7 +47,7 @@ perror_with_name (const char *string) const char *err; char *combined; - err = strerror (errno); + err = safe_strerror (errno); if (err == NULL) err = "unknown error"; diff --git a/gdb/gdbsupport/agent.c b/gdb/gdbsupport/agent.c index 6d55f58..50e9500 100644 --- a/gdb/gdbsupport/agent.c +++ b/gdb/gdbsupport/agent.c @@ -149,7 +149,7 @@ gdb_connect_sync_socket (int pid) res = fd = gdb_socket_cloexec (PF_UNIX, SOCK_STREAM, 0); if (res == -1) { - warning (_("error opening sync socket: %s"), strerror (errno)); + warning (_("error opening sync socket: %s"), safe_strerror (errno)); return -1; } @@ -168,7 +168,7 @@ gdb_connect_sync_socket (int pid) { warning (_("error connecting sync socket (%s): %s. " "Make sure the directory exists and that it is writable."), - path, strerror (errno)); + path, safe_strerror (errno)); close (fd); return -1; } diff --git a/gdb/gdbsupport/common.m4 b/gdb/gdbsupport/common.m4 index 4f2bb52..c61753f 100644 --- a/gdb/gdbsupport/common.m4 +++ b/gdb/gdbsupport/common.m4 @@ -35,7 +35,7 @@ AC_DEFUN([GDB_AC_COMMON], [ AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 socketpair sigaction \ sigprocmask]) - AC_CHECK_DECLS([strerror, strstr]) + AC_CHECK_DECLS([strstr]) # Check for std::thread. This does not work on some platforms, like # mingw and DJGPP. diff --git a/gdb/gdbsupport/safe-strerror.c b/gdb/gdbsupport/safe-strerror.c index c37db57..7425af5 100644 --- a/gdb/gdbsupport/safe-strerror.c +++ b/gdb/gdbsupport/safe-strerror.c @@ -20,6 +20,26 @@ #include "common-defs.h" #include <string.h> +/* There are two different versions of strerror_r; one is GNU-specific, the + other XSI-compliant. They differ in the return type. This overload lets + us choose the right behavior for each return type. We cannot rely on Gnulib + to solve this for us because IPA does not use Gnulib but uses this + function. */ + +/* Called if we have a XSI-compliant strerror_r. */ +static char * +select_strerror_r (int res, char *buf) +{ + return res == 0 ? buf : nullptr; +} + +/* Called if we have a GNU strerror_r. */ +static char * +select_strerror_r (char *res, char *) +{ + return res; +} + /* Implementation of safe_strerror as defined in common-utils.h. */ const char * @@ -27,11 +47,9 @@ safe_strerror (int errnum) { static thread_local char buf[1024]; - /* Assign the return value to an int, so we get an error if we accidentally - get the wrong version of this function (glibc has two of them...). */ - int ret = strerror_r (errnum, buf, sizeof (buf)); - if (ret == 0) - return buf; + char *res = select_strerror_r (strerror_r (errnum, buf, sizeof (buf)), buf); + if (res != nullptr) + return res; xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum); return buf; |