diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-04-10 18:51:07 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-04-10 18:51:16 +0200 |
| commit | 5d6307184941f6f2171153df6a5bb0105fcbce9e (patch) | |
| tree | c0c31a50eac0c58725ba8418154ca48a3c4ae2a9 /src/include | |
| parent | 8c98c7b67580b2807d37fa03f59416f4526df770 (diff) | |
| download | box64-5d6307184941f6f2171153df6a5bb0105fcbce9e.tar.gz box64-5d6307184941f6f2171153df6a5bb0105fcbce9e.zip | |
[ELFLOADER] Improved handling of Failed-to-load library (and unloading of libs too)
Diffstat (limited to 'src/include')
| -rwxr-xr-x | src/include/box64context.h | 2 | ||||
| -rwxr-xr-x | src/include/librarian.h | 2 | ||||
| -rwxr-xr-x | src/include/library.h | 6 |
3 files changed, 6 insertions, 4 deletions
diff --git a/src/include/box64context.h b/src/include/box64context.h index c4e88a83..2424c130 100755 --- a/src/include/box64context.h +++ b/src/include/box64context.h @@ -213,6 +213,8 @@ void print_cycle_log(int loglevel); // return the index of the added header int AddElfHeader(box64context_t* ctx, elfheader_t* head); +// remove an elf from list (but list is never reduced, so there can be holes) +void RemoveElfHeader(box64context_t* ctx, elfheader_t* head); // return the tlsbase (negative) for the new TLS partition created (no partition index is stored in the context) int AddTLSPartition(box64context_t* context, int tlssize); diff --git a/src/include/librarian.h b/src/include/librarian.h index d374ae93..b7a46880 100755 --- a/src/include/librarian.h +++ b/src/include/librarian.h @@ -32,6 +32,8 @@ int GetLocalSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, ui elfheader_t* GetGlobalSymbolElf(lib_t *maplib, const char* name, int version, const char* vername); int IsGlobalNoWeakSymbolInNative(lib_t *maplib, const char* name, int version, const char* vername, const char* defver); +void MapLibRemoveLib(lib_t* maplib, library_t* lib); + const char* GetMaplibDefaultVersion(lib_t *maplib, lib_t *local_maplib, int isweak, const char* symname); const char* FindSymbolName(lib_t *maplib, void* p, void** start, uint64_t* sz, const char** libname, void** base, library_t** lib); diff --git a/src/include/library.h b/src/include/library.h index 29c7061d..35d1d40a 100755 --- a/src/include/library.h +++ b/src/include/library.h @@ -18,10 +18,6 @@ typedef struct elfheader_s elfheader_t; library_t *NewLibrary(const char* path, box64context_t* box64); int AddSymbolsLibrary(lib_t* maplib, library_t* lib, x64emu_t* emu); int FinalizeLibrary(library_t* lib, lib_t* local_maplib, int bindnow, x64emu_t* emu); -int ReloadLibrary(library_t* lib, x64emu_t* emu); -int FiniLibrary(library_t* lib, x64emu_t* emu); -void InactiveLibrary(library_t* lib); -void Free1Library(library_t **lib, x64emu_t* emu); char* GetNameLib(library_t *lib); int IsSameLib(library_t* lib, const char* path); // check if lib is same (path -> name) @@ -37,5 +33,7 @@ int GetElfIndex(library_t* lib); // -1 if no elf (i.e. wrapped) elfheader_t* GetElf(library_t* lib); // NULL if no elf (i.e. wrapped) void* GetHandle(library_t* lib); // NULL if not wrapped void IncRefCount(library_t* lib, x64emu_t* emu); +int DecRefCount(library_t** lib, x64emu_t* emu); // might unload the lib! +int GetRefCount(library_t* lib); #endif //__LIBRARY_H_ |