aboutsummaryrefslogtreecommitdiff
path: root/lib/mlibc/options/lsb/generic/dso_exit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mlibc/options/lsb/generic/dso_exit.cpp')
-rw-r--r--lib/mlibc/options/lsb/generic/dso_exit.cpp42
1 files changed, 0 insertions, 42 deletions
diff --git a/lib/mlibc/options/lsb/generic/dso_exit.cpp b/lib/mlibc/options/lsb/generic/dso_exit.cpp
deleted file mode 100644
index b8b239d..0000000
--- a/lib/mlibc/options/lsb/generic/dso_exit.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-
-// for memcpy()
-#include <string.h>
-
-#include <bits/ensure.h>
-#include <mlibc/allocator.hpp>
-
-#include <frg/eternal.hpp>
-#include <frg/vector.hpp>
-
-struct ExitHandler {
- void (*function)(void *);
- void *argument;
- void *dsoHandle;
-};
-
-using ExitQueue = frg::vector<ExitHandler, MemoryAllocator>;
-
-ExitQueue &getExitQueue() {
- // use frg::eternal to prevent the compiler from scheduling the destructor
- // by generating a call to __cxa_atexit().
- static frg::eternal<ExitQueue> singleton(getAllocator());
- return singleton.get();
-}
-
-extern "C" int __cxa_atexit(void (*function)(void *), void *argument, void *handle) {
- ExitHandler handler;
- handler.function = function;
- handler.argument = argument;
- handler.dsoHandle = handle;
- getExitQueue().push(handler);
- return 0;
-}
-
-void __mlibc_do_finalize() {
- ExitQueue &eq = getExitQueue();
- for(size_t i = eq.size(); i > 0; i--) {
- auto handler = &eq[i - 1];
- handler->function(handler->argument);
- }
-}
-