Support garbage collection of JITted code.
Change-Id: I9afc544460ae4fb31149644b6196ac7f5182c784
diff --git a/compiler/jit/jit_compiler.cc b/compiler/jit/jit_compiler.cc
index 3d1b42f..42f7657 100644
--- a/compiler/jit/jit_compiler.cc
+++ b/compiler/jit/jit_compiler.cc
@@ -160,7 +160,7 @@
Runtime* runtime = Runtime::Current();
// Check if the method is already compiled.
- if (runtime->GetJit()->GetCodeCache()->ContainsMethod(method)) {
+ if (runtime->GetJit()->GetCodeCache()->ContainsPc(method->GetEntryPointFromQuickCompiledCode())) {
VLOG(jit) << "Already compiled " << PrettyMethod(method);
return true;
}
@@ -207,10 +207,7 @@
result = true;
} else {
TimingLogger::ScopedTiming t2("LinkCode", &logger);
- OatFile::OatMethod oat_method(nullptr, 0);
- if (AddToCodeCache(method, compiled_method, &oat_method)) {
- oat_method.LinkMethod(method);
- CHECK(runtime->GetJit()->GetCodeCache()->ContainsMethod(method)) << PrettyMethod(method);
+ if (AddToCodeCache(method, compiled_method)) {
result = true;
}
}
@@ -227,8 +224,7 @@
}
bool JitCompiler::AddToCodeCache(ArtMethod* method,
- const CompiledMethod* compiled_method,
- OatFile::OatMethod* out_method) {
+ const CompiledMethod* compiled_method) {
Runtime* runtime = Runtime::Current();
JitCodeCache* const code_cache = runtime->GetJit()->GetCodeCache();
const auto* quick_code = compiled_method->GetQuickCode();
@@ -270,6 +266,7 @@
}
uint8_t* const code = code_cache->CommitCode(self,
+ method,
mapping_table_ptr,
vmap_table_ptr,
gc_map_ptr,
@@ -285,13 +282,6 @@
const size_t thumb_offset = compiled_method->CodeDelta();
const uint32_t code_offset = sizeof(OatQuickMethodHeader) + thumb_offset;
- *out_method = OatFile::OatMethod(code, code_offset);
- DCHECK_EQ(out_method->GetGcMap(), gc_map_ptr);
- DCHECK_EQ(out_method->GetMappingTable(), mapping_table_ptr);
- DCHECK_EQ(out_method->GetVmapTable(), vmap_table_ptr);
- DCHECK_EQ(out_method->GetFrameSizeInBytes(), compiled_method->GetFrameSizeInBytes());
- DCHECK_EQ(out_method->GetCoreSpillMask(), compiled_method->GetCoreSpillMask());
- DCHECK_EQ(out_method->GetFpSpillMask(), compiled_method->GetFpSpillMask());
VLOG(jit)
<< "JIT added "
<< PrettyMethod(method) << "@" << method
diff --git a/compiler/jit/jit_compiler.h b/compiler/jit/jit_compiler.h
index 757f3f3..913a6d0 100644
--- a/compiler/jit/jit_compiler.h
+++ b/compiler/jit/jit_compiler.h
@@ -59,8 +59,8 @@
// This is in the compiler since the runtime doesn't have access to the compiled method
// structures.
bool AddToCodeCache(ArtMethod* method,
- const CompiledMethod* compiled_method,
- OatFile::OatMethod* out_method) SHARED_REQUIRES(Locks::mutator_lock_);
+ const CompiledMethod* compiled_method)
+ SHARED_REQUIRES(Locks::mutator_lock_);
DISALLOW_COPY_AND_ASSIGN(JitCompiler);
};