From 35f2bcf29686b9445627de671289a7df55c9f027 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sat, 28 Jan 2023 22:36:21 +0100 Subject: Fixed another regression from last lib init/fini refactor (fixed SiliconZero crash at load) --- src/wrapped/wrappedlibdl.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/wrapped/wrappedlibdl.c b/src/wrapped/wrappedlibdl.c index 3ad6169f..f47f15ed 100755 --- a/src/wrapped/wrappedlibdl.c +++ b/src/wrapped/wrappedlibdl.c @@ -108,17 +108,15 @@ void* my_dlopen(x64emu_t* emu, void *filename, int flag) // check if alread dlopenned... for (size_t i=MIN_NLIB; ilib_sz; ++i) { if(IsSameLib(dl->libs[i], rfilename)) { - if(dl->count[i]==0 && dl->dlopened[i]) { // need to lauch init again! - if(flag&0x4) { + if(flag&0x4) { // don't re-open in RTLD_NOLOAD mode + if(dl->count[i]==0 && dl->dlopened[i]) { printf_dlsym(LOG_DEBUG, " => not present anymore\n"); return NULL; // don't re-open in RTLD_NOLOAD mode } - int idx = GetElfIndex(dl->libs[i]); - if(idx!=-1) { - printf_dlsym(LOG_DEBUG, "dlopen: Recycling, calling Init for %p (%s)\n", (void*)(i+1), rfilename); - ReloadLibrary(dl->libs[i], emu); // reset memory image, redo reloc, run inits - } + printf_dlsym(LOG_DEBUG, "dlopen: Recycling %s/%p count=%ld not inc (dlopened=%ld, elf_index=%d)\n", rfilename, (void*)(i+1), dl->count[i], dl->dlopened[i], GetElfIndex(dl->libs[i])); + return (void*)(i+1); } + IncRefCount(dl->libs[i], emu); dl->count[i] = dl->count[i]+1; printf_dlsym(LOG_DEBUG, "dlopen: Recycling %s/%p count=%ld (dlopened=%ld, elf_index=%d)\n", rfilename, (void*)(i+1), dl->count[i], dl->dlopened[i], GetElfIndex(dl->libs[i])); return (void*)(i+1); -- cgit 1.4.1