libctf, elfcpp, gold: do not assume that <byteswap.h> contains bswap_*
authorNick Alcock <nick.alcock@oracle.com>
Fri, 13 Dec 2019 15:19:17 +0000 (15:19 +0000)
committerNick Alcock <nick.alcock@oracle.com>
Fri, 26 Jun 2020 14:56:39 +0000 (15:56 +0100)
commite755667f94f2579056fb5210eed525dafebb96f3
tree7d4024539b52d471f42cf6f3d9f61d72197043fa
parent866706584c6622bd7f9f595c307422771ce1d564
libctf, elfcpp, gold: do not assume that <byteswap.h> contains bswap_*

At least one C library (uclibc-ng) defines some of these only when
the compiler is GCC.  We might as well test for all three cases and
handle any of them being missing.

Very similar code exists in libctf and split between elfcpp and gold:
fix both.

(Also sync up elfcpp with a change made to libctf swap.h a few months
ago: since there is no out-of-line definition of the bswap replacements,
they should be declared static inline, not just inline, to prevent the
linker generating out-of-line references to them.)

PR libctf/25120
libctf/
* 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.
gold/
* configure.ac: Check for bswap_16, bswap_32, and bswap_64 decls.
* configure: Regenerated.
* config.h.in: Likewise.
elfcpp/
* 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.
elfcpp/ChangeLog
elfcpp/elfcpp_swap.h
gold/ChangeLog
gold/config.in
gold/configure
gold/configure.ac
libctf/ChangeLog
libctf/config.h.in
libctf/configure
libctf/configure.ac
libctf/swap.h