From 29cfec1e269440d981cf8ee665d0292a6f4f3a1a Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh <40482367+khanhduytran0@users.noreply.github.com> Date: Tue, 9 Nov 2021 07:12:50 +0700 Subject: [PATCH] Update jre_launcher.c --- app_pojavlauncher/src/main/jni/jre_launcher.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app_pojavlauncher/src/main/jni/jre_launcher.c b/app_pojavlauncher/src/main/jni/jre_launcher.c index d8595a05c..949452ee4 100644 --- a/app_pojavlauncher/src/main/jni/jre_launcher.c +++ b/app_pojavlauncher/src/main/jni/jre_launcher.c @@ -83,6 +83,15 @@ typedef jint JLI_Launch_func(int argc, char ** argv, /* main argc, argc */ jint ergo /* ergonomics class policy */ ); +void* (*old_dlopen)(const char *filename, int flags); +void* custom_dlopen(const char *filename, int flags) { + if (flags == (RTLD_LAZY | RTLD_LOCAL)) { + return old_dlopen(filename, RTLD_LAZY | RTLD_GLOBAL); + } else { + return old_dlopen(filename, flags); + } +} + static jint launchJVM(int margc, char** margv) { void* libjli = dlopen("libjli.so", RTLD_LAZY | RTLD_GLOBAL); @@ -159,6 +168,13 @@ JNIEXPORT jint JNICALL Java_com_oracle_dalvik_VMLauncher_launchJVM(JNIEnv *env, CATCHSIG(SIGXFSZ); //Signal trapper ready + // Since we have moved from JNI call to LWJGL call for fixing GL context + // set incorrectly, we're facing another problem: fields in the previously + // loaded pojavexec aren't shared to LWJGL loaded one, is it because + // of RTLD_LOCAL? hook moment. + xhook_register(".*/liblwjgl.so$","dlopen",custom_dlopen,&old_dlopen); + xhook_refresh(1); + // Save dalvik JNIEnv pointer for JVM launch thread dalvikJNIEnvPtr_ANDROID = env;