Disable a couple of compilation warning (which are treated as errors) on strlcpy definition and declaration, allow users to compile perf and kernel (objtool).
1. When glibc have strlcpy (such as in ALT Linux since 2004) objtool and perf build fails with this (in gcc):
In file included from exec-cmd.c:3: tools/include/linux/string.h:20:15: error: redundant redeclaration of ‘strlcpy’ [-Werror=redundant-decls] 20 | extern size_t strlcpy(char *dest, const char *src, size_t size);
2. Clang ignores `-Wredundant-decls', but produces another warning when building perf:
CC util/string.o ../lib/string.c:99:8: error: attribute declaration must precede definition [-Werror,-Wignored-attributes] size_t __weak strlcpy(char *dest, const char *src, size_t size) ../../tools/include/linux/compiler.h:66:34: note: expanded from macro '__weak' # define __weak __attribute__((weak)) /usr/include/bits/string_fortified.h:151:8: note: previous definition is here __NTH (strlcpy (char *__restrict __dest, const char *__restrict __src,
Fixes: ce99091 ("perf tools: Move strlcpy() from perf to tools/lib/string.c") Fixes: 0215d59 ("tools lib: Reinstate strlcpy() header guard with __UCLIBC__") Signed-off-by: Vitaly Chikunov vt@altlinux.org Cc: Dmitry V. Levin ldv@altlinux.org Cc: Josh Poimboeuf jpoimboe@redhat.com Cc: Vineet Gupta Vineet.Gupta1@synopsys.com Cc: stable@vger.kernel.org --- tools/include/linux/string.h | 3 +++ tools/lib/string.c | 3 +++ 2 files changed, 6 insertions(+)
diff --git a/tools/include/linux/string.h b/tools/include/linux/string.h index 980cb9266718..99ede7f5dfb8 100644 --- a/tools/include/linux/string.h +++ b/tools/include/linux/string.h @@ -17,7 +17,10 @@ int strtobool(const char *s, bool *res); * However uClibc headers also define __GLIBC__ hence the hack below */ #if defined(__GLIBC__) && !defined(__UCLIBC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wredundant-decls" extern size_t strlcpy(char *dest, const char *src, size_t size); +#pragma GCC diagnostic pop #endif
char *str_error_r(int errnum, char *buf, size_t buflen); diff --git a/tools/lib/string.c b/tools/lib/string.c index f2ae1b87c719..65b569014446 100644 --- a/tools/lib/string.c +++ b/tools/lib/string.c @@ -96,6 +96,8 @@ int strtobool(const char *s, bool *res) * If libc has strlcpy() then that version will override this * implementation: */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wignored-attributes" size_t __weak strlcpy(char *dest, const char *src, size_t size) { size_t ret = strlen(src); @@ -107,6 +109,7 @@ size_t __weak strlcpy(char *dest, const char *src, size_t size) } return ret; } +#pragma GCC diagnostic pop
/** * skip_spaces - Removes leading whitespace from @str.
On Sat, Dec 21, 2019 at 02:52:39AM +0300, Vitaly Chikunov wrote:
Disable a couple of compilation warning (which are treated as errors) on strlcpy definition and declaration, allow users to compile perf and kernel (objtool).
- When glibc have strlcpy (such as in ALT Linux since 2004) objtool and
perf build fails with this (in gcc):
In file included from exec-cmd.c:3: tools/include/linux/string.h:20:15: error: redundant redeclaration of ‘strlcpy’ [-Werror=redundant-decls] 20 | extern size_t strlcpy(char *dest, const char *src, size_t size);
- Clang ignores `-Wredundant-decls', but produces another warning when
building perf:
CC util/string.o
../lib/string.c:99:8: error: attribute declaration must precede definition [-Werror,-Wignored-attributes] size_t __weak strlcpy(char *dest, const char *src, size_t size) ../../tools/include/linux/compiler.h:66:34: note: expanded from macro '__weak' # define __weak __attribute__((weak)) /usr/include/bits/string_fortified.h:151:8: note: previous definition is here __NTH (strlcpy (char *__restrict __dest, const char *__restrict __src,
Fixes: ce99091 ("perf tools: Move strlcpy() from perf to tools/lib/string.c") Fixes: 0215d59 ("tools lib: Reinstate strlcpy() header guard with __UCLIBC__") Signed-off-by: Vitaly Chikunov vt@altlinux.org Cc: Dmitry V. Levin ldv@altlinux.org Cc: Josh Poimboeuf jpoimboe@redhat.com Cc: Vineet Gupta Vineet.Gupta1@synopsys.com Cc: stable@vger.kernel.org
Resolves: https://bugzilla.kernel.org/show_bug.cgi?id=118481 Reviewed-by: Dmitry V. Levin ldv@altlinux.org
Hi Vitaly,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on linus/master] [cannot apply to v5.5-rc3 next-20191220] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Vitaly-Chikunov/tools-lib-Fix-build... base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 46cf053efec6a3a5f343fead837777efe8252a46 config: x86_64-randconfig-a002-20191224 (attached as .config) compiler: gcc-4.9 (Debian 4.9.2-10+deb8u1) 4.9.2 reproduce: # save the attached .config to linux build tree make ARCH=x86_64
If you fix the issue, kindly add following tag Reported-by: kbuild test robot lkp@intel.com
All errors (new ones prefixed by >>):
../lib/string.c:100:9: error: unknown option after '#pragma GCC diagnostic' kind [-Werror=pragmas]
#pragma GCC diagnostic ignored "-Wignored-attributes" ^ cc1: all warnings being treated as errors mv: cannot stat 'tools/objtool/.libstring.o.tmp': No such file or directory make[4]: *** [tools/objtool/libstring.o] Error 1 make[4]: Target '__build' not remade because of errors. make[3]: *** [tools/objtool/objtool-in.o] Error 2 make[3]: Target 'all' not remade because of errors. make[2]: *** [objtool] Error 2 make[1]: *** [tools/objtool] Error 2 make[1]: Target 'prepare' not remade because of errors. make: *** [sub-make] Error 2 10 real 22 user 11 sys 310.82% cpu make prepare
--- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation
linux-stable-mirror@lists.linaro.org