@@ -20,19 +20,30 @@ extern "C" {
20
20
21
21
art::jit::JitCompiler** globalJitCompileHandlerAddr = nullptr ;
22
22
23
+ void * (*get)(bool *) = nullptr ;
24
+
25
+ void * (*getQuickToInterpreterBridge)(void *) = nullptr ;
26
+ void * (*getQuickGenericJniStub)(void *) = nullptr ;
27
+
23
28
24
29
25
30
void initHideApi (JNIEnv* env) {
31
+
32
+ const char * art_lib_path;
33
+ const char * jit_lib_path;
34
+ if (BYTE_POINT == 8 ) {
35
+ art_lib_path = " /system/lib64/libart.so" ;
36
+ jit_lib_path = " /system/lib64/libart-compiler.so" ;
37
+ } else {
38
+ art_lib_path = " /system/lib/libart.so" ;
39
+ jit_lib_path = " /system/lib/libart-compiler.so" ;
40
+ }
41
+
26
42
// init compile
27
43
if (SDK_INT >= ANDROID_N) {
28
- void *jit_lib;
29
- if (BYTE_POINT == 8 ) {
30
- jit_lib = fake_dlopen (" /system/lib64/libart-compiler.so" , RTLD_NOW);
31
- } else {
32
- jit_lib = fake_dlopen (" /system/lib/libart-compiler.so" , RTLD_NOW);
33
- }
34
- jitCompileMethod = (bool (*)(void *, void *, void *, bool )) fake_dlsym (jit_lib, " jit_compile_method" );
35
- jitLoad = reinterpret_cast <void * (*)(bool *)>(fake_dlsym (jit_lib, " jit_load" ));
44
+ jitCompileMethod = reinterpret_cast <bool (*)(void *, void *, void *,
45
+ bool )>(getSymCompat (jit_lib_path, " jit_compile_method" ));
46
+ jitLoad = reinterpret_cast <void * (*)(bool *)>(getSymCompat (jit_lib_path, " jit_load" ));
36
47
bool generate_debug_info = false ;
37
48
jitCompilerHandle = (jitLoad)(&generate_debug_info);
38
49
@@ -43,56 +54,34 @@ extern "C" {
43
54
}
44
55
45
56
}
57
+
58
+
46
59
// init suspend
47
- void * art_lib;
48
- const char * art_lib_path;
49
- if (BYTE_POINT == 8 ) {
50
- art_lib_path = " /system/lib64/libart.so" ;
51
- } else {
52
- art_lib_path = " /system/lib/libart.so" ;
53
- }
54
- if (SDK_INT >= ANDROID_N) {
55
- art_lib = fake_dlopen (art_lib_path, RTLD_NOW);
56
- if (art_lib > 0 ) {
57
- innerSuspendVM = reinterpret_cast <void (*)()>(fake_dlsym (art_lib,
58
- " _ZN3art3Dbg9SuspendVMEv" ));
59
- innerResumeVM = reinterpret_cast <void (*)()>(fake_dlsym (art_lib,
60
- " _ZN3art3Dbg8ResumeVMEv" ));
61
- }
62
- } else {
63
- art_lib = dlopen (art_lib_path, RTLD_NOW);
64
- if (art_lib > 0 ) {
65
- innerSuspendVM = reinterpret_cast <void (*)()>(dlsym (art_lib,
60
+ innerSuspendVM = reinterpret_cast <void (*)()>(getSymCompat (art_lib_path,
66
61
" _ZN3art3Dbg9SuspendVMEv" ));
67
- innerResumeVM = reinterpret_cast <void (*)()>(dlsym (art_lib ,
62
+ innerResumeVM = reinterpret_cast <void (*)()>(getSymCompat (art_lib_path ,
68
63
" _ZN3art3Dbg8ResumeVMEv" ));
69
- }
70
- }
64
+
71
65
72
66
// init for getObject & JitCompiler
67
+ const char * add_weak_ref_sym;
73
68
if (SDK_INT < ANDROID_M) {
74
- void *handle = dlopen (" libart.so" , RTLD_LAZY | RTLD_GLOBAL);
75
- addWeakGlobalRef = (jobject (*)(JavaVM *, void *, void *)) dlsym (handle,
76
- " _ZN3art9JavaVMExt22AddWeakGlobalReferenceEPNS_6ThreadEPNS_6mirror6ObjectE" );
69
+ add_weak_ref_sym = " _ZN3art9JavaVMExt22AddWeakGlobalReferenceEPNS_6ThreadEPNS_6mirror6ObjectE" ;
77
70
} else if (SDK_INT < ANDROID_N) {
78
- void *handle = dlopen (" libart.so" , RTLD_LAZY | RTLD_GLOBAL);
79
- addWeakGlobalRef = (jobject (*)(JavaVM *, void *, void *)) dlsym (handle,
80
- " _ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE" );
81
- } else {
82
- void *handle;
83
- if (BYTE_POINT == 8 ) {
84
- handle = fake_dlopen (" /system/lib64/libart.so" , RTLD_NOW);
85
- } else {
86
- handle = fake_dlopen (" /system/lib/libart.so" , RTLD_NOW);
87
- }
88
- const char *addWeakGloablReferenceSymbol = SDK_INT <= 25
89
- ? " _ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE"
90
- : " _ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadENS_6ObjPtrINS_6mirror6ObjectEEE" ;
91
- addWeakGlobalRef = (jobject (*)(JavaVM *, void *, void *)) fake_dlsym (handle,
92
- addWeakGloablReferenceSymbol);
93
-
94
- // try disable inline !
95
- globalJitCompileHandlerAddr = reinterpret_cast <art::jit::JitCompiler **>(fake_dlsym (handle, " _ZN3art3jit3Jit20jit_compiler_handle_E" ));
71
+ add_weak_ref_sym = " _ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE" ;
72
+ } else {
73
+ add_weak_ref_sym = SDK_INT <= ANDROID_N2
74
+ ? " _ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE"
75
+ : " _ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadENS_6ObjPtrINS_6mirror6ObjectEEE" ;
76
+ }
77
+
78
+ addWeakGlobalRef = reinterpret_cast <jobject (*)(JavaVM *, void *,
79
+ void *)>(getSymCompat (art_lib_path, add_weak_ref_sym));
80
+
81
+ if (SDK_INT >= ANDROID_N) {
82
+ globalJitCompileHandlerAddr = reinterpret_cast <art::jit::JitCompiler **>(getSymCompat (art_lib_path, " _ZN3art3jit3Jit20jit_compiler_handle_E" ));
83
+ getQuickGenericJniStub = reinterpret_cast <void *(*)(void *)>(getSymCompat (art_lib_path, " _ZNK3art11ClassLinker29GetRuntimeQuickGenericJniStubEv" ));
84
+ getQuickToInterpreterBridge = reinterpret_cast <void *(*)(void *)>(getSymCompat (art_lib_path, " _ZNK3art9OatHeader27GetQuickToInterpreterBridgeEv" ));
96
85
}
97
86
98
87
}
@@ -170,5 +159,16 @@ extern "C" {
170
159
}
171
160
}
172
161
162
+ void * getInterpreterBridge (bool isNative) {
163
+ if (isNative) {
164
+ if (getQuickGenericJniStub == nullptr || getQuickGenericJniStub <= 0 )
165
+ return nullptr ;
166
+ return getQuickGenericJniStub (nullptr );
167
+ } else {
168
+ // no implement
169
+ return nullptr ;
170
+ }
171
+ }
172
+
173
173
}
174
174
0 commit comments