Skip to content

Commit

Permalink
Terminate if pure virtual function is called
Browse files Browse the repository at this point in the history
Fixes #2229
  • Loading branch information
chelmuth committed Mar 15, 2017
1 parent d82bd3c commit 40f319e
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions repos/base/src/lib/cxx/misc.cc
Expand Up @@ -18,19 +18,20 @@
#include <base/thread.h>
#include <util/string.h>

using namespace Genode;
#include <cxxabi.h>


extern "C" void __cxa_pure_virtual()
{
Genode::warning("cxa pure virtual function called, return addr is ",
__builtin_return_address(0));
Genode::error(__func__, " called, return addr is ", __builtin_return_address(0));
std::terminate();
}


extern "C" void __pure_virtual()
{
Genode::warning("pure virtual function called");
Genode::error(__func__, " called, return addr is ", __builtin_return_address(0));
std::terminate();
}


Expand Down Expand Up @@ -93,7 +94,7 @@ void __register_frame(void *) { }
*/
extern "C" __attribute__((weak)) void raise()
{
warning("cxx: raise called - not implemented");
Genode::warning("cxx: raise called - not implemented");
}


Expand All @@ -104,7 +105,7 @@ extern "C" __attribute__((weak)) void raise()
extern "C" void *abort(void)
{
Genode::Thread const * const myself = Genode::Thread::myself();
Thread::Name name = "unknown";
Genode::Thread::Name name = "unknown";

if (myself)
name = myself->name();
Expand All @@ -113,9 +114,9 @@ extern "C" void *abort(void)

/* Notify the parent of failure */
if (name != "main")
env_deprecated()->parent()->exit(1);
Genode::env_deprecated()->parent()->exit(1);

sleep_forever();
Genode::sleep_forever();
return 0;
}

Expand Down

0 comments on commit 40f319e

Please sign in to comment.