[Lldb-commits] [lldb] DynamicLoaderDarwin load images in parallel (PR #110439)

2024-09-29 Thread Dmitrii Galimzianov via lldb-commits

https://github.com/DmT021 edited 
https://github.com/llvm/llvm-project/pull/110439
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] DynamicLoaderDarwin load images in parallel (PR #110439)

2024-09-29 Thread Dmitrii Galimzianov via lldb-commits

https://github.com/DmT021 created 
https://github.com/llvm/llvm-project/pull/110439

When `plugin.dynamic-loader.darwin.enable-parallel-image-load` is enabled 
`DynamicLoaderDarwin::AddModulesUsingImageInfos` will load images in parallel 
using the thread pool.

>From d6183d6b0e1c755d6adf3f52463742e50a234f16 Mon Sep 17 00:00:00 2001
From: Dmitrii Galimzianov 
Date: Sun, 29 Sep 2024 22:24:19 +0200
Subject: [PATCH] DynamicLoaderDarwin load images in parallel

---
 .../DynamicLoader/MacOSX-DYLD/CMakeLists.txt  | 12 +++
 .../MacOSX-DYLD/DynamicLoaderDarwin.cpp   | 97 ++-
 .../MacOSX-DYLD/DynamicLoaderDarwin.h | 11 +++
 .../DynamicLoaderDarwinProperties.td  |  8 ++
 .../MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp   |  8 +-
 .../MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h |  2 +
 6 files changed, 132 insertions(+), 6 deletions(-)
 create mode 100644 
lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwinProperties.td

diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/CMakeLists.txt 
b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/CMakeLists.txt
index 7308374c8bfba6..b53699b31252ab 100644
--- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/CMakeLists.txt
+++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/CMakeLists.txt
@@ -1,3 +1,11 @@
+lldb_tablegen(DynamicLoaderDarwinProperties.inc -gen-lldb-property-defs
+  SOURCE DynamicLoaderDarwinProperties.td
+  TARGET LLDBPluginDynamicLoaderDarwinPropertiesGen)
+
+lldb_tablegen(DynamicLoaderDarwinPropertiesEnum.inc 
-gen-lldb-property-enum-defs
+  SOURCE DynamicLoaderDarwinProperties.td
+  TARGET LLDBPluginDynamicLoaderDarwinPropertiesEnumGen)
+
 add_lldb_library(lldbPluginDynamicLoaderMacOSXDYLD PLUGIN
   DynamicLoaderMacOSXDYLD.cpp
   DynamicLoaderMacOS.cpp
@@ -16,3 +24,7 @@ add_lldb_library(lldbPluginDynamicLoaderMacOSXDYLD PLUGIN
 Support
 TargetParser
   )
+
+add_dependencies(lldbPluginDynamicLoaderMacOSXDYLD
+  LLDBPluginDynamicLoaderDarwinPropertiesGen
+  LLDBPluginDynamicLoaderDarwinPropertiesEnumGen)
diff --git 
a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp 
b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
index 3863b6b3520db4..b085ccb4fcaa42 100644
--- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
+++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
@@ -34,6 +34,7 @@
 
 #include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h"
 #include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
+#include "llvm/Support/ThreadPool.h"
 
 //#define ENABLE_DEBUG_PRINTF // COMMENT THIS LINE OUT PRIOR TO CHECKIN
 #ifdef ENABLE_DEBUG_PRINTF
@@ -48,6 +49,36 @@
 using namespace lldb;
 using namespace lldb_private;
 
+#define LLDB_PROPERTIES_dynamicloaderdarwin
+#include "DynamicLoaderDarwinProperties.inc"
+
+enum {
+#define LLDB_PROPERTIES_dynamicloaderdarwin
+#include "DynamicLoaderDarwinPropertiesEnum.inc"
+};
+
+ConstString &DynamicLoaderDarwinProperties::GetSettingName() {
+  static ConstString g_setting_name("darwin");
+  return g_setting_name;
+}
+
+DynamicLoaderDarwinProperties::DynamicLoaderDarwinProperties() : Properties() {
+  m_collection_sp = std::make_shared(GetSettingName());
+  m_collection_sp->Initialize(g_dynamicloaderdarwin_properties);
+}
+
+bool DynamicLoaderDarwinProperties::GetEnableParallelImageLoad() const {
+  return GetPropertyAtIndexAs(
+  ePropertyEnableParallelImageLoad,
+  g_dynamicloaderdarwin_properties[ePropertyEnableParallelImageLoad]
+  .default_uint_value != 0);
+}
+
+DynamicLoaderDarwinProperties &DynamicLoaderDarwinProperties::GetGlobal() {
+  static DynamicLoaderDarwinProperties g_settings;
+  return g_settings;
+}
+
 // Constructor
 DynamicLoaderDarwin::DynamicLoaderDarwin(Process *process)
 : DynamicLoader(process), m_dyld_module_wp(), m_libpthread_module_wp(),
@@ -77,6 +108,17 @@ void DynamicLoaderDarwin::DidLaunch() {
   SetNotificationBreakpoint();
 }
 
+void DynamicLoaderDarwin::CreateSettings(lldb_private::Debugger &debugger) {
+  if (!PluginManager::GetSettingForDynamicLoaderPlugin(
+  debugger, DynamicLoaderDarwinProperties::GetSettingName())) {
+const bool is_global_setting = true;
+PluginManager::CreateSettingForDynamicLoaderPlugin(
+debugger,
+DynamicLoaderDarwinProperties::GetGlobal().GetValueProperties(),
+"Properties for the DynamicLoaderDarwin plug-in.", is_global_setting);
+  }
+}
+
 // Clear out the state of this class.
 void DynamicLoaderDarwin::Clear(bool clear_process) {
   std::lock_guard guard(m_mutex);
@@ -640,6 +682,41 @@ ModuleSP DynamicLoaderDarwin::GetDYLDModule() {
 
 void DynamicLoaderDarwin::ClearDYLDModule() { m_dyld_module_wp.reset(); }
 
+template 
+std::vector
+parallel_map(llvm::ThreadPoolInterface &threadPool, InputIterator first,
+ InputIterator last,
+ llvm::function_ref::value_type &)>
+ transform) {
+  const auto size = std::distance(first, last)

[Lldb-commits] [lldb] [llvm] [lldb][RISCV] function calls support in lldb expressions (PR #99336)

2024-09-29 Thread Lang Hames via lldb-commits

lhames wrote:

> @lhames could you take a look, please?

Hi @dlav-sc. The `RuntimeDyld` changes look ok to me. We are hoping to switch 
LLDB to ORC / JITLink soon 
(https://discourse.llvm.org/t/rfc-removing-mcjit-and-runtimedyld/80464), but 
JITLink's RISCV support is pretty solid already -- I don't think we'll have any 
trouble moving over when we're ready.

If you want to test the RuntimeDyld changes you could add `llvm-rtdyld` tests 
(see `llvm/test/ExecutionEngine/RuntimeDyld`), but given that this is a 
stop-gap I'm ok with the changes going in as-is.

https://github.com/llvm/llvm-project/pull/99336
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [llvm] [lldb][RISCV] function calls support in lldb expressions (PR #99336)

2024-09-29 Thread Lang Hames via lldb-commits

https://github.com/lhames approved this pull request.


https://github.com/llvm/llvm-project/pull/99336
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] DynamicLoaderDarwin load images in parallel (PR #110439)

2024-09-29 Thread Dmitrii Galimzianov via lldb-commits

DmT021 wrote:

@augusto2112 Take a look when you have time

This is just one possible approach to parallelizing the initial image loading.
The other solution I'm checking now is to parallelize loading somewhere 
earlier, perhaps in `DynamicLoaderMacOS::DoInitialImageFetch`. The difference 
is that the `UpdateSpecialBinariesFromNewImageInfos` function isn't 
parallelized right now, so we still load `dyld` and the main executable image 
sequentially. If we parallelize the loading of all `image_infos` before calling 
`UpdateSpecialBinariesFromNewImageInfos` and `AddModulesUsingImageInfos` we 
might gain even better utilization of multithreading.

https://github.com/llvm/llvm-project/pull/110439
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits