diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc index cac9e38ad85..afbddbfd030 100644 --- a/src/libmain/shared.cc +++ b/src/libmain/shared.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -408,3 +409,16 @@ PrintFreed::~PrintFreed() } } // namespace nix + +typedef void (*cxa_throw_type)(void *, void *, void (*) (void *)); + +void __cxa_throw(void * exc, void * tinfo_, void (*dest)(void *)) +{ + auto * tinfo = (std::type_info *) tinfo_; + + if (*tinfo == typeid(std::logic_error)) + abort(); + + static auto orig_cxa_throw = (cxa_throw_type) dlsym(RTLD_NEXT, "__cxa_throw"); + orig_cxa_throw(exc, tinfo_, dest); +}