From fb23d554428f1d379fd8c3e959a294108fa59f88 Mon Sep 17 00:00:00 2001 From: Sergio Durigan Junior Date: Thu, 15 Jan 2015 15:09:15 -0500 Subject: [PATCH] Move safe_strerror to common/ This patch moves safe_strerror from the gdb/{posix,mingw}-hdep.c files to the respective common/{posix,mingw}-strerror.c files. This is a preparation for the next patch, which shares a common code (to disable address space randomization when creating a new inferior). The patch has been regtested on Fedora 20 x86_64, and no regressions were found. gdb/ChangeLog 2015-01-15 Sergio Durigan Junior * Makefile.in (ALLDEPFILES): Including common/mingw-strerror.c and common/posix-strerror.c. (posix-strerror.o): New rule. (mingw-strerror.o): Likewise. * common/common-utils.h (safe_strerror): Move prototype to here, from utils.h. * common/common.host: New file. * common/mingw-strerror.c: Likewise. * common/posix-strerror.c: Likewise. * configure: Regenerated. * configure.ac: Source common/common.host. Add variable common_host_obs to gdb_host_obs. * contrib/ari/gdb_ari.sh: Mention gdb/common/mingw-strerror.c and gdb/common/posix-strerror.c when warning about the use of strerror. * mingw-hdep.c (safe_strerror): Remove definition; move it to common/mingw-strerror.c. * posix-hdep.c (safe_strerror): Remove definition; move it to common/posix-hdep.c. * utils.h (safe_strerror): Remove prototype; move to common/common-utils.h. gdb/gdbserver/ChangeLog 2015-01-15 Sergio Durigan Junior * Makefile.in (posix-strerror.o): New rule. (mingw-strerror.o): Likewise. * configure: Regenerated. * configure.ac: Source file ../common/common.host. Initialize new variable srv_host_obs. Add srv_host_obs to GDBSERVER_DEPFILES. --- gdb/ChangeLog | 24 ++++++++++++++ gdb/Makefile.in | 12 +++++-- gdb/common/common-utils.h | 6 ++++ gdb/common/common.host | 36 +++++++++++++++++++++ gdb/common/mingw-strerror.c | 64 +++++++++++++++++++++++++++++++++++++ gdb/common/posix-strerror.c | 38 ++++++++++++++++++++++ gdb/configure | 4 +++ gdb/configure.ac | 4 +++ gdb/contrib/ari/gdb_ari.sh | 4 +-- gdb/gdbserver/ChangeLog | 8 +++++ gdb/gdbserver/Makefile.in | 6 ++++ gdb/gdbserver/configure | 6 +++- gdb/gdbserver/configure.ac | 6 +++- gdb/mingw-hdep.c | 44 ------------------------- gdb/posix-hdep.c | 20 ------------ gdb/utils.h | 3 -- 16 files changed, 212 insertions(+), 73 deletions(-) create mode 100644 gdb/common/common.host create mode 100644 gdb/common/mingw-strerror.c create mode 100644 gdb/common/posix-strerror.c diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5c45780d37..985097aec4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,27 @@ +2015-01-15 Sergio Durigan Junior + + * Makefile.in (ALLDEPFILES): Including common/mingw-strerror.c and + common/posix-strerror.c. + (posix-strerror.o): New rule. + (mingw-strerror.o): Likewise. + * common/common-utils.h (safe_strerror): Move prototype to here, + from utils.h. + * common/common.host: New file. + * common/mingw-strerror.c: Likewise. + * common/posix-strerror.c: Likewise. + * configure: Regenerated. + * configure.ac: Source common/common.host. Add variable + common_host_obs to gdb_host_obs. + * contrib/ari/gdb_ari.sh: Mention gdb/common/mingw-strerror.c and + gdb/common/posix-strerror.c when warning about the use of + strerror. + * mingw-hdep.c (safe_strerror): Remove definition; move it to + common/mingw-strerror.c. + * posix-hdep.c (safe_strerror): Remove definition; move it to + common/posix-hdep.c. + * utils.h (safe_strerror): Remove prototype; move to + common/common-utils.h. + 2015-01-15 Joel Brobecker GDB 7.8.2 released. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index f9701765ef..57ed361f3e 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1680,7 +1680,7 @@ ALLDEPFILES = \ m68klinux-nat.c m68klinux-tdep.c \ m88k-tdep.c m88kbsd-nat.c \ microblaze-tdep.c microblaze-linux-tdep.c \ - mingw-hdep.c \ + mingw-hdep.c common/mingw-strerror.c \ mips-linux-nat.c mips-linux-tdep.c \ mips-sde-tdep.c \ mips-tdep.c \ @@ -1690,7 +1690,7 @@ ALLDEPFILES = \ nios2-tdep.c nios2-linux-tdep.c \ nbsd-nat.c nbsd-tdep.c obsd-nat.c obsd-tdep.c \ somread.c solib-som.c \ - posix-hdep.c \ + posix-hdep.c common/posix-strerror.c \ ppc-sysv-tdep.c ppc-linux-nat.c ppc-linux-tdep.c ppc64-tdep.c \ ppcfbsd-nat.c ppcfbsd-tdep.c \ ppcnbsd-nat.c ppcnbsd-tdep.c \ @@ -2227,6 +2227,14 @@ common-exceptions.o: ${srcdir}/common/common-exceptions.c $(COMPILE) $(srcdir)/common/common-exceptions.c $(POSTCOMPILE) +posix-strerror.o: ${srcdir}/common/posix-strerror.c + $(COMPILE) $(srcdir)/common/posix-strerror.c + $(POSTCOMPILE) + +mingw-strerror.o: ${srcdir}/common/mingw-strerror.c + $(COMPILE) $(srcdir)/common/mingw-strerror.c + $(POSTCOMPILE) + # # gdb/target/ dependencies # diff --git a/gdb/common/common-utils.h b/gdb/common/common-utils.h index f110924fa0..60aa030a0f 100644 --- a/gdb/common/common-utils.h +++ b/gdb/common/common-utils.h @@ -62,4 +62,10 @@ int xsnprintf (char *str, size_t size, const char *format, ...) char *savestring (const char *ptr, size_t len); +/* The strerror() function can return NULL for errno values that are + out of range. Provide a "safe" version that always returns a + printable string. */ + +extern char *safe_strerror (int); + #endif diff --git a/gdb/common/common.host b/gdb/common/common.host new file mode 100644 index 0000000000..8a83882a10 --- /dev/null +++ b/gdb/common/common.host @@ -0,0 +1,36 @@ +# Common object files to include for each host. +# +# Copyright (C) 2015 Free Software Foundation, Inc. +# +# This file is part of GDB. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Map host triplet into the common object files to be included by +# GDB/gdbserver. This is invoked from the autoconf generated +# configure script. + +# This file sets the following shell variables: +# common_host_obs host-specific .o files to include when building +# GDB/gdbserver + +case "${host}" in + +*-mingw*) common_host_obs=mingw-strerror.o + ;; +*) + common_host_obs=posix-strerror.o + ;; + +esac diff --git a/gdb/common/mingw-strerror.c b/gdb/common/mingw-strerror.c new file mode 100644 index 0000000000..c62c42d706 --- /dev/null +++ b/gdb/common/mingw-strerror.c @@ -0,0 +1,64 @@ +/* Safe version of strerror for MinGW, for GDB, the GNU debugger. + + Copyright (C) 2006-2015 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "common-defs.h" + +#include + +/* Implementation of safe_strerror as defined in common-utils.h. + + The Windows runtime implementation of strerror never returns NULL, + but does return a useless string for anything above sys_nerr; + unfortunately this includes all socket-related error codes. + This replacement tries to find a system-provided error message. */ + +char * +safe_strerror (int errnum) +{ + static char *buffer; + int len; + + if (errnum >= 0 && errnum < sys_nerr) + return strerror (errnum); + + if (buffer) + { + LocalFree (buffer); + buffer = NULL; + } + + if (FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER + | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, errnum, + MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &buffer, 0, NULL) == 0) + { + static char buf[32]; + xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum); + return buf; + } + + /* Windows error messages end with a period and a CR-LF; strip that + out. */ + len = strlen (buffer); + if (len > 3 && strcmp (buffer + len - 3, ".\r\n") == 0) + buffer[len - 3] = '\0'; + + return buffer; +} diff --git a/gdb/common/posix-strerror.c b/gdb/common/posix-strerror.c new file mode 100644 index 0000000000..119fcf6034 --- /dev/null +++ b/gdb/common/posix-strerror.c @@ -0,0 +1,38 @@ +/* Safe version of strerror for POSIX systems for GDB, the GNU debugger. + + Copyright (C) 2006-2015 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "common-defs.h" + +/* Implementation of safe_strerror as defined in common-utils.h. */ + +char * +safe_strerror (int errnum) +{ + char *msg; + + msg = strerror (errnum); + if (msg == NULL) + { + static char buf[32]; + + xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum); + msg = buf; + } + return (msg); +} diff --git a/gdb/configure b/gdb/configure index fdcf215253..f62d5a08c8 100755 --- a/gdb/configure +++ b/gdb/configure @@ -5308,6 +5308,10 @@ fi . $srcdir/configure.host +# Add in the common host objects. +. $srcdir/common/common.host +gdb_host_obs="$gdb_host_obs $common_host_obs" + # Accumulate some settings from configure.tgt over all enabled targets TARGET_OBS= diff --git a/gdb/configure.ac b/gdb/configure.ac index cc181745bc..8dd7f8fcc1 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -205,6 +205,10 @@ fi . $srcdir/configure.host +# Add in the common host objects. +. $srcdir/common/common.host +gdb_host_obs="$gdb_host_obs $common_host_obs" + # Accumulate some settings from configure.tgt over all enabled targets TARGET_OBS= diff --git a/gdb/contrib/ari/gdb_ari.sh b/gdb/contrib/ari/gdb_ari.sh index 8a8cec8484..b868a17e17 100644 --- a/gdb/contrib/ari/gdb_ari.sh +++ b/gdb/contrib/ari/gdb_ari.sh @@ -603,8 +603,8 @@ BEGIN { doc["strerror"] = "\ Do not use strerror(), instead use safe_strerror()" category["strerror"] = ari_regression fix("strerror", "gdb/gdb_string.h", 1) - fix("strerror", "gdb/mingw-hdep.c", 1) - fix("strerror", "gdb/posix-hdep.c", 1) + fix("strerror", "gdb/common/mingw-strerror.c", 1) + fix("strerror", "gdb/common/posix-strerror.c", 1) } /(^|[^_[:alnum:]])strerror[[:space:]]*\(/ { fail("strerror") diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index f762dafd41..c2d8e5672b 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,11 @@ +2015-01-15 Sergio Durigan Junior + + * Makefile.in (posix-strerror.o): New rule. + (mingw-strerror.o): Likewise. + * configure: Regenerated. + * configure.ac: Source file ../common/common.host. Initialize new + variable srv_host_obs. Add srv_host_obs to GDBSERVER_DEPFILES. + 2015-01-14 Yao Qi * Makefile.in (SFILES): Add nat/ppc-linux.c. diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 0e442fcd97..8406ff4db5 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -518,6 +518,12 @@ rsp-low.o: ../common/rsp-low.c common-utils.o: ../common/common-utils.c $(COMPILE) $< $(POSTCOMPILE) +posix-strerror.o: ../common/posix-strerror.c + $(COMPILE) $< + $(POSTCOMPILE) +mingw-strerror.o: ../common/mingw-strerror.c + $(COMPILE) $< + $(POSTCOMPILE) vec.o: ../common/vec.c $(COMPILE) $< $(POSTCOMPILE) diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index 55bd2c5b83..2240b7871b 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -5539,6 +5539,10 @@ esac . ${srcdir}/configure.srv +# Add in the common host objects. +. ${srcdir}/../common/common.host +srv_host_obs="$common_host_obs" + if test "${srv_mingwce}" = "yes"; then LIBS="$LIBS -lws2" elif test "${srv_mingw}" = "yes"; then @@ -6034,7 +6038,7 @@ $as_echo "#define USE_XML 1" >>confdefs.h done fi -GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles" +GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_host_obs" GDBSERVER_LIBS="$srv_libs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target supports __sync_*_compare_and_swap" >&5 diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac index 39e3a06764..f883adc82a 100644 --- a/gdb/gdbserver/configure.ac +++ b/gdb/gdbserver/configure.ac @@ -242,6 +242,10 @@ esac . ${srcdir}/configure.srv +# Add in the common host objects. +. ${srcdir}/../common/common.host +srv_host_obs="$common_host_obs" + if test "${srv_mingwce}" = "yes"; then LIBS="$LIBS -lws2" elif test "${srv_mingw}" = "yes"; then @@ -385,7 +389,7 @@ if test "$srv_xmlfiles" != ""; then done fi -GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles" +GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_host_obs" GDBSERVER_LIBS="$srv_libs" dnl Check whether the target supports __sync_*_compare_and_swap. diff --git a/gdb/mingw-hdep.c b/gdb/mingw-hdep.c index c0cc385612..a0ed2816e2 100644 --- a/gdb/mingw-hdep.c +++ b/gdb/mingw-hdep.c @@ -35,50 +35,6 @@ static HANDLE sigint_event; function. */ struct async_signal_handler *sigint_handler; -/* The strerror() function can return NULL for errno values that are - out of range. Provide a "safe" version that always returns a - printable string. - - The Windows runtime implementation of strerror never returns NULL, - but does return a useless string for anything above sys_nerr; - unfortunately this includes all socket-related error codes. - This replacement tries to find a system-provided error message. */ - -char * -safe_strerror (int errnum) -{ - static char *buffer; - int len; - - if (errnum >= 0 && errnum < sys_nerr) - return strerror (errnum); - - if (buffer) - { - LocalFree (buffer); - buffer = NULL; - } - - if (FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER - | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, errnum, - MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &buffer, 0, NULL) == 0) - { - static char buf[32]; - xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum); - return buf; - } - - /* Windows error messages end with a period and a CR-LF; strip that - out. */ - len = strlen (buffer); - if (len > 3 && strcmp (buffer + len - 3, ".\r\n") == 0) - buffer[len - 3] = '\0'; - - return buffer; -} - /* Return an absolute file name of the running GDB, if possible, or ARGV0 if not. The return value is in malloc'ed storage. */ diff --git a/gdb/posix-hdep.c b/gdb/posix-hdep.c index 13cddbac55..fef5ec1ae8 100644 --- a/gdb/posix-hdep.c +++ b/gdb/posix-hdep.c @@ -22,26 +22,6 @@ #include "gdb_select.h" -/* The strerror() function can return NULL for errno values that are - out of range. Provide a "safe" version that always returns a - printable string. */ - -char * -safe_strerror (int errnum) -{ - char *msg; - - msg = strerror (errnum); - if (msg == NULL) - { - static char buf[32]; - - xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum); - msg = buf; - } - return (msg); -} - /* Wrapper for select. Nothing special needed on POSIX platforms. */ int diff --git a/gdb/utils.h b/gdb/utils.h index 3debde733c..e58260c6c5 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -42,9 +42,6 @@ ULONGEST strtoulst (const char *num, const char **trailer, int base); int compare_positive_ints (const void *ap, const void *bp); int compare_strings (const void *ap, const void *bp); -/* This is defined in *-hdep.c, e.g., posix-hdep.c. */ -extern char *safe_strerror (int); - /* A wrapper for bfd_errmsg to produce a more helpful error message in the case of bfd_error_file_ambiguously recognized. MATCHING, if non-NULL, is the corresponding argument to -- 2.34.1