Commit c17f756a authored by swift_gan's avatar swift_gan

tweak disable jit

parent f009483a
......@@ -25,8 +25,12 @@ extern "C" {
art::jit::JitCompiler* getGlobalJitCompiler();
art::CompilerOptions* getCompilerOptions(art::jit::JitCompiler* compiler);
art::CompilerOptions* getGlobalCompilerOptions();
bool disableJitInline(art::CompilerOptions* compilerOptions);
}
#endif //SANDHOOK_HIDE_API_H
......@@ -354,14 +354,7 @@ Java_com_swift_sandhook_SandHook_disableVMInline(JNIEnv *env, jclass type) {
art::CompilerOptions* compilerOptions = getGlobalCompilerOptions();
if (compilerOptions == nullptr)
return JNI_FALSE;
size_t originOptions = compilerOptions->getInlineMaxCodeUnits();
//maybe a real inlineMaxCodeUnits
if (originOptions > 0 && originOptions < 10000) {
compilerOptions->setInlineMaxCodeUnits(0);
return JNI_TRUE;
} else {
return JNI_FALSE;
}
return static_cast<jboolean>(disableJitInline(compilerOptions));
}
extern "C"
......
......@@ -35,6 +35,13 @@ extern "C" {
jitLoad = reinterpret_cast<void* (*)(bool*)>(fake_dlsym(jit_lib, "jit_load"));
bool generate_debug_info = false;
jitCompilerHandle = (jitLoad)(&generate_debug_info);
if (jitCompilerHandle != nullptr && jitCompilerHandle > 0) {
art::CompilerOptions* compilerOptions = getCompilerOptions(
reinterpret_cast<art::jit::JitCompiler *>(jitCompilerHandle));
disableJitInline(compilerOptions);
}
}
//init suspend
void* art_lib;
......@@ -131,12 +138,28 @@ extern "C" {
return *globalJitCompileHandlerAddr;
}
art::CompilerOptions* getGlobalCompilerOptions() {
art::jit::JitCompiler* compiler = getGlobalJitCompiler();
art::CompilerOptions* getCompilerOptions(art::jit::JitCompiler* compiler) {
if (compiler == nullptr)
return nullptr;
return compiler->compilerOptions.get();
}
art::CompilerOptions* getGlobalCompilerOptions() {
return getCompilerOptions(getGlobalJitCompiler());
}
bool disableJitInline(art::CompilerOptions* compilerOptions) {
if (compilerOptions == nullptr || compilerOptions <= 0)
return false;
size_t originOptions = compilerOptions->getInlineMaxCodeUnits();
//maybe a real inlineMaxCodeUnits
if (originOptions > 0 && originOptions <= 1024) {
compilerOptions->setInlineMaxCodeUnits(0);
return true;
} else {
return false;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment