Author: Med Ismail Bennani Date: 2024-07-22T11:43:32-07:00 New Revision: bb8a74075b164ea0d9b3155f64d0590fc6072cdd
URL: https://github.com/llvm/llvm-project/commit/bb8a74075b164ea0d9b3155f64d0590fc6072cdd DIFF: https://github.com/llvm/llvm-project/commit/bb8a74075b164ea0d9b3155f64d0590fc6072cdd.diff LOG: [lldb] Change GetStartSymbol to GetStartAddress in DynamicLoader (#99909) On linux, the start address doesn't necessarily have a symbol attached to it. This is why this patch replaces `DynamicLoader::GetStartSymbol` with `DynamicLoader::GetStartAddress` instead to make it more generic. Signed-off-by: Med Ismail Bennani <ism...@bennani.ma> Added: Modified: lldb/include/lldb/Target/DynamicLoader.h lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h Removed: ################################################################################ diff --git a/lldb/include/lldb/Target/DynamicLoader.h b/lldb/include/lldb/Target/DynamicLoader.h index 15384245194b0..0629e2faae7e9 100644 --- a/lldb/include/lldb/Target/DynamicLoader.h +++ b/lldb/include/lldb/Target/DynamicLoader.h @@ -9,8 +9,8 @@ #ifndef LLDB_TARGET_DYNAMICLOADER_H #define LLDB_TARGET_DYNAMICLOADER_H +#include "lldb/Core/Address.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" @@ -25,6 +25,7 @@ namespace lldb_private { class ModuleList; class Process; class SectionList; +class Symbol; class SymbolContext; class SymbolContextList; class Thread; @@ -329,10 +330,10 @@ 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 + /// Return the `start` \b address in the dynamic loader module. + /// This is the address the process will begin executing with /// `process launch --stop-at-entry`. - virtual std::optional<lldb_private::Symbol> GetStartSymbol() { + virtual std::optional<lldb_private::Address> GetStartAddress() { return std::nullopt; } diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp index 5c6331735bde8..3863b6b3520db 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp @@ -609,7 +609,7 @@ void DynamicLoaderDarwin::UpdateDYLDImageInfoFromNewImageInfo( } } -std::optional<lldb_private::Symbol> DynamicLoaderDarwin::GetStartSymbol() { +std::optional<lldb_private::Address> DynamicLoaderDarwin::GetStartAddress() { Log *log = GetLog(LLDBLog::DynamicLoader); auto log_err = [log](llvm::StringLiteral err_msg) -> std::nullopt_t { @@ -626,7 +626,7 @@ std::optional<lldb_private::Symbol> DynamicLoaderDarwin::GetStartSymbol() { if (!symbol) return log_err("Cannot find `start` symbol in DYLD module."); - return *symbol; + return symbol->GetAddress(); } void DynamicLoaderDarwin::SetDYLDModule(lldb::ModuleSP &dyld_module_sp) { diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h index 4ac55fdf6f3af..3613c4c29b178 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h @@ -56,6 +56,8 @@ class DynamicLoaderDarwin : public lldb_private::DynamicLoader { virtual bool NeedToDoInitialImageFetch() = 0; + std::optional<lldb_private::Address> GetStartAddress() override; + protected: void PrivateInitialize(lldb_private::Process *process); @@ -67,8 +69,6 @@ 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(); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits