[Lldb-commits] [lldb] [lldb] Add more ways to find the .dwp file. (PR #81067)
via lldb-commits
lldb-commits at lists.llvm.org
Mon Feb 12 18:04:42 PST 2024
================
@@ -4349,26 +4349,53 @@ SymbolFileDWARFDebugMap *SymbolFileDWARF::GetDebugMapSymfile() {
const std::shared_ptr<SymbolFileDWARFDwo> &SymbolFileDWARF::GetDwpSymbolFile() {
llvm::call_once(m_dwp_symfile_once_flag, [this]() {
+ // Create a list of files to try and append .dwp to.
+ FileSpecList symfiles;
+ // Append the module's object file path.
+ const FileSpec module_fspec = m_objfile_sp->GetModule()->GetFileSpec();
+ symfiles.Append(module_fspec);
+ // Append the object file for this SymbolFile only if it is different from
+ // the module's file path. Our main module could be "a.out", our symbol file
+ // could be "a.debug" and our ".dwp" file might be "a.debug.dwp" instead of
+ // "a.out.dwp".
+ const FileSpec symfile_fspec(m_objfile_sp->GetFileSpec());
+ if (symfile_fspec != module_fspec) {
+ symfiles.Append(symfile_fspec);
+ } else {
+ // If we don't have a separate debug info file, then try stripping the
+ // extension. The main module could be "a.debug" and the .dwp file could
+ // be "a.dwp" instead of "a.debug.dwp".
+ ConstString filename_no_ext =
+ module_fspec.GetFileNameStrippingExtension();
+ if (filename_no_ext != module_fspec.GetFilename()) {
+ FileSpec module_spec_no_ext(module_fspec);
+ module_spec_no_ext.SetFilename(filename_no_ext);
+ symfiles.Append(module_spec_no_ext);
+ }
+ }
+
+ FileSpecList search_paths = Target::GetDefaultDebugFileSearchPaths();
ModuleSpec module_spec;
module_spec.GetFileSpec() = m_objfile_sp->GetFileSpec();
- module_spec.GetSymbolFileSpec() =
- FileSpec(m_objfile_sp->GetModule()->GetFileSpec().GetPath() + ".dwp");
-
module_spec.GetUUID() = m_objfile_sp->GetUUID();
- FileSpecList search_paths = Target::GetDefaultDebugFileSearchPaths();
- FileSpec dwp_filespec =
- PluginManager::LocateExecutableSymbolFile(module_spec, search_paths);
- if (FileSystem::Instance().Exists(dwp_filespec)) {
- DataBufferSP dwp_file_data_sp;
- lldb::offset_t dwp_file_data_offset = 0;
- ObjectFileSP dwp_obj_file = ObjectFile::FindPlugin(
- GetObjectFile()->GetModule(), &dwp_filespec, 0,
- FileSystem::Instance().GetByteSize(dwp_filespec), dwp_file_data_sp,
- dwp_file_data_offset);
- if (!dwp_obj_file)
- return;
- m_dwp_symfile = std::make_shared<SymbolFileDWARFDwo>(
- *this, dwp_obj_file, DIERef::k_file_index_mask);
+ for (const auto &symfile : symfiles.files()) {
+ module_spec.GetSymbolFileSpec() =
+ FileSpec(symfile.GetPath() + ".dwp", symfile.GetPathStyle());
+ FileSpec dwp_filespec =
+ PluginManager::LocateExecutableSymbolFile(module_spec, search_paths);
+ if (FileSystem::Instance().Exists(dwp_filespec)) {
+ DataBufferSP dwp_file_data_sp;
+ lldb::offset_t dwp_file_data_offset = 0;
+ ObjectFileSP dwp_obj_file = ObjectFile::FindPlugin(
+ GetObjectFile()->GetModule(), &dwp_filespec, 0,
+ FileSystem::Instance().GetByteSize(dwp_filespec), dwp_file_data_sp,
+ dwp_file_data_offset);
+ if (dwp_obj_file) {
----------------
jeffreytan81 wrote:
Similar, adding a logging saying - found a matching dwp file and use it.
https://github.com/llvm/llvm-project/pull/81067
More information about the lldb-commits
mailing list