Reuse SIRT for C++ references

Change-Id: I8310e55da42f55f7ec60f6b17face436c77a979f
diff --git a/src/stub_arm.cc b/src/stub_arm.cc
index dfbd524..3768721 100644
--- a/src/stub_arm.cc
+++ b/src/stub_arm.cc
@@ -3,6 +3,7 @@
 #include "assembler_arm.h"
 #include "jni_internal.h"
 #include "object.h"
+#include "stack_indirect_reference_table.h"
 
 #define __ assembler->
 
@@ -38,12 +39,12 @@
 
   assembler->EmitSlowPaths();
   size_t cs = assembler->CodeSize();
-  ByteArray* resolution_trampoline = ByteArray::Alloc(cs);
-  CHECK(resolution_trampoline != NULL);
+  SirtRef<ByteArray> resolution_trampoline(ByteArray::Alloc(cs));
+  CHECK(resolution_trampoline.get() != NULL);
   MemoryRegion code(resolution_trampoline->GetData(), resolution_trampoline->GetLength());
   assembler->FinalizeInstructions(code);
 
-  return resolution_trampoline;
+  return resolution_trampoline.get();
 }
 
 typedef void (*ThrowAme)(Method*, Thread*);
@@ -69,13 +70,13 @@
   assembler->EmitSlowPaths();
 
   size_t cs = assembler->CodeSize();
-  ByteArray* abstract_stub = ByteArray::Alloc(cs);
-  CHECK(abstract_stub != NULL);
+  SirtRef<ByteArray> abstract_stub(ByteArray::Alloc(cs));
+  CHECK(abstract_stub.get() != NULL);
   CHECK(abstract_stub->GetClass()->GetDescriptor());
   MemoryRegion code(abstract_stub->GetData(), abstract_stub->GetLength());
   assembler->FinalizeInstructions(code);
 
-  return abstract_stub;
+  return abstract_stub.get();
 }
 
 ByteArray* CreateJniStub() {
@@ -98,12 +99,12 @@
   assembler->EmitSlowPaths();
 
   size_t cs = assembler->CodeSize();
-  ByteArray* jni_stub = ByteArray::Alloc(cs);
-  CHECK(jni_stub != NULL);
+  SirtRef<ByteArray> jni_stub(ByteArray::Alloc(cs));
+  CHECK(jni_stub.get() != NULL);
   MemoryRegion code(jni_stub->GetData(), jni_stub->GetLength());
   assembler->FinalizeInstructions(code);
 
-  return jni_stub;
+  return jni_stub.get();
 }
 
 } // namespace arm