diff options
Diffstat (limited to 'elfcpp')
-rw-r--r-- | elfcpp/ChangeLog | 9 | ||||
-rw-r--r-- | elfcpp/elfcpp_swap.h | 16 |
2 files changed, 20 insertions, 5 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. |