clayborg requested changes to this revision. clayborg added a comment. This revision now requires changes to proceed.
DW_AT_comp_dir isn't enough. See inline suggestions. ================ Comment at: source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp:775-787 +void DWARFUnit::ComputePathStyle() { + m_path_style = FileSpec::Style::native; + const DWARFDebugInfoEntry *die = GetUnitDIEPtrOnly(); + if (!die) + return; + llvm::StringRef comp_dir = + die->GetAttributeValueAsString(m_dwarf, this, DW_AT_comp_dir, NULL); ---------------- I would suggest adding a "FileSpec DWARFUnit::GetFileSpec()" and moving code from SymbolFileDWARF::ParseCompileUnit into this function: ``` FileSpec cu_file_spec(cu_die.GetName()); if (cu_file_spec) { // If we have a full path to the compile unit, we don't need to // resolve the file. This can be expensive e.g. when the source // files are // NFS mounted. if (cu_file_spec.IsRelative()) { const char *cu_comp_dir{ cu_die.GetAttributeValueAsString(DW_AT_comp_dir, nullptr)}; cu_file_spec.PrependPathComponent(resolveCompDir(cu_comp_dir)); } ``` We might even cache the FileSpec object inside DWARFUnit so it doesn't have to be recomputed? Then use this resolved path. DW_AT_comp_dir isn't always there, sometimes the DW_AT_name is a full path only. So we should centralize this in DWARFUnit. We might want to make a function like: ``` void DWARFUnit::ResolveCompileUnitDirectoryRelativeFile(FileSpec &spec); ``` And then have "FileSpec DWARFUnit::GetFileSpec()" call it. I was looking at the other uses of DW_AT_comp_dir in the source, and the line tables tend to need to resolve relative paths. A few other locations. Might be nice to get the DWARFUnit and resolve the path using that? We can add "FileSpec DWARFDie::GetPath()" accessor, could even add a "void DWARFDie::ResolveRelativePath(FileSpec &)" CHANGES SINCE LAST ACTION https://reviews.llvm.org/D56543/new/ https://reviews.llvm.org/D56543 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits