From e743c78299bb8034c7148e45d69a978af1e30656 Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Wed, 24 Apr 2013 21:29:08 +0000 Subject: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit “plugin load” tries to be more helpful when it fails to load a plugin llvm-svn: 180218 --- lldb/source/Core/Debugger.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'lldb/source/Core/Debugger.cpp') diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp index f442aa6073d..42a1540986e 100644 --- a/lldb/source/Core/Debugger.cpp +++ b/lldb/source/Core/Debugger.cpp @@ -344,20 +344,32 @@ Debugger::SettingsTerminate () } bool -Debugger::LoadPlugin (const FileSpec& spec) +Debugger::LoadPlugin (const FileSpec& spec, Error& error) { lldb::DynamicLibrarySP dynlib_sp(new lldb_private::DynamicLibrary(spec)); + if (!dynlib_sp || dynlib_sp->IsValid() == false) + { + if (spec.Exists()) + error.SetErrorString("this file does not represent a loadable dylib"); + else + error.SetErrorString("no such file"); + return false; + } lldb::DebuggerSP debugger_sp(shared_from_this()); lldb::SBDebugger debugger_sb(debugger_sp); // TODO: mangle this differently for your system - on OSX, the first underscore needs to be removed and the second one stays LLDBCommandPluginInit init_func = dynlib_sp->GetSymbol("_ZN4lldb16PluginInitializeENS_10SBDebuggerE"); if (!init_func) + { + error.SetErrorString("cannot find the initialization function lldb::PluginInitialize(lldb::SBDebugger)"); return false; + } if (init_func(debugger_sb)) { m_loaded_plugins.push_back(dynlib_sp); return true; } + error.SetErrorString("dylib refused to be loaded"); return false; } @@ -392,7 +404,8 @@ LoadPluginCallback if (plugin_file_spec.GetFileNameExtension() != g_dylibext) return FileSpec::eEnumerateDirectoryResultNext; - debugger->LoadPlugin (plugin_file_spec); + Error plugin_load_error; + debugger->LoadPlugin (plugin_file_spec, plugin_load_error); return FileSpec::eEnumerateDirectoryResultNext; } -- cgit v1.2.3