diff options
author | Greg Clayton <gclayton@apple.com> | 2010-12-14 23:13:51 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2010-12-14 23:13:51 +0000 |
commit | 30ddd1d012465952ba60193db110b95ab34bc76f (patch) | |
tree | 70a69264c21562f863e6ebd81969f73082abc284 /lldb/source/Commands/CommandObjectCall.cpp | |
parent | c12a1893d265ba3b4df9c248a2c241d8647df38b (diff) | |
download | bcm5719-llvm-30ddd1d012465952ba60193db110b95ab34bc76f.tar.gz bcm5719-llvm-30ddd1d012465952ba60193db110b95ab34bc76f.zip |
Removed unused files that were out of date and causing issues with the
linux build.
llvm-svn: 121803
Diffstat (limited to 'lldb/source/Commands/CommandObjectCall.cpp')
-rw-r--r-- | lldb/source/Commands/CommandObjectCall.cpp | 341 |
1 files changed, 0 insertions, 341 deletions
diff --git a/lldb/source/Commands/CommandObjectCall.cpp b/lldb/source/Commands/CommandObjectCall.cpp deleted file mode 100644 index 11dab9b710f..00000000000 --- a/lldb/source/Commands/CommandObjectCall.cpp +++ /dev/null @@ -1,341 +0,0 @@ -//===-- CommandObjectCall.cpp -----------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "CommandObjectCall.h" - -// C Includes -// C++ Includes -// Other libraries and framework includes -// Project includes -#include "lldb/Interpreter/Args.h" -#include "lldb/Core/Value.h" -#include "lldb/Expression/ClangExpression.h" -#include "lldb/Expression/ClangExpressionVariable.h" -#include "lldb/Expression/ClangFunction.h" -#include "lldb/Host/Host.h" -#include "lldb/Interpreter/CommandInterpreter.h" -#include "lldb/Core/Debugger.h" -#include "lldb/Interpreter/CommandReturnObject.h" -#include "lldb/Symbol/ObjectFile.h" -#include "lldb/Symbol/Variable.h" -#include "lldb/Target/Process.h" -#include "lldb/Target/Target.h" -#include "lldb/Target/StackFrame.h" - -using namespace lldb; -using namespace lldb_private; - -// This command is a toy. I'm just using it to have a way to construct the arguments to -// calling functions. -// - -CommandObjectCall::CommandOptions::CommandOptions () : - Options() -{ - // Keep only one place to reset the values to their defaults - ResetOptionValues(); -} - - -CommandObjectCall::CommandOptions::~CommandOptions () -{ -} - -Error -CommandObjectCall::CommandOptions::SetOptionValue (int option_idx, const char *option_arg) -{ - Error error; - - char short_option = (char) m_getopt_table[option_idx].val; - - switch (short_option) - { - case 'l': - if (language.SetLanguageFromCString (option_arg) == false) - { - error.SetErrorStringWithFormat("Invalid language option argument '%s'.\n", option_arg); - } - break; - - case 'g': - debug = true; - break; - - case 'f': - error = Args::StringToFormat(option_arg,format); - break; - - case 'n': - noexecute = true; - break; - - case 'a': - use_abi = true; - break; - - default: - error.SetErrorStringWithFormat("Invalid short option character '%c'.\n", short_option); - break; - } - - return error; -} - -void -CommandObjectCall::CommandOptions::ResetOptionValues () -{ - Options::ResetOptionValues(); - language.Clear(); - debug = false; - format = eFormatDefault; - show_types = true; - show_summary = true; - noexecute = false; - use_abi = false; -} - -const lldb::OptionDefinition* -CommandObjectCall::CommandOptions::GetDefinitions () -{ - return g_option_table; -} - -CommandObjectCall::CommandObjectCall () : - CommandObject ( - "call", - "Call a function.", - //"call <return_type> <function-name> [[<arg1-type> <arg1-value>] ... <argn-type> <argn-value>] [<cmd-options>]", - NULL, - eFlagProcessMustBeLaunched | eFlagProcessMustBePaused) -{ - CommandArgumentEntry arg1; - CommandArgumentEntry arg2; - CommandArgumentEntry arg3; - CommandArgumentData return_type_arg; - CommandArgumentData function_name_arg; - CommandArgumentData arg_type_arg; - CommandArgumentData arg_value_arg; - - // Define the first (and only) variant of this arg. - return_type_arg.arg_type = eArgTypeType; - return_type_arg.arg_repetition = eArgRepeatPlain; - - arg1.push_back (return_type_arg); - - function_name_arg.arg_type = eArgTypeFunctionName; - function_name_arg.arg_repetition = eArgTypePlain; - - arg2.push_back (function_name_arg); - - arg_type_arg.arg_type = eArgTypeArgType; - arg_type_arg.arg_repetition = eArgRepeatPairRangeOptional; - - arg_value_arg.arg_type = eArgTypeValue; - arg_value_arg.arg_repetition = eArgRepeatPairRangeOptional; - - arg3.push_back (arg_type_arg); - arg3.push_back (arg_value_arg); - - // Push the data for the first argument into the m_arguments vector. - m_arguments.push_back (arg1); - m_arguments.push_back (arg2); - m_arguments.push_back (arg3); -} - -CommandObjectCall::~CommandObjectCall () -{ -} - -Options * -CommandObjectCall::GetOptions () -{ - return &m_options; -} - -bool -CommandObjectCall::Execute -( - Args &command, - CommandReturnObject &result -) -{ - ConstString target_triple; - int num_args = command.GetArgumentCount(); - - ExecutionContext exe_ctx(interpreter.GetDebugger().GetExecutionContext()); - if (exe_ctx.target) - exe_ctx.target->GetTargetTriple(target_triple); - - if (!target_triple) - target_triple = Host::GetTargetTriple (); - - if (exe_ctx.thread == NULL || exe_ctx.frame == NULL) - { - result.AppendError ("No currently selected thread and frame."); - result.SetStatus (eReturnStatusFailed); - return false; - } - - if (num_args < 2) - { - result.AppendErrorWithFormat ("Invalid usage, should be: %s.\n", GetSyntax()); - result.SetStatus (eReturnStatusFailed); - return false; - } - - if ((num_args - 2) %2 != 0) - { - result.AppendErrorWithFormat ("Invalid usage - unmatched args & types, should be: %s.\n", GetSyntax()); - result.SetStatus (eReturnStatusFailed); - return false; - } - - if (target_triple) - { - //const char *return_type = command.GetArgumentAtIndex(0); - const char *function_name = command.GetArgumentAtIndex(1); - // Look up the called function: - - Function *target_fn = NULL; - - SymbolContextList sc_list; - - exe_ctx.frame->GetSymbolContext(eSymbolContextEverything).FindFunctionsByName(ConstString(function_name), false, sc_list); - - if (sc_list.GetSize() > 0) - { - SymbolContext sc; - sc_list.GetContextAtIndex(0, sc); - target_fn = sc.function; - } - - // FIXME: If target_fn is NULL, we should look up the name as a symbol and use it and the provided - // return type. - - if (target_fn == NULL) - { - result.AppendErrorWithFormat ("Could not find function '%s'.\n", function_name); - result.SetStatus (eReturnStatusFailed); - return false; - } - - ValueList value_list; - // Okay, now parse arguments. For now we only accept basic types. - for (int i = 2; i < num_args; i+= 2) - { - const char *type_str = command.GetArgumentAtIndex(i); - const char *value_str = command.GetArgumentAtIndex(i + 1); - bool success; - if (strcmp(type_str, "int") == 0 - || strcmp(type_str, "int32_t") == 0) - { - value_list.PushValue(Value(Args::StringToSInt32(value_str, 0, 0, &success))); - } - else if (strcmp (type_str, "int64_t") == 0) - { - value_list.PushValue(Value(Args::StringToSInt64(value_str, 0, 0, &success))); - } - else if (strcmp(type_str, "uint") == 0 - || strcmp(type_str, "uint32_t") == 0) - { - value_list.PushValue(Value(Args::StringToUInt32(value_str, 0, 0, &success))); - } - else if (strcmp (type_str, "uint64_t") == 0) - { - value_list.PushValue(Value(Args::StringToUInt64(value_str, 0, 0, &success))); - } - else if (strcmp (type_str, "cstr") == 0) - { - Value val ((intptr_t)value_str); - val.SetValueType (Value::eValueTypeHostAddress); - - - void *cstr_type = exe_ctx.target->GetScratchClangASTContext()->GetCStringType(true); - val.SetContext (Value::eContextTypeClangType, cstr_type); - value_list.PushValue(val); - - success = true; - } - - if (!success) - { - result.AppendErrorWithFormat ("Could not convert value: '%s' to type '%s'.\n", value_str, type_str); - result.SetStatus (eReturnStatusFailed); - return false; - } - } - // Okay, we have the function and the argument list and the return type. Now make a ClangFunction object and - // run it: - - StreamString errors; - ClangFunction clang_fun (target_triple.GetCString(), *target_fn, exe_ctx.target->GetScratchClangASTContext(), value_list); - if (m_options.noexecute) - { - // Now write down the argument values for this call. - lldb::addr_t args_addr = LLDB_INVALID_ADDRESS; - if (!clang_fun.InsertFunction (exe_ctx, args_addr, errors)) - { - result.AppendErrorWithFormat("Error inserting function: '%s'.\n", errors.GetData()); - result.SetStatus (eReturnStatusFailed); - return false; - } - else - { - result.Succeeded(); - return true; - } - } - - Process::ExecutionResults return_status; - Value return_value; - - bool stop_others = true; - return_status = clang_fun.ExecuteFunction(exe_ctx, errors, stop_others, NULL, return_value); - - // Now figure out what to do with the return value. - if (return_status == Process::eExecutionSetupError) - { - result.AppendErrorWithFormat("Error setting up function execution: '%s'.\n", errors.GetData()); - result.SetStatus (eReturnStatusFailed); - return false; - } - else if (return_status != Process::eExecutionCompleted) - { - result.AppendWarningWithFormat("Interrupted while calling function: '%s'.\n", errors.GetData()); - result.SetStatus(eReturnStatusSuccessFinishNoResult); - return true; - } - else - { - // Now print out the result. - result.GetOutputStream().Printf("Return value: "); - return_value.Dump(&(result.GetOutputStream())); - result.Succeeded(); - } - - } - else - { - result.AppendError ("invalid target triple"); - result.SetStatus (eReturnStatusFailed); - } - return result.Succeeded(); -} - -lldb::OptionDefinition -CommandObjectCall::CommandOptions::g_option_table[] = -{ -{ LLDB_OPT_SET_1, false, "language", 'l', required_argument, NULL, 0, "[c|c++|objc|objc++]", "Sets the language to use when parsing the expression."}, -{ LLDB_OPT_SET_1, false, "format", 'f', required_argument, NULL, 0, "[ [bool|b] | [bin] | [char|c] | [oct|o] | [dec|i|d|u] | [hex|x] | [float|f] | [cstr|s] ]", "Specify the format that the expression output should use."}, -{ LLDB_OPT_SET_1, false, "debug", 'g', no_argument, NULL, 0, NULL, "Enable verbose debug logging of the expression parsing and evaluation."}, -{ LLDB_OPT_SET_1, false, "noexecute", 'n', no_argument, NULL, 0, "no execute", "Only JIT and copy the wrapper & arguments, but don't execute."}, -{ LLDB_OPT_SET_1, false, "use-abi", 'a', no_argument, NULL, 0, NULL, "Use the ABI instead of the JIT to marshall arguments."}, -{ 0, false, NULL, 0, 0, NULL, NULL, NULL, NULL } -}; - |