Reuse SIRT for C++ references
Change-Id: I8310e55da42f55f7ec60f6b17face436c77a979f
diff --git a/src/stub_x86.cc b/src/stub_x86.cc
index ea745ee..7660f6f 100644
--- a/src/stub_x86.cc
+++ b/src/stub_x86.cc
@@ -3,6 +3,7 @@
#include "assembler_x86.h"
#include "jni_internal.h"
#include "object.h"
+#include "stack_indirect_reference_table.h"
#define __ assembler->
@@ -17,12 +18,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*);
@@ -46,12 +47,12 @@
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);
MemoryRegion code(abstract_stub->GetData(), abstract_stub->GetLength());
assembler->FinalizeInstructions(code);
- return abstract_stub;
+ return abstract_stub.get();
}
ByteArray* CreateJniStub() {
@@ -79,12 +80,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 x86