about summary refs log tree commit diff stats
path: root/src/elfs
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-02-06 18:20:11 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-02-06 18:20:11 +0100
commitee2580a57fae19e1c47a1af03dcfb3edffe697b3 (patch)
tree702dfb0ae7170c0a33c1761fb17cb801d73102f8 /src/elfs
parent255d5c661e0cf1a4d2bd2664b2cc8cc7587b6226 (diff)
downloadbox64-ee2580a57fae19e1c47a1af03dcfb3edffe697b3.tar.gz
box64-ee2580a57fae19e1c47a1af03dcfb3edffe697b3.zip
Reworked, again, exit process
Diffstat (limited to 'src/elfs')
-rw-r--r--src/elfs/elfloader.c2
-rw-r--r--src/elfs/elfloader_private.h5
2 files changed, 7 insertions, 0 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index be7b47b2..0b09f2db 100644
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -1383,6 +1383,8 @@ void RunElfFini(elfheader_t* h, x64emu_t *emu)
     if(!h || h->fini_done || !h->init_done)
         return;
     h->fini_done = 1;
+    // Call the registered cxa_atexit functions
+    CallCleanup(emu, h);
 #ifdef ANDROID
     // TODO: Fix .fini_array on Android
     printf_log(LOG_DEBUG, "Android does not support Fini for %s\n", ElfName(h));
diff --git a/src/elfs/elfloader_private.h b/src/elfs/elfloader_private.h
index 59b9b6ac..f13be551 100644
--- a/src/elfs/elfloader_private.h
+++ b/src/elfs/elfloader_private.h
@@ -5,6 +5,7 @@ typedef struct library_s library_t;
 typedef struct needed_libs_s needed_libs_t;
 typedef struct kh_mapsymbols_s kh_mapsymbols_t;
 typedef struct kh_defaultversion_s kh_defaultversion_t;
+typedef struct cleanup_s cleanup_t;
 
 #include <elf.h>
 #include "elfloader.h"
@@ -112,6 +113,10 @@ typedef struct elfheader_s {
     FILE*       file;
     int         fileno;
 
+    cleanup_t           *cleanups;          // atexit functions
+    int                 clean_sz;
+    int                 clean_cap;
+
     kh_mapsymbols_t   *mapsymbols;
     kh_mapsymbols_t   *weaksymbols;
     kh_mapsymbols_t   *localsymbols;