about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-05-31 18:21:42 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-05-31 18:21:42 +0200
commitc5e8aaff4a73665ad9ee0231713a7b6068bf2547 (patch)
tree580fbdb15a94a17f469f1e85b4850ff32c3e8851 /src
parent2017ef192f49715783e0108d8d0ac4b826b0ac45 (diff)
downloadbox64-c5e8aaff4a73665ad9ee0231713a7b6068bf2547.tar.gz
box64-c5e8aaff4a73665ad9ee0231713a7b6068bf2547.zip
[DYNAREC] Addeddetection of libjvm (and an option to disable it) to apply conservative settings when loaded (should help #813) and probably other java based games/apps)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/include/debug.h1
-rwxr-xr-xsrc/librarian/library.c5
-rwxr-xr-xsrc/main.c10
-rw-r--r--src/tools/rcfile.c2
4 files changed, 18 insertions, 0 deletions
diff --git a/src/include/debug.h b/src/include/debug.h
index 2d899beb..352e9b12 100755
--- a/src/include/debug.h
+++ b/src/include/debug.h
@@ -23,6 +23,7 @@ extern int box64_dynarec_x87double;
 extern int box64_dynarec_safeflags;
 extern int box64_dynarec_callret;
 extern int box64_dynarec_bleeding_edge;
+extern int box64_dynarec_jvm;
 extern int box64_dynarec_hotpage;
 extern int box64_dynarec_fastpage;
 extern int box64_dynarec_wait;
diff --git a/src/librarian/library.c b/src/librarian/library.c
index eb28ecb5..a74dea23 100755
--- a/src/librarian/library.c
+++ b/src/librarian/library.c
@@ -301,6 +301,11 @@ static int loadEmulatedLib(const char* libname, library_t *lib, box64context_t*
             box64_dynarec_bigblock = 0;
             box64_dynarec_strongmem = 1;
         }
+        if(libname && box64_dynarec_jvm && strstr(libname, "libjvm.so")) {
+            printf_log(LOG_INFO, "libjvm detected, disable Dynarec BigBlock and enable Dynarec StrongMem\n");
+            box64_dynarec_bigblock = 0;
+            box64_dynarec_strongmem = 1;
+        }
         #endif
         if(libname && box64_libcef && strstr(libname, "libcef.so")) {
             printf_log(LOG_INFO, "libcef detected, using malloc_hack_2\n");
diff --git a/src/main.c b/src/main.c
index e6d22201..b3983abd 100755
--- a/src/main.c
+++ b/src/main.c
@@ -61,6 +61,7 @@ int box64_dynarec_callret = 0;
 int box64_dynarec_hotpage = 0;
 int box64_dynarec_fastpage = 0;
 int box64_dynarec_bleeding_edge = 1;
+int box64_dynarec_jvm = 1;
 int box64_dynarec_wait = 1;
 int box64_dynarec_test = 0;
 int box64_dynarec_missing = 0;
@@ -575,6 +576,15 @@ void LoadLogEnv()
         if(!box64_dynarec_bleeding_edge)
             printf_log(LOG_INFO, "Dynarec will not detect MonoBleedingEdge\n");
     }
+    p = getenv("BOX64_DYNAREC_JVM");
+    if(p) {
+        if(strlen(p)==1) {
+            if(p[0]>='0' && p[0]<='1')
+                box64_dynarec_jvm = p[0]-'0';
+        }
+        if(!box64_dynarec_jvm)
+            printf_log(LOG_INFO, "Dynarec will not detect libjvm\n");
+    }
     p = getenv("BOX64_DYNAREC_WAIT");
     if(p) {
         if(strlen(p)==1) {
diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c
index e0aae458..7e13f60f 100644
--- a/src/tools/rcfile.c
+++ b/src/tools/rcfile.c
@@ -126,6 +126,7 @@ ENTRYBOOL(BOX64_DYNAREC_FASTROUND, box64_dynarec_fastround)         \
 ENTRYINT(BOX64_DYNAREC_SAFEFLAGS, box64_dynarec_safeflags, 0, 2, 2) \
 ENTRYBOOL(BOX64_DYNAREC_CALLRET, box64_dynarec_callret)             \
 ENTRYBOOL(BOX64_DYNAREC_BLEEDING_EDGE, box64_dynarec_bleeding_edge) \
+ENTRYBOOL(BOX64_DYNAREC_JVM, box64_dynarec_jvm)                     \
 ENTRYINT(BOX64_DYNAREC_HOTPAGE, box64_dynarec_hotpage, 0, 255, 8)   \
 ENTRYBOOL(BOX64_DYNAREC_FASTPAGE, box64_dynarec_fastpage)           \
 ENTRYBOOL(BOX64_DYNAREC_WAIT, box64_dynarec_wait)                   \
@@ -147,6 +148,7 @@ IGNORE(BOX64_DYNAREC_FASTROUND)                                     \
 IGNORE(BOX64_DYNAREC_SAFEFLAGS)                                     \
 IGNORE(BOX64_DYNAREC_CALLRET)                                       \
 IGNORE(BOX64_DYNAREC_BLEEDING_EDGE)                                 \
+IGNORE(BOX64_DYNAREC_JVM)                                           \
 IGNORE(BOX64_DYNAREC_HOTPAGE)                                       \
 IGNORE(BOX64_DYNAREC_FASTPAGE)                                      \
 IGNORE(BOX64_DYNAREC_WAIT)                                          \