fix(libc): invoke guest exit callbacks with the SysV ABI

This commit is contained in:
SamG-Coder authored and boykopovar committed 2026-10-01 12:00:49 +03:00
1 parent d9d34a47ac
commit 4e2b200a91
1 file changed
+19 -2
+19 -2
View File
@@ -27,6 +27,19 @@ std::exception_ptr shutdownFailure;
std::stop_source shutdownSource;
std::atomic<bool> exitRequested{false};
std::atomic<bool> exitStarted{false};
using GuestExitCallback = void (APS5_VABI*)();
std::mutex exitCallbackMutex;
std::vector<GuestExitCallback> exitCallbacks;
void runGuestExitCallback() {
GuestExitCallback callback;
{
std::lock_guard lock(exitCallbackMutex);
callback = exitCallbacks.back();
exitCallbacks.pop_back();
}
callback();
}
}
@@ -139,10 +152,14 @@ int* APS5_VABI __error_nid_postfix() {
std::abort();
}
int APS5_VABI atexit_nid_postfix(atexit_func_t func) {
int APS5_VABI atexit_nid_postfix(GuestExitCallback func) {
if (func == nullptr)
return 0;
return std::atexit(func);
std::lock_guard lock(exitCallbackMutex);
exitCallbacks.push_back(func);
const int result = std::atexit(runGuestExitCallback);
if (result != 0) exitCallbacks.pop_back();
return result;
}
}