diff options
-rw-r--r-- | lldb/include/lldb/Target/Platform.h | 3 | ||||
-rw-r--r-- | lldb/source/Core/Module.cpp | 3 | ||||
-rw-r--r-- | lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp | 33 | ||||
-rw-r--r-- | lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h | 3 | ||||
-rw-r--r-- | lldb/source/Target/Platform.cpp | 2 | ||||
-rw-r--r-- | lldb/source/Target/Target.cpp | 6 |
6 files changed, 42 insertions, 8 deletions
diff --git a/lldb/include/lldb/Target/Platform.h b/lldb/include/lldb/Target/Platform.h index 887bf9a2ae6..d9122c38d6f 100644 --- a/lldb/include/lldb/Target/Platform.h +++ b/lldb/include/lldb/Target/Platform.h @@ -331,7 +331,8 @@ namespace lldb_private { //---------------------------------------------------------------------- virtual FileSpecList LocateExecutableScriptingResources (Target *target, - Module &module); + Module &module, + Stream* feedback_stream); virtual Error GetSharedModule (const ModuleSpec &module_spec, diff --git a/lldb/source/Core/Module.cpp b/lldb/source/Core/Module.cpp index d337a8832b1..e06a458a17f 100644 --- a/lldb/source/Core/Module.cpp +++ b/lldb/source/Core/Module.cpp @@ -1532,7 +1532,8 @@ Module::LoadScriptingResourceInTarget (Target *target, Error& error, Stream* fee } FileSpecList file_specs = platform_sp->LocateExecutableScriptingResources (target, - *this); + *this, + feedback_stream); const uint32_t num_specs = file_specs.GetSize(); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp index 77f6fd9f896..71740c16356 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp @@ -56,7 +56,8 @@ PlatformDarwin::~PlatformDarwin() FileSpecList PlatformDarwin::LocateExecutableScriptingResources (Target *target, - Module &module) + Module &module, + Stream* feedback_stream) { FileSpecList file_list; if (target && target->GetDebugger().GetScriptLanguage() == eScriptLanguagePython) @@ -84,6 +85,7 @@ PlatformDarwin::LocateExecutableScriptingResources (Target *target, while (module_spec.GetFilename()) { std::string module_basename (module_spec.GetFilename().GetCString()); + std::string original_module_basename (module_basename); // FIXME: for Python, we cannot allow certain characters in module // filenames we import. Theoretically, different scripting languages may @@ -97,10 +99,39 @@ PlatformDarwin::LocateExecutableScriptingResources (Target *target, StreamString path_string; + StreamString original_path_string; // for OSX we are going to be in .dSYM/Contents/Resources/DWARF/<basename> // let us go to .dSYM/Contents/Resources/Python/<basename>.py and see if the file exists path_string.Printf("%s/../Python/%s.py",symfile_spec.GetDirectory().GetCString(), module_basename.c_str()); + original_path_string.Printf("%s/../Python/%s.py",symfile_spec.GetDirectory().GetCString(), original_module_basename.c_str()); FileSpec script_fspec(path_string.GetData(), true); + FileSpec orig_script_fspec(original_path_string.GetData(), true); + + // if we did some replacements of reserved characters, and a file with the untampered name + // exists, then warn the user that the file as-is shall not be loaded + if (feedback_stream) + { + if (module_basename != original_module_basename + && orig_script_fspec.Exists()) + { + if (script_fspec.Exists()) + feedback_stream->Printf("warning: the symbol file '%s' contains a debug script. However, its name" + " '%s' contains reserved characters and as such cannot be loaded. LLDB will" + " load '%s' instead. Consider removing the file with the malformed name to" + " eliminate this warning.\n", + symfile_spec.GetPath().c_str(), + original_path_string.GetData(), + path_string.GetData()); + else + feedback_stream->Printf("warning: the symbol file '%s' contains a debug script. However, its name" + " contains reserved characters and as such cannot be loaded. If you intend" + " to have this script loaded, please rename '%s' to '%s' and retry.\n", + symfile_spec.GetPath().c_str(), + original_path_string.GetData(), + path_string.GetData()); + } + } + if (script_fspec.Exists()) { file_list.Append (script_fspec); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h index 21529a8e961..535e38bf76a 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h @@ -40,7 +40,8 @@ public: lldb_private::FileSpecList LocateExecutableScriptingResources (lldb_private::Target *target, - lldb_private::Module &module); + lldb_private::Module &module, + lldb_private::Stream* feedback_stream); virtual lldb_private::Error GetSharedModule (const lldb_private::ModuleSpec &module_spec, diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp index 82185847f3f..f5dd66a3e59 100644 --- a/lldb/source/Target/Platform.cpp +++ b/lldb/source/Target/Platform.cpp @@ -92,7 +92,7 @@ Platform::GetFileWithUUID (const FileSpec &platform_file, } FileSpecList -Platform::LocateExecutableScriptingResources (Target *target, Module &module) +Platform::LocateExecutableScriptingResources (Target *target, Module &module, Stream* feedback_stream) { return FileSpecList(); } diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp index e3fd790bdaf..d2d0b509855 100644 --- a/lldb/source/Target/Target.cpp +++ b/lldb/source/Target/Target.cpp @@ -1013,10 +1013,10 @@ LoadScriptingResourceForModule (const ModuleSP &module_sp, Target *target) target->GetDebugger().GetErrorFile()->Printf("unable to load scripting data for module %s - error reported was %s\n", module_sp->GetFileSpec().GetFileNameStrippingExtension().GetCString(), error.AsCString()); - if (feedback_stream.GetSize()) - target->GetDebugger().GetErrorFile()->Printf("%s\n", - feedback_stream.GetData()); } + if (feedback_stream.GetSize()) + target->GetDebugger().GetErrorFile()->Printf("%s\n", + feedback_stream.GetData()); } void |