mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-12 21:02:38 -03:00
52f0be3a93
In glib 2.13 memcpy was changed such that the way it copied bytes was reversed. This caused all sorts of issues for existing software, which depended on the existing behavior (when they should have been using memmove). See: https://sourceware.org/bugzilla/show_bug.cgi?id=12518 https://bugzilla.redhat.com/show_bug.cgi?id=638477 Now that we require glibc 2.17+ (#17538), we should be well clear of having to maintain our memcpy -> memmove aliasing, which was introduced in #4339.
62 lines
1.4 KiB
C++
62 lines
1.4 KiB
C++
// Copyright (c) 2009-2020 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#if defined(HAVE_CONFIG_H)
|
|
#include <config/bitcoin-config.h>
|
|
#endif
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
|
|
#if defined(__i386__) || defined(__arm__)
|
|
|
|
extern "C" int64_t __udivmoddi4(uint64_t u, uint64_t v, uint64_t* rp);
|
|
|
|
extern "C" int64_t __wrap___divmoddi4(int64_t u, int64_t v, int64_t* rp)
|
|
{
|
|
int32_t c1 = 0, c2 = 0;
|
|
int64_t uu = u, vv = v;
|
|
int64_t w;
|
|
int64_t r;
|
|
|
|
if (uu < 0) {
|
|
c1 = ~c1, c2 = ~c2, uu = -uu;
|
|
}
|
|
if (vv < 0) {
|
|
c1 = ~c1, vv = -vv;
|
|
}
|
|
|
|
w = __udivmoddi4(uu, vv, (uint64_t*)&r);
|
|
if (c1)
|
|
w = -w;
|
|
if (c2)
|
|
r = -r;
|
|
|
|
*rp = r;
|
|
return w;
|
|
}
|
|
#endif
|
|
|
|
extern "C" float log2f_old(float x);
|
|
#ifdef __i386__
|
|
__asm(".symver log2f_old,log2f@GLIBC_2.1");
|
|
#elif defined(__amd64__)
|
|
__asm(".symver log2f_old,log2f@GLIBC_2.2.5");
|
|
#elif defined(__arm__)
|
|
__asm(".symver log2f_old,log2f@GLIBC_2.4");
|
|
#elif defined(__aarch64__)
|
|
__asm(".symver log2f_old,log2f@GLIBC_2.17");
|
|
#elif defined(__powerpc64__)
|
|
# ifdef WORDS_BIGENDIAN
|
|
__asm(".symver log2f_old,log2f@GLIBC_2.3");
|
|
# else
|
|
__asm(".symver log2f_old,log2f@GLIBC_2.17");
|
|
# endif
|
|
#elif defined(__riscv)
|
|
__asm(".symver log2f_old,log2f@GLIBC_2.27");
|
|
#endif
|
|
extern "C" float __wrap_log2f(float x)
|
|
{
|
|
return log2f_old(x);
|
|
}
|