[Lldb-commits] [lldb] 3cfb667 - [lldb] Don't process symlinks deep inside DWARFUnit
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Mon Dec 23 18:09:52 PST 2019
Hi Pavel,
I've temporarily reverted this in
ebcb36d4a1387e771fb49d1f6379cb5774373a5a because it broke
TestCompDirSymLink.py on macOS.
Jonas
On Mon, Dec 23, 2019 at 2:24 AM Pavel Labath via lldb-commits
<lldb-commits at lists.llvm.org> wrote:
>
>
> Author: Pavel Labath
> Date: 2019-12-23T11:24:04+01:00
> New Revision: 3cfb6677b2aa20f782d9bb0f7958e61f5a976c16
>
> URL: https://github.com/llvm/llvm-project/commit/3cfb6677b2aa20f782d9bb0f7958e61f5a976c16
> DIFF: https://github.com/llvm/llvm-project/commit/3cfb6677b2aa20f782d9bb0f7958e61f5a976c16.diff
>
> LOG: [lldb] Don't process symlinks deep inside DWARFUnit
>
> Summary:
> This code is handling debug info paths starting with /proc/self/cwd,
> which is one of the mechanisms people use to obtain "relocatable" debug
> info (the idea being that one starts the debugger with an appropriate
> cwd and things "just work").
>
> Instead of resolving the symlinks inside DWARFUnit, we can do the same
> thing more elegantly by hooking into the existing Module path remapping
> code. Since llvm::DWARFUnit does not support any similar functionality,
> doing things this way is also a step towards unifying llvm and lldb
> dwarf parsers.
>
> Reviewers: JDevlieghere, aprantl, clayborg, jdoerfert
>
> Subscribers: lldb-commits
>
> Tags: #lldb
>
> Differential Revision: https://reviews.llvm.org/D71770
>
> Added:
>
>
> Modified:
> lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
> lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
>
> Removed:
>
>
>
> ################################################################################
> diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
> index a7df540ba56b..fde6459b2c61 100644
> --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
> +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
> @@ -732,25 +732,6 @@ removeHostnameFromPathname(llvm::StringRef path_from_dwarf) {
> return path;
> }
>
> -static FileSpec resolveCompDir(const FileSpec &path) {
> - bool is_symlink = SymbolFileDWARF::GetSymlinkPaths().FindFileIndex(
> - 0, path, /*full*/ true) != UINT32_MAX;
> -
> - if (!is_symlink)
> - return path;
> -
> - namespace fs = llvm::sys::fs;
> - if (fs::get_file_type(path.GetPath(), false) != fs::file_type::symlink_file)
> - return path;
> -
> - FileSpec resolved_symlink;
> - const auto error = FileSystem::Instance().Readlink(path, resolved_symlink);
> - if (error.Success())
> - return resolved_symlink;
> -
> - return path;
> -}
> -
> void DWARFUnit::ComputeCompDirAndGuessPathStyle() {
> m_comp_dir = FileSpec();
> const DWARFDebugInfoEntry *die = GetUnitDIEPtrOnly();
> @@ -762,7 +743,7 @@ void DWARFUnit::ComputeCompDirAndGuessPathStyle() {
> if (!comp_dir.empty()) {
> FileSpec::Style comp_dir_style =
> FileSpec::GuessPathStyle(comp_dir).getValueOr(FileSpec::Style::native);
> - m_comp_dir = resolveCompDir(FileSpec(comp_dir, comp_dir_style));
> + m_comp_dir = FileSpec(comp_dir, comp_dir_style);
> } else {
> // Try to detect the style based on the DW_AT_name attribute, but just store
> // the detected style in the m_comp_dir field.
>
> diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
> index 466d5ddd23db..9021cda49419 100644
> --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
> +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
> @@ -453,6 +453,17 @@ SymbolFileDWARF::GetTypeSystemForLanguage(LanguageType language) {
> void SymbolFileDWARF::InitializeObject() {
> Log *log = LogChannelDWARF::GetLogIfAll(DWARF_LOG_DEBUG_INFO);
>
> + Module &module = *GetObjectFile()->GetModule();
> +
> + for (const FileSpec &symlink : GetSymlinkPaths()) {
> + FileSpec resolved;
> + Status status = FileSystem::Instance().Readlink(symlink, resolved);
> + if (status.Success())
> + module.GetSourceMappingList().Append(ConstString(symlink.GetPath()),
> + ConstString(resolved.GetPath()),
> + /*notify=*/true);
> + }
> +
> if (!GetGlobalPluginProperties()->IgnoreFileIndexes()) {
> DWARFDataExtractor apple_names, apple_namespaces, apple_types, apple_objc;
> LoadSectionData(eSectionTypeDWARFAppleNames, apple_names);
>
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
More information about the lldb-commits
mailing list