diff --git a/libports/src/lib/libc/malloc.cc b/libports/src/lib/libc/malloc.cc
index 8173365e9..0d47da4a8 100644
--- a/libports/src/lib/libc/malloc.cc
+++ b/libports/src/lib/libc/malloc.cc
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
#include
#include
@@ -90,6 +91,8 @@ class Malloc : public Genode::Allocator
}
}
+ ~Malloc() { PDBG("CALLED"); }
+
/**
* Allocator interface
*/
@@ -157,8 +160,14 @@ class Malloc : public Genode::Allocator
static Genode::Allocator *allocator()
{
- static Malloc _m(Genode::env()->heap());
- return &_m;
+ static bool constructed = 0;
+ static char placeholder[sizeof(Malloc)];
+ if (!constructed) {
+ Genode::construct_at(placeholder, Genode::env()->heap());
+ constructed = 1;
+ }
+
+ return reinterpret_cast(placeholder);
}