From: Alex Langford Date: Sat, 17 Dec 2022 00:19:40 +0000 (-0800) Subject: [debugserver] Clear memory allocations after exec X-Git-Tag: upstream/17.0.6~21317 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=58def623ca46f107d185d7f02b267ffa751aff97;p=platform%2Fupstream%2Fllvm.git [debugserver] Clear memory allocations after exec After an exec, the inferior is a new process and none of these memory regions are still allocated. Clear them out. Differential Revision: https://reviews.llvm.org/D140253 --- diff --git a/lldb/tools/debugserver/source/MacOSX/MachProcess.mm b/lldb/tools/debugserver/source/MacOSX/MachProcess.mm index 3aa2a84..d524a49 100644 --- a/lldb/tools/debugserver/source/MacOSX/MachProcess.mm +++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.mm @@ -2285,6 +2285,7 @@ task_t MachProcess::ExceptionMessageBundleComplete() { m_thread_list.Clear(); m_activities.Clear(); m_breakpoints.DisableAll(); + m_task.ClearAllocations(); } if (m_sent_interrupt_signo != 0) { diff --git a/lldb/tools/debugserver/source/MacOSX/MachTask.h b/lldb/tools/debugserver/source/MacOSX/MachTask.h index a58d5be..286a57b 100644 --- a/lldb/tools/debugserver/source/MacOSX/MachTask.h +++ b/lldb/tools/debugserver/source/MacOSX/MachTask.h @@ -61,6 +61,7 @@ public: nub_addr_t AllocateMemory(nub_size_t size, uint32_t permissions); nub_bool_t DeallocateMemory(nub_addr_t addr); + void ClearAllocations(); mach_port_t ExceptionPort() const; bool ExceptionPortIsValid() const; diff --git a/lldb/tools/debugserver/source/MacOSX/MachTask.mm b/lldb/tools/debugserver/source/MacOSX/MachTask.mm index 1e03faf..feec85d 100644 --- a/lldb/tools/debugserver/source/MacOSX/MachTask.mm +++ b/lldb/tools/debugserver/source/MacOSX/MachTask.mm @@ -999,6 +999,13 @@ nub_bool_t MachTask::DeallocateMemory(nub_addr_t addr) { return false; } +//---------------------------------------------------------------------- +// MachTask::ClearAllocations +//---------------------------------------------------------------------- +void MachTask::ClearAllocations() { + m_allocations.clear(); +} + void MachTask::TaskPortChanged(task_t task) { m_task = task;