Merge pull request #4042
pull/323/head05c20a5
build: add symbol for upcoming gcc 4.9's libstdc++ (Cory Fields)49a3352
gitian-linux: --enable-glibc-back-compat (Warren Togami)d5aab70
build: add an option for enabling glibc back-compat (Cory Fields)ffc6b67
build: add glibc/libstdc++ back-compat stubs (Cory Fields)
commit
bbe53f61db
@ -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")));
|
@ -0,0 +1,87 @@
|
|||||||
|
#include <cstddef>
|
||||||
|
#include <istream>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <typeinfo>
|
||||||
|
|
||||||
|
#ifndef _GLIBCXX_USE_NOEXCEPT
|
||||||
|
#define _GLIBCXX_USE_NOEXCEPT throw()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace std {
|
||||||
|
|
||||||
|
const char* bad_exception::what() const throw()
|
||||||
|
{
|
||||||
|
return "std::bad_exception";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* bad_cast::what() const throw()
|
||||||
|
{
|
||||||
|
return "std::bad_cast";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* bad_alloc::what() const throw()
|
||||||
|
{
|
||||||
|
return "std::bad_alloc";
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace __detail
|
||||||
|
{
|
||||||
|
struct _List_node_base
|
||||||
|
{
|
||||||
|
void _M_hook(std::__detail::_List_node_base* const __position) throw () __attribute__((used))
|
||||||
|
{
|
||||||
|
_M_next = __position;
|
||||||
|
_M_prev = __position->_M_prev;
|
||||||
|
__position->_M_prev->_M_next = this;
|
||||||
|
__position->_M_prev = this;
|
||||||
|
}
|
||||||
|
void _M_unhook() __attribute__((used))
|
||||||
|
{
|
||||||
|
_List_node_base* const __next_node = _M_next;
|
||||||
|
_List_node_base* const __prev_node = _M_prev;
|
||||||
|
__prev_node->_M_next = __next_node;
|
||||||
|
__next_node->_M_prev = __prev_node;
|
||||||
|
}
|
||||||
|
_List_node_base* _M_next;
|
||||||
|
_List_node_base* _M_prev;
|
||||||
|
};
|
||||||
|
} // namespace detail
|
||||||
|
|
||||||
|
template ostream& ostream::_M_insert(bool);
|
||||||
|
template ostream& ostream::_M_insert(long);
|
||||||
|
template ostream& ostream::_M_insert(double);
|
||||||
|
template ostream& ostream::_M_insert(unsigned long);
|
||||||
|
template ostream& ostream::_M_insert(const void*);
|
||||||
|
template ostream& __ostream_insert(ostream&, const char*, streamsize);
|
||||||
|
template istream& istream::_M_extract(long&);
|
||||||
|
template istream& istream::_M_extract(unsigned short&);
|
||||||
|
|
||||||
|
out_of_range::~out_of_range() _GLIBCXX_USE_NOEXCEPT { }
|
||||||
|
|
||||||
|
// Used with permission.
|
||||||
|
// See: https://github.com/madlib/madlib/commit/c3db418c0d34d6813608f2137fef1012ce03043d
|
||||||
|
|
||||||
|
void
|
||||||
|
ctype<char>::_M_widen_init() const {
|
||||||
|
char __tmp[sizeof(_M_widen)];
|
||||||
|
for (unsigned __i = 0; __i < sizeof(_M_widen); ++__i)
|
||||||
|
__tmp[__i] = __i;
|
||||||
|
do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen);
|
||||||
|
|
||||||
|
_M_widen_ok = 1;
|
||||||
|
// Set _M_widen_ok to 2 if memcpy can't be used.
|
||||||
|
for (unsigned __i = 0; __i < sizeof(_M_widen); ++__i)
|
||||||
|
if (__tmp[__i] != _M_widen[__i]) {
|
||||||
|
_M_widen_ok = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__));
|
||||||
|
void __throw_out_of_range_fmt(const char* err, ...)
|
||||||
|
{
|
||||||
|
// Safe and over-simplified version. Ignore the format and print it as-is.
|
||||||
|
__throw_out_of_range(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
}// namespace std
|
Loading…
Reference in new issue