diff --git a/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.h b/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.h index fb7372817265d..4a3da9e987e3c 100644 --- a/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.h +++ b/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.h @@ -101,7 +101,6 @@ class NativeProcessFreeBSD : public NativeProcessELF, ArchSpec m_arch; MainLoop &m_main_loop; LazyBool m_supports_mem_region = eLazyBoolCalculate; - std::vector> m_mem_region_cache; // Private Instance Methods NativeProcessFreeBSD(::pid_t pid, int terminal_fd, NativeDelegate &delegate, diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp index 2dabae4eb8d3d..1ad57bd0c19e1 100644 --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp @@ -1313,14 +1313,6 @@ Status NativeProcessLinux::PopulateMemoryRegionCache() { return Status(); } -void NativeProcessLinux::DoStopIDBumped(uint32_t newBumpId) { - Log *log = GetLog(POSIXLog::Process); - LLDB_LOG(log, "newBumpId={0}", newBumpId); - LLDB_LOG(log, "clearing {0} entries from memory region cache", - m_mem_region_cache.size()); - m_mem_region_cache.clear(); -} - llvm::Expected NativeProcessLinux::Syscall(llvm::ArrayRef args) { PopulateMemoryRegionCache(); diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h index d345f165a75d8..936d690e42ae7 100644 --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h @@ -122,8 +122,6 @@ class NativeProcessLinux : public NativeProcessELF, Status RemoveBreakpoint(lldb::addr_t addr, bool hardware = false) override; - void DoStopIDBumped(uint32_t newBumpId) override; - Status GetLoadedModuleFileSpec(const char *module_path, FileSpec &file_spec) override; @@ -177,7 +175,6 @@ class NativeProcessLinux : public NativeProcessELF, ArchSpec m_arch; LazyBool m_supports_mem_region = eLazyBoolCalculate; - std::vector> m_mem_region_cache; lldb::tid_t m_pending_notification_tid = LLDB_INVALID_THREAD_ID; diff --git a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h index f3d07651384fe..976d48e74854e 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h +++ b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h @@ -97,7 +97,6 @@ class NativeProcessNetBSD : public NativeProcessELF { ArchSpec m_arch; MainLoop& m_main_loop; LazyBool m_supports_mem_region = eLazyBoolCalculate; - std::vector> m_mem_region_cache; // Private Instance Methods NativeProcessNetBSD(::pid_t pid, int terminal_fd, NativeDelegate &delegate, diff --git a/lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp b/lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp index 23e94a5f55e21..29aaf4752d57a 100644 --- a/lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp +++ b/lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp @@ -186,4 +186,12 @@ void NativeProcessELF::NotifyDidExec() { m_shared_library_info_addr.reset(); } +void NativeProcessELF::DoStopIDBumped(uint32_t newBumpId) { + Log *log = GetLog(POSIXLog::Process); + LLDB_LOG(log, "newBumpId={0}", newBumpId); + LLDB_LOG(log, "clearing {0} entries from memory region cache", + m_mem_region_cache.size()); + m_mem_region_cache.clear(); +} + } // namespace lldb_private diff --git a/lldb/source/Plugins/Process/POSIX/NativeProcessELF.h b/lldb/source/Plugins/Process/POSIX/NativeProcessELF.h index 937def94436be..b5a9a26b4ea8d 100644 --- a/lldb/source/Plugins/Process/POSIX/NativeProcessELF.h +++ b/lldb/source/Plugins/Process/POSIX/NativeProcessELF.h @@ -9,8 +9,10 @@ #ifndef liblldb_NativeProcessELF_H_ #define liblldb_NativeProcessELF_H_ +#include "Plugins/Process/POSIX/ProcessPOSIXLog.h" #include "Plugins/Process/Utility/AuxVector.h" #include "lldb/Host/common/NativeProcessProtocol.h" +#include "lldb/Target/MemoryRegionInfo.h" #include "llvm/BinaryFormat/ELF.h" #include @@ -24,6 +26,7 @@ class NativeProcessELF : public NativeProcessProtocol { public: std::optional GetAuxValue(enum AuxVector::EntryType type); + void DoStopIDBumped(uint32_t newBumpId) override; protected: template struct ELFLinkMap { @@ -50,6 +53,7 @@ class NativeProcessELF : public NativeProcessProtocol { std::unique_ptr m_aux_vector; std::optional m_shared_library_info_addr; + std::vector> m_mem_region_cache; }; // Explicitly declare the two 32/64 bit templates that NativeProcessELF.cpp will diff --git a/lldb/test/Shell/Breakpoint/Inputs/break_stepout.c b/lldb/test/Shell/Breakpoint/Inputs/break_stepout.c new file mode 100644 index 0000000000000..b7ae5db6e77bf --- /dev/null +++ b/lldb/test/Shell/Breakpoint/Inputs/break_stepout.c @@ -0,0 +1,2 @@ +#include +int main() { printf("Hello World\n"); } diff --git a/lldb/test/Shell/Breakpoint/step-out.test b/lldb/test/Shell/Breakpoint/step-out.test new file mode 100644 index 0000000000000..d77cb8213c777 --- /dev/null +++ b/lldb/test/Shell/Breakpoint/step-out.test @@ -0,0 +1,13 @@ +# REQUIRES: system-freebsd + +# RUN: cp %p/Inputs/break_stepout.c %t.c +# RUN: %clang_host -O0 -g -o %t %t.c +# RUN: rm %t.c +# RUN: %lldb -b -o "br set -n vfprintf" -o run -o "thread step-out" -o "thread step-out" %t 2>&1 | FileCheck %s + +## Check if we step-out twice sucessfully + +CHECK: stop reason = step out +CHECK-NEXT: printf +CHECK: stop reason = step out +CHECK-NEXT: main