From b737d3047cc56b5e2fbb5c8390c4ed031eaf5ec0 Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Wed, 7 Jul 2021 13:44:31 +0200 Subject: [PATCH] Check for strnlen declaration to fix Solaris 10 build binutils currently fails to compile on Solaris 10: /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c: In function 'bfd_get_debug_link_info_1': /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1231:16: error: implicit declaration of function 'strnlen' [-Werror=implicit-function-declaration] 1231 | crc_offset = strnlen (name, size) + 1; | ^~~~~~~ /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1231:16: error: incompatible implicit declaration of built-in function 'strnlen' [-Werror] /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c: In function 'bfd_get_alt_debug_link_info': /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1319:20: error: incompatible implicit declaration of built-in function 'strnlen' [-Werror] 1319 | buildid_offset = strnlen (name, size) + 1; | ^~~~~~~ and in a couple of other places. The platform lacks strnlen, and while libiberty.h can provide a fallback declaration, the necessary configure test isn't run. Fixed with the following patch. Tested on i386-pc-solaris2.10. 2021-07-06 Rainer Orth bfd: * configure.ac: Check for strnlen declaration. * configure, config.in: Regenerate. binutils: * configure.ac: Check for strnlen declaration. * configure, config.in: Regenerate. --- bfd/ChangeLog | 5 +++++ bfd/config.in | 4 ++++ bfd/configure | 10 ++++++++++ bfd/configure.ac | 2 +- binutils/ChangeLog | 5 +++++ binutils/config.in | 4 ++++ binutils/configure | 10 ++++++++++ binutils/configure.ac | 2 +- 8 files changed, 40 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 96bd8ff29d0..d96cc788704 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2021-07-07 Rainer Orth + + * configure.ac: Check for strnlen declaration. + * configure, config.in: Regenerate. + 2021-07-07 Nick Clifton PR 28051 diff --git a/bfd/config.in b/bfd/config.in index 6d46ea72a6c..f54a3cacbea 100644 --- a/bfd/config.in +++ b/bfd/config.in @@ -56,6 +56,10 @@ */ #undef HAVE_DECL_STPCPY +/* Define to 1 if you have the declaration of `strnlen', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNLEN + /* Define to 1 if you have the declaration of `vasprintf', and to 0 if you don't. */ #undef HAVE_DECL_VASPRINTF diff --git a/bfd/configure b/bfd/configure index daa51244369..24171d00344 100755 --- a/bfd/configure +++ b/bfd/configure @@ -12890,6 +12890,16 @@ fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_VASPRINTF $ac_have_decl _ACEOF +ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" +if test "x$ac_cv_have_decl_strnlen" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNLEN $ac_have_decl +_ACEOF diff --git a/bfd/configure.ac b/bfd/configure.ac index 07a75ed1626..fec067b2135 100644 --- a/bfd/configure.ac +++ b/bfd/configure.ac @@ -260,7 +260,7 @@ AC_CHECK_HEADERS(fcntl.h sys/file.h sys/resource.h sys/stat.h sys/types.h \ AC_CHECK_FUNCS(fcntl fdopen fileno fls getgid getpagesize getrlimit getuid \ sysconf) -AC_CHECK_DECLS([basename, ffs, stpcpy, asprintf, vasprintf]) +AC_CHECK_DECLS([basename, ffs, stpcpy, asprintf, vasprintf, strnlen]) BFD_BINARY_FOPEN diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 77b7ac711e0..be5fd77b838 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2021-07-07 Rainer Orth + + * configure.ac: Check for strnlen declaration. + * configure, config.in: Regenerate. + 2021-07-05 Alan Modra PR 28047 diff --git a/binutils/config.in b/binutils/config.in index e79967c5c14..e6fa66fc41b 100644 --- a/binutils/config.in +++ b/binutils/config.in @@ -55,6 +55,10 @@ */ #undef HAVE_DECL_STPCPY +/* Define to 1 if you have the declaration of `strnlen', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNLEN + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H diff --git a/binutils/configure b/binutils/configure index bf6461dab1e..82640b8b234 100755 --- a/binutils/configure +++ b/binutils/configure @@ -13642,6 +13642,16 @@ fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STPCPY $ac_have_decl _ACEOF +ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" +if test "x$ac_cv_have_decl_strnlen" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNLEN $ac_have_decl +_ACEOF # Link in zlib if we can. This allows us to read compressed debug diff --git a/binutils/configure.ac b/binutils/configure.ac index b8ab642e068..b2d0be00b60 100644 --- a/binutils/configure.ac +++ b/binutils/configure.ac @@ -265,7 +265,7 @@ if test $bu_cv_header_utime_h = yes; then AC_DEFINE(HAVE_GOOD_UTIME_H, 1, [Does define struct utimbuf?]) fi -AC_CHECK_DECLS([asprintf, environ, getc_unlocked, sbrk, stpcpy]) +AC_CHECK_DECLS([asprintf, environ, getc_unlocked, sbrk, stpcpy, strnlen]) # Link in zlib if we can. This allows us to read compressed debug # sections. This is used only by readelf.c (objdump uses bfd for -- 2.30.2