From: Twaik Yont <9674930+twaik@users.noreply.github.com> ntdll symbols used by wineandroid are already available through the link-time dependency, making the manual dlsym lookup unnecessary. Switch to direct symbol references and remove the corresponding function pointer indirection. This simplifies the code and avoids redundant runtime symbol resolution. Dynamic loading is still used for Android system libraries where appropriate. Signed-off-by: Twaik Yont <9674930+twaik@users.noreply.github.com> --- dlls/ntdll/unix/loader.c | 2 -- dlls/wineandroid.drv/android.h | 5 ++--- dlls/wineandroid.drv/device.c | 9 +++------ dlls/wineandroid.drv/init.c | 23 ++++------------------- 4 files changed, 9 insertions(+), 30 deletions(-) diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index 9d70aa421f0..9fe91046811 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -1883,7 +1883,6 @@ static void start_main_thread(void) DECLSPEC_EXPORT JavaVM *java_vm = NULL; DECLSPEC_EXPORT jobject java_object = 0; -DECLSPEC_EXPORT unsigned short java_gdt_sel = 0; /* main Wine initialisation */ static jstring wine_init_jni( JNIEnv *env, jobject obj, jobjectArray cmdline, jobjectArray environment ) @@ -1966,7 +1965,6 @@ static jstring wine_init_jni( JNIEnv *env, jobject obj, jobjectArray cmdline, jo { unsigned short java_fs; __asm__( "mov %%fs,%0" : "=r" (java_fs) ); - if (!(java_fs & 4)) java_gdt_sel = java_fs; __asm__( "mov %0,%%fs" :: "r" (0) ); start_main_thread(); __asm__( "mov %0,%%fs" :: "r" (java_fs) ); diff --git a/dlls/wineandroid.drv/android.h b/dlls/wineandroid.drv/android.h index bffbee75145..d53f89c2957 100644 --- a/dlls/wineandroid.drv/android.h +++ b/dlls/wineandroid.drv/android.h @@ -176,9 +176,8 @@ union event_data int send_event( const union event_data *data ); -extern JavaVM **p_java_vm; -extern jobject *p_java_object; -extern unsigned short *p_java_gdt_sel; +extern JavaVM *java_vm; +extern jobject java_object; /* string helpers */ diff --git a/dlls/wineandroid.drv/device.c b/dlls/wineandroid.drv/device.c index 77817cb7141..b1d307fd62c 100644 --- a/dlls/wineandroid.drv/device.c +++ b/dlls/wineandroid.drv/device.c @@ -568,13 +568,11 @@ static int status_to_android_error( unsigned int status ) static jobject load_java_method( jmethodID *method, const char *name, const char *args ) { - jobject object = *p_java_object; - if (!*method) { jclass class; - class = (*jni_env)->GetObjectClass( jni_env, object ); + class = (*jni_env)->GetObjectClass( jni_env, java_object ); *method = (*jni_env)->GetMethodID( jni_env, class, name, args ); if (!*method) { @@ -582,7 +580,7 @@ static jobject load_java_method( jmethodID *method, const char *name, const char return NULL; } } - return object; + return java_object; } static void create_desktop_view(void) @@ -957,10 +955,9 @@ static const ioctl_func ioctl_funcs[] = static void *ioctl_thread_proc(void *arg) { - JavaVM *java_vm; int listen_fd, epoll_fd; - if (!(java_vm = *p_java_vm)) return NULL; /* not running under Java */ + if (!java_vm) return NULL; /* not running under Java */ (*java_vm)->AttachCurrentThread( java_vm, &jni_env, 0 ); create_desktop_view(); diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c index a7706abf5e0..08570fb165a 100644 --- a/dlls/wineandroid.drv/init.c +++ b/dlls/wineandroid.drv/init.c @@ -83,7 +83,7 @@ void init_monitors( int width, int height ) wine_dbgstr_rect( &rect ), wine_dbgstr_rect( &monitor_rc_work )); /* if we're notified from Java thread, update registry */ - if (*p_java_vm) NtUserCallNoParam( NtUserCallNoParam_DisplayModeChanged ); + if (java_vm) NtUserCallNoParam( NtUserCallNoParam_DisplayModeChanged ); } @@ -167,7 +167,7 @@ void set_screen_dpi( DWORD dpi ) */ static void fetch_display_metrics(void) { - if (*p_java_vm) return; /* for Java threads it will be set when the top view is created */ + if (java_vm) return; /* for Java threads it will be set when the top view is created */ SERVER_START_REQ( get_window_rectangles ) { @@ -363,26 +363,11 @@ static void load_android_libs(void) #undef DECL_FUNCPTR #undef LOAD_FUNCPTR -JavaVM **p_java_vm = NULL; -jobject *p_java_object = NULL; -unsigned short *p_java_gdt_sel = NULL; - NTSTATUS __wine_unix_lib_init(void) { pthread_mutexattr_t attr; jclass class; - jobject object; JNIEnv *jni_env; - JavaVM *java_vm; - void *ntdll; - - if (!(ntdll = dlopen( "ntdll.so", RTLD_NOW ))) return STATUS_UNSUCCESSFUL; - - p_java_vm = dlsym( ntdll, "java_vm" ); - p_java_object = dlsym( ntdll, "java_object" ); - p_java_gdt_sel = dlsym( ntdll, "java_gdt_sel" ); - - object = *p_java_object; init_android_log_verbosity(); init_ahardwarebuffers(); @@ -392,7 +377,7 @@ NTSTATUS __wine_unix_lib_init(void) pthread_mutex_init( &win_data_mutex, &attr ); pthread_mutexattr_destroy( &attr ); - if ((java_vm = *p_java_vm)) /* running under Java */ + if (java_vm) /* running under Java */ { #ifdef __i386__ WORD old_fs; @@ -400,7 +385,7 @@ NTSTATUS __wine_unix_lib_init(void) #endif load_android_libs(); (*java_vm)->AttachCurrentThread( java_vm, &jni_env, 0 ); - class = (*jni_env)->GetObjectClass( jni_env, object ); + class = (*jni_env)->GetObjectClass( jni_env, java_object ); (*jni_env)->RegisterNatives( jni_env, class, methods, ARRAY_SIZE( methods )); (*jni_env)->DeleteLocalRef( jni_env, class ); #ifdef __i386__ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10569