Add AllocStackTrace(). Move InternalStackTrace to managed heap.

Replaces trace.method and trace.pc with IntArray and ObjectArray<Method>.
Exception_tests pass.

Change-Id: I54431bbf8031b186fdd360ec27a31b11c8eff052
diff --git a/src/thread.h b/src/thread.h
index 8b64249..85abf2f 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -29,6 +29,8 @@
 class Throwable;
 class StackTraceElement;
 template<class T> class ObjectArray;
+template<class T> class PrimitiveArray;
+typedef PrimitiveArray<int32_t> IntArray;
 
 class Mutex {
  public:
@@ -398,15 +400,8 @@
     class_loader_override_ = class_loader_override;
   }
 
-  struct InternalStackTrace {
-    const Method* method;
-    uintptr_t pc;
-  };
-
-  // Get the top length frames information
-  InternalStackTrace* GetStackTrace(uint16_t length);
-
-  ObjectArray<StackTraceElement>* GetStackTraceElement(uint16_t length, InternalStackTrace *raw_trace);
+  // Allocate stack trace
+  ObjectArray<StackTraceElement>* AllocStackTrace(uint16_t length);
 
  private:
   Thread()
@@ -427,6 +422,8 @@
   void InitCpu();
   void InitFunctionPointers();
 
+  bool WalkStack(uint16_t length, ObjectArray<Method>* method_trace, IntArray* pc_trace);
+
   // Managed thread id.
   uint32_t id_;