#include <stdint.h>
#include <stddef.h>
typedef int (*cxa_atexit_fn)(void (*)(void *), void *, void *);
typedef void (*dtor_fn)(void);
static cxa_atexit_fn CXA_ATEXIT = NULL;
static dtor_fn DTORS = NULL;
void __gcore_set_fns(cxa_atexit_fn cxa_atexit, dtor_fn dtors) {
CXA_ATEXIT = cxa_atexit;
DTORS = dtors;
}
int __cxa_atexit(void (*f)(void *), void *arg, void *dso_handle) {
return CXA_ATEXIT(f, arg, dso_handle);
}
static void call(void *f) {
((void (*)(void))(uintptr_t)f)();
}
int atexit(void (*f)(void)) {
return __cxa_atexit(call, (void *)(uintptr_t)f, NULL);
}
__attribute__((visibility("hidden")))
void __wasm_call_dtors(void) {
DTORS();
}