39f34d7b64
Attempting to build GDB in Ubuntu 16.04.6 LTS on x86_64, I ran into warnings that caused the build to fail: binutils-gdb/gdb/gdbsupport/safe-strerror.c:44:1: error: ‘char* select_strerror_r(char*, char*)’ defined but not used [-Werror=unused-function] select_strerror_r (char *res, char *) The diagnostic macro DIAGNOSTIC_IGNORE_UNUSED_FUNCTION seems to expand correctly to its respective pragma, but this doesn't seem to have an effect on the warning. I tried to use the pragma explicitly and got the same result. ATTRIBUTE_UNUSED works fine in this case if you put it in both functions, which should fix warnings for both gdb and gdbserver builds. The compiler version is gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609. This is likely the result of PR64079 in GCC, which was fixed by commit 9e96f1e1b9731c4e1ef4fbbbf0997319973f0537. To prevent other developers from attempting to use this macro, only to get confused by it not working as expected, it seems better to not define this particular macro. gdb/ChangeLog: 2019-12-12 Luis Machado <luis.machado@linaro.org> * gdbsupport/safe-strerror.c: Don't include diagnostics.h. (select_strerror_r): Use ATTRIBUTE_UNUSED instead of the diagnostics macros. include/ChangeLog: 2019-12-12 Luis Machado <luis.machado@linaro.org> * diagnostics.h (DIAGNOSTIC_IGNORE_UNUSED_FUNCTION). Remove definitions. Change-Id: Iad6123d61d76d111e3ef8d24aa8c60112304c749
57 lines
1.8 KiB
C
57 lines
1.8 KiB
C
/* Safe version of strerror for GDB, the GNU debugger.
|
|
|
|
Copyright (C) 2006-2019 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 <http://www.gnu.org/licenses/>. */
|
|
|
|
#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. */
|
|
ATTRIBUTE_UNUSED static char *
|
|
select_strerror_r (int res, char *buf)
|
|
{
|
|
return res == 0 ? buf : nullptr;
|
|
}
|
|
|
|
/* Called if we have a GNU strerror_r. */
|
|
ATTRIBUTE_UNUSED static char *
|
|
select_strerror_r (char *res, char *)
|
|
{
|
|
return res;
|
|
}
|
|
|
|
/* Implementation of safe_strerror as defined in common-utils.h. */
|
|
|
|
const char *
|
|
safe_strerror (int errnum)
|
|
{
|
|
static thread_local char buf[1024];
|
|
|
|
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;
|
|
}
|