diff options
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; |