From 2eb3629d3c656098e4044eed0cf99a3ab8c59324 Mon Sep 17 00:00:00 2001 From: mittorn Date: Sat, 16 Dec 2023 20:23:39 +0300 Subject: [PATCH] platform/android/dlsym-weak: do not call LoadLibrary to find server library instance --- engine/platform/android/dlsym-weak.cpp | 5 +++-- engine/platform/android/lib_android.c | 6 ++++++ engine/platform/android/lib_android.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/engine/platform/android/dlsym-weak.cpp b/engine/platform/android/dlsym-weak.cpp index 42d248d2a6..931ef8b317 100644 --- a/engine/platform/android/dlsym-weak.cpp +++ b/engine/platform/android/dlsym-weak.cpp @@ -119,14 +119,15 @@ static Elf_Sym* dlsym_handle_lookup( soinfo* si, const char* name ) return soinfo_elf_lookup( si, elfhash( name ), name ); } -extern "C" void *ANDROID_LoadLibrary( const char *dllname ); +#include "lib_android.h" + static int dladdr_fallback( const void *addr, Dl_info *info ) { static soinfo *server_info; Elf_Sym *sym; if( !server_info ) - server_info = ( soinfo* )ANDROID_LoadLibrary( "server" ); + server_info = ( soinfo* )ANDROID_GetServerLibrary(); if( !server_info ) return 0; //__android_log_print( ANDROID_LOG_ERROR, "dladdr_fb", "%p %p\n", addr, server_info ); diff --git a/engine/platform/android/lib_android.c b/engine/platform/android/lib_android.c index a8ba10f385..8b9810fad1 100644 --- a/engine/platform/android/lib_android.c +++ b/engine/platform/android/lib_android.c @@ -19,6 +19,12 @@ GNU General Public License for more details. #include "platform/android/lib_android.h" #include "platform/android/dlsym-weak.h" // Android < 5.0 +void *Android_GetServerLibrary( void ) +{ + return svgame.hInstance; +} + + void *ANDROID_LoadLibrary( const char *dllname ) { char path[MAX_SYSPATH]; diff --git a/engine/platform/android/lib_android.h b/engine/platform/android/lib_android.h index 5bead1f332..9e360dd6c8 100644 --- a/engine/platform/android/lib_android.h +++ b/engine/platform/android/lib_android.h @@ -20,6 +20,7 @@ GNU General Public License for more details. #define Platform_POSIX_LoadLibrary( x ) ANDROID_LoadLibrary(( x )) #define Platform_POSIX_GetProcAddress( x, y ) ANDROID_GetProcAddress(( x ), ( y )) +void *Android_GetServerLibrary( void ); void *ANDROID_LoadLibrary( const char *dllname ); void *ANDROID_GetProcAddress( void *hInstance, const char *name );