diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog index dc37f65bab..ee6db3a060 100644 --- a/elfcpp/ChangeLog +++ b/elfcpp/ChangeLog @@ -1,3 +1,12 @@ +2020-06-26 Nick Alcock + + * elfcpp_swap.h (bswap_16): Do not assume that presence of + means this is declared. Make static inline, matching + recent change to libctf, since there is no non-inline definition + of these functions. + (bswap_32): Likewise. + (bswap_64): Likewise. + 2020-06-18 Fangrui Song PR gold/26039 diff --git a/elfcpp/elfcpp_swap.h b/elfcpp/elfcpp_swap.h index 3c9d25997b..61b3ba5752 100644 --- a/elfcpp/elfcpp_swap.h +++ b/elfcpp/elfcpp_swap.h @@ -46,15 +46,19 @@ #ifdef HAVE_BYTESWAP_H #include -#else +#endif // defined(HAVE_BYTESWAP_H) + // Provide our own versions of the byteswap functions. -inline uint16_t +#if !HAVE_DECL_BSWAP_16 +static inline uint16_t bswap_16(uint16_t v) { return ((v >> 8) & 0xff) | ((v & 0xff) << 8); } +#endif // !HAVE_DECL_BSWAP16 -inline uint32_t +#if !HAVE_DECL_BSWAP_32 +static inline uint32_t bswap_32(uint32_t v) { return ( ((v & 0xff000000) >> 24) @@ -62,8 +66,10 @@ bswap_32(uint32_t v) | ((v & 0x0000ff00) << 8) | ((v & 0x000000ff) << 24)); } +#endif // !HAVE_DECL_BSWAP32 -inline uint64_t +#if !HAVE_DECL_BSWAP_64 +static inline uint64_t bswap_64(uint64_t v) { return ( ((v & 0xff00000000000000ULL) >> 56) @@ -75,7 +81,7 @@ bswap_64(uint64_t v) | ((v & 0x000000000000ff00ULL) << 40) | ((v & 0x00000000000000ffULL) << 56)); } -#endif // !defined(HAVE_BYTESWAP_H) +#endif // !HAVE_DECL_BSWAP64 // gcc 4.3 and later provides __builtin_bswap32 and __builtin_bswap64. diff --git a/gold/ChangeLog b/gold/ChangeLog index 78b5579cd8..9e06ff80c2 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2020-06-26 Nick Alcock + + * configure.ac: Check for bswap_16, bswap_32, and bswap_64 decls. + * configure: Regenerated. + * config.h.in: Likewise. + 2020-06-24 Nick Clifton * target-reloc.h (issue_discarded_error): Initialise the diff --git a/gold/config.in b/gold/config.in index 7bac34aab2..aaad1bee70 100644 --- a/gold/config.in +++ b/gold/config.in @@ -52,6 +52,18 @@ don't. */ #undef HAVE_DECL_BASENAME +/* Define to 1 if you have the declaration of `bswap_16', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_16 + +/* Define to 1 if you have the declaration of `bswap_32', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_32 + +/* Define to 1 if you have the declaration of `bswap_64', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_64 + /* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */ #undef HAVE_DECL_FFS diff --git a/gold/configure b/gold/configure index 474c69a125..199a739e7d 100755 --- a/gold/configure +++ b/gold/configure @@ -2167,6 +2167,52 @@ fi } # ac_fn_cxx_check_header_mongrel +# ac_fn_cxx_check_decl LINENO SYMBOL VAR INCLUDES +# ----------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_cxx_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_decl + # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -2279,52 +2325,6 @@ $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func - -# ac_fn_cxx_check_decl LINENO SYMBOL VAR INCLUDES -# ----------------------------------------------- -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_cxx_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. @@ -9780,6 +9780,41 @@ fi done +ac_fn_cxx_check_decl "$LINENO" "bswap_16" "ac_cv_have_decl_bswap_16" "#include +" +if test "x$ac_cv_have_decl_bswap_16" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BSWAP_16 $ac_have_decl +_ACEOF +ac_fn_cxx_check_decl "$LINENO" "bswap_32" "ac_cv_have_decl_bswap_32" "#include +" +if test "x$ac_cv_have_decl_bswap_32" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BSWAP_32 $ac_have_decl +_ACEOF +ac_fn_cxx_check_decl "$LINENO" "bswap_64" "ac_cv_have_decl_bswap_64" "#include +" +if test "x$ac_cv_have_decl_bswap_64" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BSWAP_64 $ac_have_decl +_ACEOF + + for ac_header in windows.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" diff --git a/gold/configure.ac b/gold/configure.ac index c4c93a036c..eca4f01c11 100644 --- a/gold/configure.ac +++ b/gold/configure.ac @@ -602,6 +602,9 @@ AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map) AC_CHECK_HEADERS(ext/hash_map ext/hash_set) AC_CHECK_HEADERS(byteswap.h) +dnl Check for bswap_{16,32,64} +AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64], [], [], [[#include ]]) + dnl When plugins enabled dynamic loader interface is required. Check headers dnl which may provide this interface. Add the necessary library to link. AC_CHECK_HEADERS(windows.h) diff --git a/libctf/ChangeLog b/libctf/ChangeLog index a8217fa432..743237e3d3 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,3 +1,15 @@ +2020-06-26 Nick Alcock + + PR libctf/25120 + * configure.ac: Check for bswap_16, bswap_32, and bswap_64 decls. + * swap.h (bswap_16): Do not assume that presence of + means this is declared. + (bswap_32): Likewise. + (bswap_64): Likewise. + (bswap_identity_64): Remove, unused. + * configure: Regenerated. + * config.h.in: Likewise. + 2020-06-26 Nick Alcock PR libctf/25120 diff --git a/libctf/config.h.in b/libctf/config.h.in index 264cbc3e49..ac0eb3e12f 100644 --- a/libctf/config.h.in +++ b/libctf/config.h.in @@ -13,6 +13,18 @@ don't. */ #undef HAVE_DECL_ASPRINTF +/* Define to 1 if you have the declaration of `bswap_16', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_16 + +/* Define to 1 if you have the declaration of `bswap_32', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_32 + +/* Define to 1 if you have the declaration of `bswap_64', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_64 + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H diff --git a/libctf/configure b/libctf/configure index e5493b3169..58263e5632 100755 --- a/libctf/configure +++ b/libctf/configure @@ -13028,6 +13028,40 @@ cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ASPRINTF $ac_have_decl _ACEOF +ac_fn_c_check_decl "$LINENO" "bswap_16" "ac_cv_have_decl_bswap_16" "#include +" +if test "x$ac_cv_have_decl_bswap_16" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BSWAP_16 $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "bswap_32" "ac_cv_have_decl_bswap_32" "#include +" +if test "x$ac_cv_have_decl_bswap_32" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BSWAP_32 $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "bswap_64" "ac_cv_have_decl_bswap_64" "#include +" +if test "x$ac_cv_have_decl_bswap_64" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BSWAP_64 $ac_have_decl +_ACEOF + diff --git a/libctf/configure.ac b/libctf/configure.ac index 7f2a713b93..f7e0cace52 100644 --- a/libctf/configure.ac +++ b/libctf/configure.ac @@ -100,6 +100,8 @@ AC_CHECK_HEADERS(byteswap.h endian.h) AC_CHECK_FUNCS(pread) AC_CHECK_DECLS([asprintf]) +dnl Check for bswap_{16,32,64} +AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64], [], [], [[#include ]]) dnl Check for qsort_r. (Taken from gnulib.) AC_CHECK_FUNCS_ONCE([qsort_r]) diff --git a/libctf/swap.h b/libctf/swap.h index d526f7e267..c8962a2718 100644 --- a/libctf/swap.h +++ b/libctf/swap.h @@ -25,15 +25,19 @@ #ifdef HAVE_BYTESWAP_H #include -#else +#endif /* defined(HAVE_BYTESWAP_H) */ /* Provide our own versions of the byteswap functions. */ + +#if !HAVE_DECL_BSWAP_16 static inline uint16_t bswap_16 (uint16_t v) { return ((v >> 8) & 0xff) | ((v & 0xff) << 8); } +#endif /* !HAVE_DECL_BSWAP16 */ +#if !HAVE_DECL_BSWAP_32 static inline uint32_t bswap_32 (uint32_t v) { @@ -42,13 +46,9 @@ bswap_32 (uint32_t v) | ((v & 0x0000ff00) << 8) | ((v & 0x000000ff) << 24)); } +#endif /* !HAVE_DECL_BSWAP32 */ -static inline uint64_t -bswap_identity_64 (uint64_t v) -{ - return v; -} - +#if !HAVE_DECL_BSWAP_64 static inline uint64_t bswap_64 (uint64_t v) { @@ -61,6 +61,6 @@ bswap_64 (uint64_t v) | ((v & 0x000000000000ff00ULL) << 40) | ((v & 0x00000000000000ffULL) << 56)); } -#endif /* !defined(HAVE_BYTESWAP_H) */ +#endif /* !HAVE_DECL_BSWAP64 */ #endif /* !defined(_CTF_SWAP_H) */