summaryrefslogtreecommitdiffstats
path: root/lldb/source/Commands/CommandObjectCall.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2010-12-14 23:13:51 +0000
committerGreg Clayton <gclayton@apple.com>2010-12-14 23:13:51 +0000
commit30ddd1d012465952ba60193db110b95ab34bc76f (patch)
tree70a69264c21562f863e6ebd81969f73082abc284 /lldb/source/Commands/CommandObjectCall.cpp
parentc12a1893d265ba3b4df9c248a2c241d8647df38b (diff)
downloadbcm5719-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.cpp341
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 }
-};
-
OpenPOWER on IntegriCloud