diff options
author | Cory Fields <cory-nospam-@coryfields.com> | 2014-04-09 22:40:33 -0400 |
---|---|---|
committer | Cory Fields <cory-nospam-@coryfields.com> | 2014-04-10 22:27:09 -0400 |
commit | ffc6b678b9d12a8f963ab362b952fd6b7e6c4ec7 (patch) | |
tree | 91324e07fe007216b2d30272114778a59739134d /src/compat/glibc_compat.cpp | |
parent | 4c6cab2c5dbc6ce00970a3e579f7dd5dbcfcf03a (diff) |
build: add glibc/libstdc++ back-compat stubs
glibc/libstdc++ have added new symbols in later releases. When running a new
binary against an older glibc, the run-time linker is unable to resolve the
new symbols and the binary refuses to run.
This can be fixed by adding our own versions of those functions, so that the
build-time linker does not emit undefined symbols for them.
This enables our binary releases to work on older Linux distros, while not
incurring the downsides of a fully static binary.
Diffstat (limited to 'src/compat/glibc_compat.cpp')
-rw-r--r-- | src/compat/glibc_compat.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/compat/glibc_compat.cpp b/src/compat/glibc_compat.cpp new file mode 100644 index 0000000000..5b73e6051a --- /dev/null +++ b/src/compat/glibc_compat.cpp @@ -0,0 +1,19 @@ +#include "bitcoin-config.h" +#include <cstddef> +#include <sys/select.h> + +// Prior to GLIBC_2.14, memcpy was aliased to memmove. +extern "C" void* memmove(void* a, const void* b, size_t c); +extern "C" void* memcpy(void* a, const void* b, size_t c) +{ + return memmove(a, b, c); +} + +extern "C" void __chk_fail (void) __attribute__((__noreturn__)); +extern "C" FDELT_TYPE __fdelt_warn(FDELT_TYPE a) +{ + if (a >= FD_SETSIZE) + __chk_fail (); + return a / __NFDBITS; +} +extern "C" FDELT_TYPE __fdelt_chk(FDELT_TYPE) __attribute__((weak, alias("__fdelt_warn"))); |