[Lldb-commits] [lldb] r311622 - When parsing the DBGSourcePathRemapping plist entries

Jason Molenda via lldb-commits lldb-commits at lists.llvm.org
Wed Aug 23 17:58:14 PDT 2017


Author: jmolenda
Date: Wed Aug 23 17:58:14 2017
New Revision: 311622

URL: http://llvm.org/viewvc/llvm-project?rev=311622&view=rev
Log:
When parsing the DBGSourcePathRemapping plist entries
in a dSYM, and it's a version 2 DBGSourcePathRemapping,
in addition to the build/source paths specified, add 
build/source paths with the last two filename components
removed.  This more generic remapping can sometimes
help lldb to find the correct source file in complex
projects.
<rdar://problem/33973545> 

Modified:
    lldb/trunk/source/Host/macosx/Symbols.cpp
    lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp

Modified: lldb/trunk/source/Host/macosx/Symbols.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Symbols.cpp?rev=311622&r1=311621&r2=311622&view=diff
==============================================================================
--- lldb/trunk/source/Host/macosx/Symbols.cpp (original)
+++ lldb/trunk/source/Host/macosx/Symbols.cpp Wed Aug 23 17:58:14 2017
@@ -361,6 +361,7 @@ static bool GetModuleSpecInfoFromUUIDDic
       // If we see DBGVersion with a value of 2 or higher, this is a new style
       // DBGSourcePathRemapping dictionary
       bool new_style_source_remapping_dictionary = false;
+      bool do_truncate_remapping_names = false;
       std::string original_DBGSourcePath_value = DBGSourcePath;
       cf_str = (CFStringRef)CFDictionaryGetValue((CFDictionaryRef)uuid_dict,
                                                  CFSTR("DBGVersion"));
@@ -372,6 +373,9 @@ static bool GetModuleSpecInfoFromUUIDDic
           if (version_number > 1) {
             new_style_source_remapping_dictionary = true;
           }
+          if (version_number == 2) {
+            do_truncate_remapping_names = true;
+          }
         }
       }
 
@@ -409,9 +413,24 @@ static bool GetModuleSpecInfoFromUUIDDic
               FileSpec resolved_source_path(DBGSourcePath.c_str(), true);
               DBGSourcePath = resolved_source_path.GetPath();
             }
+            // With version 2 of DBGSourcePathRemapping, we can chop off the
+            // last two filename parts from the source remapping and get a
+            // more general source remapping that still works. Add this as
+            // another option in addition to the full source path remap.
             module_spec.GetSourceMappingList().Append(
                 ConstString(DBGBuildSourcePath.c_str()),
                 ConstString(DBGSourcePath.c_str()), true);
+            if (do_truncate_remapping_names) {
+              FileSpec build_path(DBGBuildSourcePath.c_str(), false);
+              FileSpec source_path(DBGSourcePath.c_str(), false);
+              build_path.RemoveLastPathComponent();
+              build_path.RemoveLastPathComponent();
+              source_path.RemoveLastPathComponent();
+              source_path.RemoveLastPathComponent();
+              module_spec.GetSourceMappingList().Append(
+                ConstString(build_path.GetPath().c_str()),
+                ConstString(source_path.GetPath().c_str()), true);
+            }
           }
         }
         if (keys)

Modified: lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp?rev=311622&r1=311621&r2=311622&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp Wed Aug 23 17:58:14 2017
@@ -220,6 +220,7 @@ SymbolVendorMacOSX::CreateInstance(const
                         // the original
                         // gloal DBGSourcePath string.
                         bool new_style_source_remapping_dictionary = false;
+                        bool do_truncate_remapping_names = false;
                         std::string original_DBGSourcePath_value =
                             DBGSourcePath;
                         if (plist_sp->GetAsDictionary()->HasKey("DBGVersion")) {
@@ -233,6 +234,9 @@ SymbolVendorMacOSX::CreateInstance(const
                             if (version_number > 1) {
                               new_style_source_remapping_dictionary = true;
                             }
+                            if (version_number == 2) {
+                                do_truncate_remapping_names = true;
+                            }
                           }
                         }
 
@@ -242,7 +246,7 @@ SymbolVendorMacOSX::CreateInstance(const
                                 ->GetAsDictionary();
                         remappings_dict->ForEach(
                             [&module_sp, new_style_source_remapping_dictionary,
-                             original_DBGSourcePath_value](
+                             original_DBGSourcePath_value, do_truncate_remapping_names](
                                 ConstString key,
                                 StructuredData::Object *object) -> bool {
                               if (object && object->GetAsString()) {
@@ -264,6 +268,21 @@ SymbolVendorMacOSX::CreateInstance(const
                                 }
                                 module_sp->GetSourceMappingList().Append(
                                     key, ConstString(DBGSourcePath), true);
+                                // With version 2 of DBGSourcePathRemapping, we can chop off the
+                                // last two filename parts from the source remapping and get a
+                                // more general source remapping that still works.  Add this as
+                                // another option in addition to the full source path remap.
+                                if (do_truncate_remapping_names) {
+                                  FileSpec build_path(key.AsCString(), false);
+                                  FileSpec source_path(DBGSourcePath.c_str(), false);
+                                  build_path.RemoveLastPathComponent();
+                                  build_path.RemoveLastPathComponent();
+                                  source_path.RemoveLastPathComponent();
+                                  source_path.RemoveLastPathComponent();
+                                  module_sp->GetSourceMappingList().Append(
+                                      ConstString(build_path.GetPath().c_str()),
+                                      ConstString(source_path.GetPath().c_str()), true);
+                                }
                               }
                               return true;
                             });




More information about the lldb-commits mailing list