https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/133370
>From 8af1b715a2d2dd19f8ff374c1fcc4c513a2e6fed Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <jo...@devlieghere.com> Date: Fri, 4 Apr 2025 13:02:57 -0700 Subject: [PATCH 1/2] [lldb] Add a {ObjectFile,SymbolFile}::GetObjectName method Add ObjectFile::GetObjectName and SymbolFile::GetObjectName to retrieve the name of the object file, including the `.a` for static libraries. We currently do something similar in CommandObjectTarget, but the code for dumping this is a lot more involved than what's being offered by the new method. We have options to print he full path, the base name, and the directoy of the path and trim it to a specific width. --- lldb/include/lldb/Symbol/ObjectFile.h | 1 + lldb/include/lldb/Symbol/SymbolFile.h | 2 ++ .../Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp | 7 +------ lldb/source/Symbol/ObjectFile.cpp | 9 +++++++++ lldb/source/Symbol/SymbolFile.cpp | 8 ++++++++ 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/lldb/include/lldb/Symbol/ObjectFile.h b/lldb/include/lldb/Symbol/ObjectFile.h index 874926da2ceb7..cfcca04a76de8 100644 --- a/lldb/include/lldb/Symbol/ObjectFile.h +++ b/lldb/include/lldb/Symbol/ObjectFile.h @@ -748,6 +748,7 @@ class ObjectFile : public std::enable_shared_from_this<ObjectFile>, static lldb::DataBufferSP MapFileData(const FileSpec &file, uint64_t Size, uint64_t Offset); + std::string GetObjectName() const; protected: // Member variables. diff --git a/lldb/include/lldb/Symbol/SymbolFile.h b/lldb/include/lldb/Symbol/SymbolFile.h index dd056035d546e..f35d3ee9f22ae 100644 --- a/lldb/include/lldb/Symbol/SymbolFile.h +++ b/lldb/include/lldb/Symbol/SymbolFile.h @@ -491,6 +491,8 @@ class SymbolFile : public PluginInterface { return args; } + std::string GetObjectName() const; + protected: void AssertModuleLock(); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp index ce351274b4576..961c212e2e6dc 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp @@ -727,12 +727,7 @@ void SymbolFileDWARFDebugMap::ForEachSymbolFile( Progress::kDefaultHighFrequencyReportTime); for (uint32_t oso_idx = 0; oso_idx < num_oso_idxs; ++oso_idx) { if (SymbolFileDWARF *oso_dwarf = GetSymbolFileByOSOIndex(oso_idx)) { - progress.Increment(oso_idx, oso_dwarf->GetObjectFile() - ? oso_dwarf->GetObjectFile() - ->GetFileSpec() - .GetFilename() - .GetString() - : ""); + progress.Increment(oso_idx, oso_dwarf->GetObjectName()); if (closure(*oso_dwarf) == IterationAction::Stop) return; } diff --git a/lldb/source/Symbol/ObjectFile.cpp b/lldb/source/Symbol/ObjectFile.cpp index 264acad050e35..2f2c59d6af620 100644 --- a/lldb/source/Symbol/ObjectFile.cpp +++ b/lldb/source/Symbol/ObjectFile.cpp @@ -775,6 +775,15 @@ uint32_t ObjectFile::GetCacheHash() { return *m_cache_hash; } +std::string ObjectFile::GetObjectName() const { + if (ModuleSP module_sp = GetModule()) + if (ConstString object_name = module_sp->GetObjectName()) + return llvm::formatv("{0}({1})", GetFileSpec().GetFilename().GetString(), + object_name.GetString()) + .str(); + return GetFileSpec().GetFilename().GetString(); +} + namespace llvm { namespace json { diff --git a/lldb/source/Symbol/SymbolFile.cpp b/lldb/source/Symbol/SymbolFile.cpp index 16ed98d7840f7..9353d651b4b13 100644 --- a/lldb/source/Symbol/SymbolFile.cpp +++ b/lldb/source/Symbol/SymbolFile.cpp @@ -12,7 +12,9 @@ #include "lldb/Core/PluginManager.h" #include "lldb/Symbol/CompileUnit.h" #include "lldb/Symbol/ObjectFile.h" +#include "lldb/Symbol/Symbol.h" #include "lldb/Symbol/SymbolFileOnDemand.h" +#include "lldb/Symbol/Symtab.h" #include "lldb/Symbol/TypeMap.h" #include "lldb/Symbol/TypeSystem.h" #include "lldb/Symbol/VariableList.h" @@ -259,3 +261,9 @@ void SymbolFileCommon::Dump(Stream &s) { if (Symtab *symtab = GetSymtab()) symtab->Dump(&s, nullptr, eSortOrderNone); } + +std::string SymbolFile::GetObjectName() const { + if (const ObjectFile *object_file = GetObjectFile()) + return object_file->GetObjectName(); + return ""; +} >From 2c2d35a8ea718dc66fc6d7ef40314a4950f25323 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <jo...@devlieghere.com> Date: Fri, 4 Apr 2025 15:51:55 -0700 Subject: [PATCH 2/2] Remove includes clangd added --- lldb/source/Symbol/SymbolFile.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/lldb/source/Symbol/SymbolFile.cpp b/lldb/source/Symbol/SymbolFile.cpp index 9353d651b4b13..94e32b55572dd 100644 --- a/lldb/source/Symbol/SymbolFile.cpp +++ b/lldb/source/Symbol/SymbolFile.cpp @@ -12,9 +12,7 @@ #include "lldb/Core/PluginManager.h" #include "lldb/Symbol/CompileUnit.h" #include "lldb/Symbol/ObjectFile.h" -#include "lldb/Symbol/Symbol.h" #include "lldb/Symbol/SymbolFileOnDemand.h" -#include "lldb/Symbol/Symtab.h" #include "lldb/Symbol/TypeMap.h" #include "lldb/Symbol/TypeSystem.h" #include "lldb/Symbol/VariableList.h" _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits