llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: aokblast

<details>
<summary>Changes</summary>

All native ELF process implementations (Linux, FreeBSD, NetBSD) use 
m_mem_region_cache to cache mmap regions. Move this cache object into the 
generic ELF layer to eliminate duplication.
    
Also, implement DoStopIDBumped in the generic ELF layer, since all 
implementations require flushing the cache on stop.

---
Full diff: https://github.com/llvm/llvm-project/pull/195809.diff


8 Files Affected:

- (modified) lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.h (-1) 
- (modified) lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp (-8) 
- (modified) lldb/source/Plugins/Process/Linux/NativeProcessLinux.h (-3) 
- (modified) lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h (-1) 
- (modified) lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp (+8) 
- (modified) lldb/source/Plugins/Process/POSIX/NativeProcessELF.h (+4) 
- (added) lldb/test/Shell/Breakpoint/Inputs/break_stepout.c (+2) 
- (added) lldb/test/Shell/Breakpoint/step-out.test (+10) 


``````````diff
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<std::pair<MemoryRegionInfo, FileSpec>> 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<uint64_t>
 NativeProcessLinux::Syscall(llvm::ArrayRef<uint64_t> 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<std::pair<MemoryRegionInfo, FileSpec>> 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<std::pair<MemoryRegionInfo, FileSpec>> 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 <optional>
 
@@ -24,6 +26,7 @@ class NativeProcessELF : public NativeProcessProtocol {
 
 public:
   std::optional<uint64_t> GetAuxValue(enum AuxVector::EntryType type);
+  void DoStopIDBumped(uint32_t newBumpId) override;
 
 protected:
   template <typename T> struct ELFLinkMap {
@@ -50,6 +53,7 @@ class NativeProcessELF : public NativeProcessProtocol {
 
   std::unique_ptr<AuxVector> m_aux_vector;
   std::optional<lldb::addr_t> m_shared_library_info_addr;
+  std::vector<std::pair<MemoryRegionInfo, FileSpec>> 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 <stdio.h>
+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..101dbe6eac1e7
--- /dev/null
+++ b/lldb/test/Shell/Breakpoint/step-out.test
@@ -0,0 +1,10 @@
+# RUN: cp %p/Inputs/break_stepout.c %t.c
+# RUN: %clang_host -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: stop reason = step out
+

``````````

</details>


https://github.com/llvm/llvm-project/pull/195809
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to