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