aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--elfcpp/ChangeLog9
-rw-r--r--elfcpp/elfcpp_swap.h16
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/config.in12
-rwxr-xr-xgold/configure127
-rw-r--r--gold/configure.ac3
-rw-r--r--libctf/ChangeLog12
-rw-r--r--libctf/config.h.in12
-rwxr-xr-xlibctf/configure34
-rw-r--r--libctf/configure.ac2
-rw-r--r--libctf/swap.h16
11 files changed, 190 insertions, 59 deletions
diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog
index dc37f65..ee6db3a 100644
--- a/elfcpp/ChangeLog
+++ b/elfcpp/ChangeLog
@@ -1,3 +1,12 @@
+2020-06-26 Nick Alcock <nick.alcock@oracle.com>
+
+ * elfcpp_swap.h (bswap_16): Do not assume that presence of
+ <byteswap.h> 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 <i@maskray.me>
PR gold/26039
diff --git a/elfcpp/elfcpp_swap.h b/elfcpp/elfcpp_swap.h
index 3c9d259..61b3ba5 100644
--- a/elfcpp/elfcpp_swap.h
+++ b/elfcpp/elfcpp_swap.h
@@ -46,15 +46,19 @@
#ifdef HAVE_BYTESWAP_H
#include <byteswap.h>
-#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 78b5579..9e06ff8 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2020-06-26 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure.ac: Check for bswap_16, bswap_32, and bswap_64 decls.
+ * configure: Regenerated.
+ * config.h.in: Likewise.
+
2020-06-24 Nick Clifton <nickc@redhat.com>
* target-reloc.h (issue_discarded_error): Initialise the
diff --git a/gold/config.in b/gold/config.in
index 7bac34a..aaad1be 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 474c69a..199a739 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 <byteswap.h>
+"
+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 <byteswap.h>
+"
+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 <byteswap.h>
+"
+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 c4c93a0..eca4f01 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 <byteswap.h>]])
+
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 a8217fa..743237e 100644
--- a/libctf/ChangeLog
+++ b/libctf/ChangeLog
@@ -1,6 +1,18 @@
2020-06-26 Nick Alcock <nick.alcock@oracle.com>
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 <byteswap.h>
+ 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 <nick.alcock@oracle.com>
+
+ PR libctf/25120
* ctf-impl.h (_libctf_printflike_): Add non-GNU-C fallback.
(_libctf_unlikely_): Likewise.
(_libctf_unused): Likewise.
diff --git a/libctf/config.h.in b/libctf/config.h.in
index 264cbc3..ac0eb3e 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 <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
diff --git a/libctf/configure b/libctf/configure
index e5493b3..58263e5 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 <byteswap.h>
+"
+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 <byteswap.h>
+"
+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 <byteswap.h>
+"
+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 7f2a713..f7e0cac 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 <byteswap.h>]])
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 d526f7e..c8962a2 100644
--- a/libctf/swap.h
+++ b/libctf/swap.h
@@ -25,15 +25,19 @@
#ifdef HAVE_BYTESWAP_H
#include <byteswap.h>
-#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) */