Added code to allow method tracing from command line.
Crated a set of command line switches to allow method tracing to be
enabled from the command line. They are -Xmethod-trace,
-Xmethod-trace-file, and -Xmethod-trace-file-size.
Change-Id: I7ecaa07aba3d7ca41f2ff3a9a9341d97833afe36
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 06ae301..6ab849a 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -1397,7 +1397,15 @@
const void* trampoline = Runtime::Current()->GetResolutionStubArray(Runtime::kStaticMethod)->GetData();
for (size_t i = 0; it.HasNextDirectMethod(); i++, it.Next()) {
Method* method = klass->GetDirectMethod(i);
- if (method->GetCode() == trampoline) {
+ if (Runtime::Current()->IsMethodTracingActive()) {
+ Trace* tracer = Runtime::Current()->GetTracer();
+ if (tracer->GetSavedCodeFromMap(method) == trampoline) {
+ const void* code = oat_class->GetOatMethod(method_index).GetCode();
+ tracer->ResetSavedCode(method);
+ method->SetCode(code);
+ tracer->SaveAndUpdateCode(method);
+ }
+ } else if (method->GetCode() == trampoline) {
const void* code = oat_class->GetOatMethod(method_index).GetCode();
CHECK(code != NULL);
method->SetCode(code);
@@ -1428,13 +1436,8 @@
}
if (Runtime::Current()->IsMethodTracingActive()) {
-#if defined(__arm__)
Trace* tracer = Runtime::Current()->GetTracer();
- void* trace_stub = reinterpret_cast<void*>(art_trace_entry_from_code);
- tracer->SaveAndUpdateCode(method.get(), trace_stub);
-#else
- UNIMPLEMENTED(WARNING);
-#endif
+ tracer->SaveAndUpdateCode(method.get());
}
}