diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-02-06 18:20:11 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-02-06 18:20:11 +0100 |
| commit | ee2580a57fae19e1c47a1af03dcfb3edffe697b3 (patch) | |
| tree | 702dfb0ae7170c0a33c1761fb17cb801d73102f8 /src/elfs | |
| parent | 255d5c661e0cf1a4d2bd2664b2cc8cc7587b6226 (diff) | |
| download | box64-ee2580a57fae19e1c47a1af03dcfb3edffe697b3.tar.gz box64-ee2580a57fae19e1c47a1af03dcfb3edffe697b3.zip | |
Reworked, again, exit process
Diffstat (limited to 'src/elfs')
| -rw-r--r-- | src/elfs/elfloader.c | 2 | ||||
| -rw-r--r-- | src/elfs/elfloader_private.h | 5 |
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; |