Move Assemblers to the Arena.
And clean up some APIs to return std::unique_ptr<> instead
of raw pointers that don't communicate ownership.
Change-Id: I3017302307a0253d661240750298802fb0d9585e
diff --git a/runtime/jit/debugger_interface.cc b/runtime/jit/debugger_interface.cc
index d9d7a19..7cdd7c5 100644
--- a/runtime/jit/debugger_interface.cc
+++ b/runtime/jit/debugger_interface.cc
@@ -70,15 +70,19 @@
static Mutex g_jit_debug_mutex("JIT debug interface lock", kJitDebugInterfaceLock);
-static JITCodeEntry* CreateJITCodeEntryInternal(
- std::unique_ptr<const uint8_t[]> symfile_addr,
- uintptr_t symfile_size)
+static JITCodeEntry* CreateJITCodeEntryInternal(std::vector<uint8_t> symfile)
REQUIRES(g_jit_debug_mutex) {
- DCHECK(symfile_addr.get() != nullptr);
+ DCHECK_NE(symfile.size(), 0u);
+
+ // Make a copy of the buffer. We want to shrink it anyway.
+ uint8_t* symfile_copy = new uint8_t[symfile.size()];
+ CHECK(symfile_copy != nullptr);
+ memcpy(symfile_copy, symfile.data(), symfile.size());
JITCodeEntry* entry = new JITCodeEntry;
- entry->symfile_addr_ = symfile_addr.release();
- entry->symfile_size_ = symfile_size;
+ CHECK(entry != nullptr);
+ entry->symfile_addr_ = symfile_copy;
+ entry->symfile_size_ = symfile.size();
entry->prev_ = nullptr;
entry->next_ = __jit_debug_descriptor.first_entry_;
@@ -111,11 +115,10 @@
delete entry;
}
-JITCodeEntry* CreateJITCodeEntry(std::unique_ptr<const uint8_t[]> symfile_addr,
- uintptr_t symfile_size) {
+JITCodeEntry* CreateJITCodeEntry(std::vector<uint8_t> symfile) {
Thread* self = Thread::Current();
MutexLock mu(self, g_jit_debug_mutex);
- return CreateJITCodeEntryInternal(std::move(symfile_addr), symfile_size);
+ return CreateJITCodeEntryInternal(std::move(symfile));
}
void DeleteJITCodeEntry(JITCodeEntry* entry) {
@@ -128,14 +131,12 @@
// so that the user of the JIT interface does not have to store them.
static std::unordered_map<uintptr_t, JITCodeEntry*> g_jit_code_entries;
-void CreateJITCodeEntryForAddress(uintptr_t address,
- std::unique_ptr<const uint8_t[]> symfile_addr,
- uintptr_t symfile_size) {
+void CreateJITCodeEntryForAddress(uintptr_t address, std::vector<uint8_t> symfile) {
Thread* self = Thread::Current();
MutexLock mu(self, g_jit_debug_mutex);
DCHECK_NE(address, 0u);
DCHECK(g_jit_code_entries.find(address) == g_jit_code_entries.end());
- JITCodeEntry* entry = CreateJITCodeEntryInternal(std::move(symfile_addr), symfile_size);
+ JITCodeEntry* entry = CreateJITCodeEntryInternal(std::move(symfile));
g_jit_code_entries.emplace(address, entry);
}