https://github.com/medismailben updated https://github.com/llvm/llvm-project/pull/99673
>From 16ef7297eef25d329631fd62d126bf7a7be24c4d Mon Sep 17 00:00:00 2001 From: Med Ismail Bennani <ism...@bennani.ma> Date: Fri, 19 Jul 2024 11:08:39 -0700 Subject: [PATCH 1/2] [lldb/Target] Add GetStartSymbol method to DynamicLoader plugins This patch introduces a new method to the dynamic loader plugin, to fetch its `start` symbol. This can be useful to resolve the `start` symbol address for instance. Signed-off-by: Med Ismail Bennani <ism...@bennani.ma> --- lldb/include/lldb/Target/DynamicLoader.h | 10 +++++++++- .../MacOSX-DYLD/DynamicLoaderDarwin.cpp | 20 +++++++++++++++++++ .../MacOSX-DYLD/DynamicLoaderDarwin.h | 2 ++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/lldb/include/lldb/Target/DynamicLoader.h b/lldb/include/lldb/Target/DynamicLoader.h index e508d192d2759..fd3b3924c2725 100644 --- a/lldb/include/lldb/Target/DynamicLoader.h +++ b/lldb/include/lldb/Target/DynamicLoader.h @@ -10,9 +10,11 @@ #define LLDB_TARGET_DYNAMICLOADER_H #include "lldb/Core/PluginInterface.h" +#include "lldb/Symbol/Symbol.h" #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/Status.h" #include "lldb/Utility/UUID.h" +#include "lldb/Utility/UnimplementedError.h" #include "lldb/lldb-defines.h" #include "lldb/lldb-forward.h" #include "lldb/lldb-private-enumerations.h" @@ -24,7 +26,6 @@ namespace lldb_private { class ModuleList; class Process; class SectionList; -class Symbol; class SymbolContext; class SymbolContextList; class Thread; @@ -329,6 +330,13 @@ class DynamicLoader : public PluginInterface { /// safe to call certain APIs or SPIs. virtual bool IsFullyInitialized() { return true; } + /// Return the `start` function \b symbol in the dynamic loader module. + /// This is the symbol the process will begin executing with + /// `process launch --stop-at-entry`. + virtual std::optional<lldb_private::Symbol> GetStartSymbol() { + return std::nullopt; + } + protected: // Utility methods for derived classes diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp index 0e17d57fa9c4f..5c6331735bde8 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp @@ -609,6 +609,26 @@ void DynamicLoaderDarwin::UpdateDYLDImageInfoFromNewImageInfo( } } +std::optional<lldb_private::Symbol> DynamicLoaderDarwin::GetStartSymbol() { + Log *log = GetLog(LLDBLog::DynamicLoader); + + auto log_err = [log](llvm::StringLiteral err_msg) -> std::nullopt_t { + LLDB_LOGV(log, "{}", err_msg); + return std::nullopt; + }; + + ModuleSP dyld_sp = GetDYLDModule(); + if (!dyld_sp) + return log_err("Couldn't retrieve DYLD module. Cannot get `start` symbol."); + + const Symbol *symbol = + dyld_sp->FindFirstSymbolWithNameAndType(ConstString("_dyld_start")); + if (!symbol) + return log_err("Cannot find `start` symbol in DYLD module."); + + return *symbol; +} + void DynamicLoaderDarwin::SetDYLDModule(lldb::ModuleSP &dyld_module_sp) { m_dyld_module_wp = dyld_module_sp; } diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h index 8f9a29c94173f..4ac55fdf6f3af 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h @@ -67,6 +67,8 @@ class DynamicLoaderDarwin : public lldb_private::DynamicLoader { // Clear method for classes derived from this one virtual void DoClear() = 0; + std::optional<lldb_private::Symbol> GetStartSymbol() override; + void SetDYLDModule(lldb::ModuleSP &dyld_module_sp); lldb::ModuleSP GetDYLDModule(); >From b1184ba2ef7b98b97f55b5337472b597b2e4732c Mon Sep 17 00:00:00 2001 From: Med Ismail Bennani <ism...@bennani.ma> Date: Fri, 19 Jul 2024 11:39:20 -0700 Subject: [PATCH 2/2] Remove unused header --- lldb/include/lldb/Target/DynamicLoader.h | 1 - 1 file changed, 1 deletion(-) diff --git a/lldb/include/lldb/Target/DynamicLoader.h b/lldb/include/lldb/Target/DynamicLoader.h index fd3b3924c2725..15384245194b0 100644 --- a/lldb/include/lldb/Target/DynamicLoader.h +++ b/lldb/include/lldb/Target/DynamicLoader.h @@ -14,7 +14,6 @@ #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/Status.h" #include "lldb/Utility/UUID.h" -#include "lldb/Utility/UnimplementedError.h" #include "lldb/lldb-defines.h" #include "lldb/lldb-forward.h" #include "lldb/lldb-private-enumerations.h" _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits