From 104cf8a58b5c15b19d961f66375ff70c8d14a8cf Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 31 May 2021 18:04:25 +0200 Subject: Some adjustements to elfloader needed libs loading --- src/box64context.c | 6 ++++++ src/librarian/librarian.c | 16 ++++++++++------ src/wrapped/wrappedlibc_private.h | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/box64context.c b/src/box64context.c index 2688b124..4b4ae956 100755 --- a/src/box64context.c +++ b/src/box64context.c @@ -313,6 +313,9 @@ void add_neededlib(needed_libs_t* needed, library_t* lib) { if(!needed) return; + for(int i=0; isize; ++i) + if(needed->libs[i] == lib) + return; if(needed->size == needed->cap) { needed->cap += 8; needed->libs = (library_t**)realloc(needed->libs, needed->cap*sizeof(library_t*)); @@ -335,6 +338,9 @@ void add_dependedlib(needed_libs_t* depended, library_t* lib) { if(!depended) return; + for(int i=0; isize; ++i) + if(depended->libs[i] == lib) + return; if(depended->size == depended->cap) { depended->cap += 8; depended->libs = (library_t**)realloc(depended->libs, depended->cap*sizeof(library_t*)); diff --git a/src/librarian/librarian.c b/src/librarian/librarian.c index 2cec106b..3273eeda 100755 --- a/src/librarian/librarian.c +++ b/src/librarian/librarian.c @@ -170,14 +170,13 @@ void MapLibAddMapLib(lib_t* dest, lib_t* src) return; for(int i=0; ilibsz; ++i) { library_t* lib = src->libraries[i]; - if(!lib) continue; + if(!lib || libraryInMapLib(dest, lib)) continue; + MapLibAddLib(dest, lib); if(lib->maplib && src!=lib->maplib) { //TODO: find why is src!=lib->maplib needed MapLibAddMapLib(dest, lib->maplib); free(lib->maplib); lib->maplib = NULL; } - if(!libraryInMapLib(dest, lib)) - MapLibAddLib(dest, lib); } } @@ -314,13 +313,18 @@ int AddNeededLib(lib_t* maplib, needed_libs_t* neededlibs, library_t* deplib, in int idx = neededlibs->size; // Add libs and symbol for(int i=0; isize; // add dependant libs and init them - for (int i=idx; isize; ++i) - if(AddNeededLib_init(maplib, neededlibs, deplib, local, neededlibs->libs[i], box64, emu)) + for (int i=idx; ilibs[i], box64, emu)) { + printf_log(LOG_INFO, "Error initializing needed lib %s\n", neededlibs->libs[i]->name); if(!allow_missing_libs) return 1; + } return 0; } diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h index 16991f8d..89f70935 100755 --- a/src/wrapped/wrappedlibc_private.h +++ b/src/wrapped/wrappedlibc_private.h @@ -1453,7 +1453,7 @@ GOM(qsort_r, vFEpLLpp) //Weak //GO(quick_exit, //GO(quick_exit, //GO(quotactl, -//GO(raise, +GO(raise, iFi) GO(rand, iFv) GOW(random, lFv) //GOW(random_r, -- cgit 1.4.1