Author: ewancrawford Date: Wed Dec 9 10:01:58 2015 New Revision: 255121 URL: http://llvm.org/viewvc/llvm-project?rev=255121&view=rev Log: [RenderScript] Add hook for destroyed allocations
New hook for rsdAllocationDestroy() which is called when allocations are deleted. LLDB should be aware of this so we can remove the allocation from our internal list. Modified: lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h Modified: lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp?rev=255121&r1=255120&r2=255121&view=diff ============================================================================== --- lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp (original) +++ lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp Wed Dec 9 10:01:58 2015 @@ -556,6 +556,14 @@ const RenderScriptRuntime::HookDefn Rend RenderScriptRuntime::eModuleKindDriver, // type nullptr // handler }, + { + "rsdAllocationDestroy", // name + "_Z20rsdAllocationDestroyPKN7android12renderscript7ContextEPNS0_10AllocationE", // symbol name 32bit + "_Z20rsdAllocationDestroyPKN7android12renderscript7ContextEPNS0_10AllocationE", // symbol name 64bit + 0, // version + RenderScriptRuntime::eModuleKindDriver, // type + &lldb_private::RenderScriptRuntime::CaptureAllocationDestroy // handler + }, }; const size_t RenderScriptRuntime::s_runtimeHookCount = sizeof(s_runtimeHookDefns)/sizeof(s_runtimeHookDefns[0]); @@ -857,6 +865,43 @@ RenderScriptRuntime::CaptureAllocationIn alloc->context = rs_context_u64; } +void +RenderScriptRuntime::CaptureAllocationDestroy(RuntimeHook* hook_info, ExecutionContext& context) +{ + Log* log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_LANGUAGE)); + + // Context, Alloc + uint64_t rs_context_u64 = 0U; + uint64_t rs_alloc_u64 = 0U; + + bool success = GetArgSimple(context, 0, &rs_context_u64) && GetArgSimple(context, 1, &rs_alloc_u64); + if (!success) // error case + { + if (log) + log->Printf("RenderScriptRuntime::CaptureAllocationDestroy - Error while reading the function parameters"); + return; // abort + } + + if (log) + log->Printf("RenderScriptRuntime::CaptureAllocationDestroy - 0x%" PRIx64 ", 0x%" PRIx64 ".", + rs_context_u64, rs_alloc_u64); + + for (auto iter = m_allocations.begin(); iter != m_allocations.end(); ++iter) + { + auto& allocation_ap = *iter; // get the unique pointer + if (allocation_ap->address.isValid() && *allocation_ap->address.get() == rs_alloc_u64) + { + m_allocations.erase(iter); + if (log) + log->Printf("RenderScriptRuntime::CaptureAllocationDestroy - Deleted allocation entry"); + return; + } + } + + if (log) + log->Printf("RenderScriptRuntime::CaptureAllocationDestroy - Couldn't find destroyed allocation"); +} + void RenderScriptRuntime::CaptureScriptInit1(RuntimeHook* hook_info, ExecutionContext& context) { @@ -2304,7 +2349,6 @@ RenderScriptRuntime::Status(Stream &strm strm.Indent(b.second->defn->name); strm.EOL(); } - strm.EOL(); } else { Modified: lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h?rev=255121&r1=255120&r2=255121&view=diff ============================================================================== --- lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h (original) +++ lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h Wed Dec 9 10:01:58 2015 @@ -326,6 +326,7 @@ private: void CaptureScriptInit1(RuntimeHook* hook_info, ExecutionContext& context); void CaptureAllocationInit1(RuntimeHook* hook_info, ExecutionContext& context); + void CaptureAllocationDestroy(RuntimeHook* hook_info, ExecutionContext& context); void CaptureSetGlobalVar1(RuntimeHook* hook_info, ExecutionContext& context); AllocationDetails* FindAllocByID(Stream &strm, const uint32_t alloc_id); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits