[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