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());
   }
 }