From 58def623ca46f107d185d7f02b267ffa751aff97 Mon Sep 17 00:00:00 2001 From: Alex Langford Date: Fri, 16 Dec 2022 16:19:40 -0800 Subject: [PATCH] [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 --- lldb/tools/debugserver/source/MacOSX/MachProcess.mm | 1 + lldb/tools/debugserver/source/MacOSX/MachTask.h | 1 + lldb/tools/debugserver/source/MacOSX/MachTask.mm | 7 +++++++ 3 files changed, 9 insertions(+) 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; -- 2.7.4