aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Commands/CommandObjectTarget.cpp
diff options
context:
space:
mode:
authorAdrian McCarthy <amccarth@google.com>2020-02-04 15:02:28 -0800
committerAdrian McCarthy <amccarth@google.com>2020-02-04 16:37:22 -0800
commitfb0d2d455f56bca239041c8d7ad7b57da1087b35 (patch)
tree602c74a175a15456bc7977dcd508cf02bc21ca9e /lldb/source/Commands/CommandObjectTarget.cpp
parent361ba3ad1f8779584d94868dc2cb8dd2860c5eba (diff)
downloadllvm-fb0d2d455f56bca239041c8d7ad7b57da1087b35.zip
llvm-fb0d2d455f56bca239041c8d7ad7b57da1087b35.tar.gz
llvm-fb0d2d455f56bca239041c8d7ad7b57da1087b35.tar.bz2
Fix after c25938d
My refactor caused some changes in error reporting that TestAddDsymCommand.py was checking, so this restores some of the changes to preserve the old behavior and to un-xfail the affected test. Differential Revision: https://reviews.llvm.org/D74001
Diffstat (limited to 'lldb/source/Commands/CommandObjectTarget.cpp')
-rw-r--r--lldb/source/Commands/CommandObjectTarget.cpp134
1 files changed, 62 insertions, 72 deletions
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp
index 0239f7e..50eb46f 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -4119,23 +4119,6 @@ protected:
target->GetImages().FindModules(module_spec, matching_modules);
}
- if (matching_modules.IsEmpty()) {
- StreamString ss_symfile_uuid;
- if (module_spec.GetUUID().IsValid()) {
- ss_symfile_uuid << " (";
- module_spec.GetUUID().Dump(&ss_symfile_uuid);
- ss_symfile_uuid << ')';
- }
- result.AppendErrorWithFormat(
- "symbol file '%s'%s does not match any existing module%s\n",
- symfile_path, ss_symfile_uuid.GetData(),
- !llvm::sys::fs::is_regular_file(symbol_fspec.GetPath())
- ? "\n please specify the full path to the symbol file"
- : "");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
if (matching_modules.GetSize() > 1) {
result.AppendErrorWithFormat("multiple modules match symbol file '%s', "
"use the --uuid option to resolve the "
@@ -4144,65 +4127,72 @@ protected:
result.SetStatus(eReturnStatusFailed);
return false;
}
-
- assert(matching_modules.GetSize() == 1);
- ModuleSP module_sp(matching_modules.GetModuleAtIndex(0));
-
- // The module has not yet created its symbol vendor, we can just give
- // the existing target module the symfile path to use for when it
- // decides to create it!
- module_sp->SetSymbolFileFileSpec(symbol_fspec);
-
- SymbolFile *symbol_file =
- module_sp->GetSymbolFile(true, &result.GetErrorStream());
- if (!symbol_file) {
- result.AppendErrorWithFormat("symbol file '%s' could not be loaded\n",
- symfile_path);
- result.SetStatus(eReturnStatusFailed);
- module_sp->SetSymbolFileFileSpec(FileSpec());
- return false;
- }
- ObjectFile *object_file = symbol_file->GetObjectFile();
- if (!object_file || object_file->GetFileSpec() != symbol_fspec) {
- result.AppendError("the object file could not be loaded\n");
- result.SetStatus(eReturnStatusFailed);
+ if (matching_modules.GetSize() == 1) {
+ ModuleSP module_sp(matching_modules.GetModuleAtIndex(0));
+
+ // The module has not yet created its symbol vendor, we can just give
+ // the existing target module the symfile path to use for when it
+ // decides to create it!
+ module_sp->SetSymbolFileFileSpec(symbol_fspec);
+
+ SymbolFile *symbol_file =
+ module_sp->GetSymbolFile(true, &result.GetErrorStream());
+ if (symbol_file) {
+ ObjectFile *object_file = symbol_file->GetObjectFile();
+ if (object_file && object_file->GetFileSpec() == symbol_fspec) {
+ // Provide feedback that the symfile has been successfully added.
+ const FileSpec &module_fs = module_sp->GetFileSpec();
+ result.AppendMessageWithFormat(
+ "symbol file '%s' has been added to '%s'\n", symfile_path,
+ module_fs.GetPath().c_str());
+
+ // Let clients know something changed in the module if it is
+ // currently loaded
+ ModuleList module_list;
+ module_list.Append(module_sp);
+ target->SymbolsDidLoad(module_list);
+
+ // Make sure we load any scripting resources that may be embedded
+ // in the debug info files in case the platform supports that.
+ Status error;
+ StreamString feedback_stream;
+ module_sp->LoadScriptingResourceInTarget(target, error,
+ &feedback_stream);
+ if (error.Fail() && error.AsCString())
+ result.AppendWarningWithFormat(
+ "unable to load scripting data for module %s - error "
+ "reported was %s",
+ module_sp->GetFileSpec()
+ .GetFileNameStrippingExtension()
+ .GetCString(),
+ error.AsCString());
+ else if (feedback_stream.GetSize())
+ result.AppendWarning(feedback_stream.GetData());
+
+ flush = true;
+ result.SetStatus(eReturnStatusSuccessFinishResult);
+ return true;
+ }
+ }
+ // Clear the symbol file spec if anything went wrong
module_sp->SetSymbolFileFileSpec(FileSpec());
- return false;
}
-
- // Provide feedback that the symfile has been successfully added.
- const FileSpec &module_fs = module_sp->GetFileSpec();
- result.AppendMessageWithFormat(
- "symbol file '%s' has been added to '%s'\n", symfile_path,
- module_fs.GetPath().c_str());
-
- // Let clients know something changed in the module if it is
- // currently loaded
- ModuleList module_list;
- module_list.Append(module_sp);
- target->SymbolsDidLoad(module_list);
- // Make sure we load any scripting resources that may be embedded
- // in the debug info files in case the platform supports that.
- Status error;
- StreamString feedback_stream;
- module_sp->LoadScriptingResourceInTarget(target, error,
- &feedback_stream);
- if (error.Fail() && error.AsCString())
- result.AppendWarningWithFormat(
- "unable to load scripting data for module %s - error "
- "reported was %s",
- module_sp->GetFileSpec()
- .GetFileNameStrippingExtension()
- .GetCString(),
- error.AsCString());
- else if (feedback_stream.GetSize())
- result.AppendWarning(feedback_stream.GetData());
-
- flush = true;
- result.SetStatus(eReturnStatusSuccessFinishResult);
- return true;
+ StreamString ss_symfile_uuid;
+ if (module_spec.GetUUID().IsValid()) {
+ ss_symfile_uuid << " (";
+ module_spec.GetUUID().Dump(&ss_symfile_uuid);
+ ss_symfile_uuid << ')';
+ }
+ result.AppendErrorWithFormat(
+ "symbol file '%s'%s does not match any existing module%s\n",
+ symfile_path, ss_symfile_uuid.GetData(),
+ !llvm::sys::fs::is_regular_file(symbol_fspec.GetPath())
+ ? "\n please specify the full path to the symbol file"
+ : "");
+ result.SetStatus(eReturnStatusFailed);
+ return false;
}
bool DoExecute(Args &args, CommandReturnObject &result) override {