diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-04-10 14:33:56 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-04-10 14:33:56 +0200 |
| commit | 8439a3add954a038b4219af7fad3abd93cdac119 (patch) | |
| tree | 3d9225afd976b1d26f8de6f0ea63d9e4acfc8b6e /src/include | |
| parent | 9b3511cc88ea3c03590ccd9158095086de53c9ed (diff) | |
| download | box64-8439a3add954a038b4219af7fad3abd93cdac119.tar.gz box64-8439a3add954a038b4219af7fad3abd93cdac119.zip | |
[ELFLOADER] Improved handling of default versions
Diffstat (limited to 'src/include')
| -rwxr-xr-x | src/include/box64context.h | 2 | ||||
| -rwxr-xr-x | src/include/elfloader.h | 3 | ||||
| -rwxr-xr-x | src/include/librarian.h | 12 | ||||
| -rwxr-xr-x | src/include/library.h | 6 | ||||
| -rwxr-xr-x | src/include/wrappedlibs.h | 2 |
5 files changed, 14 insertions, 11 deletions
diff --git a/src/include/box64context.h b/src/include/box64context.h index 62e4bad5..c4e88a83 100755 --- a/src/include/box64context.h +++ b/src/include/box64context.h @@ -118,8 +118,6 @@ typedef struct box64context_s { kh_symbolmap_t *almymap; // link to the mysymbolmap if libOpenAL kh_symbolmap_t *vkwrappers; // the map of wrapper for VulkanProcs (TODO: check SDL2) kh_symbolmap_t *vkmymap; // link to the mysymbolmap of libGL - kh_defaultversion_t *globaldefver; // the global default version for symbols (the XXX@@vvvv of symbols) - kh_defaultversion_t *weakdefver; // the weak default version for symbols (the XXX@@vvvv of symbols) vkprocaddess_t vkprocaddress; #ifndef DYNAREC diff --git a/src/include/elfloader.h b/src/include/elfloader.h index c197249d..d5b54145 100755 --- a/src/include/elfloader.h +++ b/src/include/elfloader.h @@ -9,6 +9,7 @@ typedef struct kh_mapsymbols_s kh_mapsymbols_t; typedef struct box64context_s box64context_t; typedef struct x64emu_s x64emu_t; typedef struct needed_libs_s needed_libs_t; +typedef struct kh_defaultversion_s kh_defaultversion_t; #ifdef DYNAREC typedef struct dynablock_s dynablock_t; #endif @@ -67,6 +68,8 @@ int GetVersionIndice(elfheader_t* h, const char* vername); kh_mapsymbols_t* GetMapSymbols(elfheader_t* h); kh_mapsymbols_t* GetWeakSymbols(elfheader_t* h); kh_mapsymbols_t* GetLocalSymbols(elfheader_t* h); +kh_defaultversion_t* GetGlobalDefaultVersion(elfheader_t* h); +kh_defaultversion_t* GetWeakDefaultVersion(elfheader_t* h); void* GetNativeSymbolUnversioned(void* lib, const char* name); diff --git a/src/include/librarian.h b/src/include/librarian.h index 5c1fe0f2..d374ae93 100755 --- a/src/include/librarian.h +++ b/src/include/librarian.h @@ -25,12 +25,14 @@ int AddNeededLib(lib_t* maplib, int local, int bindnow, needed_libs_t* needed, b library_t* GetLibMapLib(lib_t* maplib, const char* name); library_t* GetLibInternal(const char* name); uintptr_t FindGlobalSymbol(lib_t *maplib, const char* name, int version, const char* vername); -int GetNoSelfSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, elfheader_t* self, size_t size, int version, const char* vername); -int GetGlobalSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, elfheader_t *self, int version, const char* vername); -int GetGlobalNoWeakSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, int version, const char* vername); -int GetLocalSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, elfheader_t *self, int version, const char* vername); +int GetNoSelfSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, elfheader_t* self, size_t size, int version, const char* vername, const char* globdefver, const char* weakdefver); +int GetGlobalSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, elfheader_t *self, int version, const char* vername, const char* globdefver, const char* weakdefver); +int GetGlobalNoWeakSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, int version, const char* vername, const char* defver); +int GetLocalSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, elfheader_t *self, int version, const char* vername, const char* globdefver, const char* weakdefver); 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); +int IsGlobalNoWeakSymbolInNative(lib_t *maplib, const char* name, int version, const char* vername, const char* defver); + +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 afe108e7..29c7061d 100755 --- a/src/include/library.h +++ b/src/include/library.h @@ -25,9 +25,9 @@ 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) -int GetLibGlobalSymbolStartEnd(library_t* lib, const char* name, uintptr_t* start, uintptr_t* end, size_t size, int* weak, int version, const char* vername, int local); -int GetLibWeakSymbolStartEnd(library_t* lib, const char* name, uintptr_t* start, uintptr_t* end, size_t size, int* weak, int version, const char* vername, int local); -int GetLibLocalSymbolStartEnd(library_t* lib, const char* name, uintptr_t* start, uintptr_t* end, size_t size, int* weak, int version, const char* vername, int local); +int GetLibGlobalSymbolStartEnd(library_t* lib, const char* name, uintptr_t* start, uintptr_t* end, size_t size, int* weak, int version, const char* vername, int local, const char* defver); +int GetLibWeakSymbolStartEnd(library_t* lib, const char* name, uintptr_t* start, uintptr_t* end, size_t size, int* weak, int version, const char* vername, int local, const char* defver); +int GetLibLocalSymbolStartEnd(library_t* lib, const char* name, uintptr_t* start, uintptr_t* end, size_t size, int* weak, int version, const char* vername, int local, const char* defver); char** GetNeededLibsNames(library_t* lib); int GetNeededLibsN(library_t* lib); library_t* GetNeededLib(library_t* lib, int idx); diff --git a/src/include/wrappedlibs.h b/src/include/wrappedlibs.h index 07014e46..2d87a933 100755 --- a/src/include/wrappedlibs.h +++ b/src/include/wrappedlibs.h @@ -7,7 +7,7 @@ typedef struct box64context_s box64context_t; typedef int (*wrappedlib_init_t)(library_t * lib, box64context_t* box64); // 0 = success typedef void (*wrappedlib_fini_t)(library_t * lib); -typedef int (*wrappedlib_get_t)(library_t* lib, const char* name, uintptr_t *offs, uintptr_t *sz, size_t size, int* weak, int version, const char* vername, int local); +typedef int (*wrappedlib_get_t)(library_t* lib, const char* name, uintptr_t *offs, uintptr_t *sz, size_t size, int* weak, int version, const char* vername, int local, const char* defver); void setNeededLibs(library_t* lib, int n, ...); #define SETALT(A) lib->w.altmy = box_strdup(#A) |