aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Commands/CommandObjectSettings.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2013-01-09 19:44:40 +0000
committerGreg Clayton <gclayton@apple.com>2013-01-09 19:44:40 +0000
commitf9fc609fe7e246f98ba72818af1827a269cf71ee (patch)
tree676a461898bf2f4feef048d3254f326973b68064 /lldb/source/Commands/CommandObjectSettings.cpp
parenteb9ae768647ee4280e4f25d58180067e1ed3c5ab (diff)
downloadllvm-f9fc609fe7e246f98ba72818af1827a269cf71ee.zip
llvm-f9fc609fe7e246f98ba72818af1827a269cf71ee.tar.gz
llvm-f9fc609fe7e246f98ba72818af1827a269cf71ee.tar.bz2
Expanded the flags that can be set for a command object in lldb_private::CommandObject. This list of available flags are:
enum { //---------------------------------------------------------------------- // eFlagRequiresTarget // // Ensures a valid target is contained in m_exe_ctx prior to executing // the command. If a target doesn't exist or is invalid, the command // will fail and CommandObject::GetInvalidTargetDescription() will be // returned as the error. CommandObject subclasses can override the // virtual function for GetInvalidTargetDescription() to provide custom // strings when needed. //---------------------------------------------------------------------- eFlagRequiresTarget = (1u << 0), //---------------------------------------------------------------------- // eFlagRequiresProcess // // Ensures a valid process is contained in m_exe_ctx prior to executing // the command. If a process doesn't exist or is invalid, the command // will fail and CommandObject::GetInvalidProcessDescription() will be // returned as the error. CommandObject subclasses can override the // virtual function for GetInvalidProcessDescription() to provide custom // strings when needed. //---------------------------------------------------------------------- eFlagRequiresProcess = (1u << 1), //---------------------------------------------------------------------- // eFlagRequiresThread // // Ensures a valid thread is contained in m_exe_ctx prior to executing // the command. If a thread doesn't exist or is invalid, the command // will fail and CommandObject::GetInvalidThreadDescription() will be // returned as the error. CommandObject subclasses can override the // virtual function for GetInvalidThreadDescription() to provide custom // strings when needed. //---------------------------------------------------------------------- eFlagRequiresThread = (1u << 2), //---------------------------------------------------------------------- // eFlagRequiresFrame // // Ensures a valid frame is contained in m_exe_ctx prior to executing // the command. If a frame doesn't exist or is invalid, the command // will fail and CommandObject::GetInvalidFrameDescription() will be // returned as the error. CommandObject subclasses can override the // virtual function for GetInvalidFrameDescription() to provide custom // strings when needed. //---------------------------------------------------------------------- eFlagRequiresFrame = (1u << 3), //---------------------------------------------------------------------- // eFlagRequiresRegContext // // Ensures a valid register context (from the selected frame if there // is a frame in m_exe_ctx, or from the selected thread from m_exe_ctx) // is availble from m_exe_ctx prior to executing the command. If a // target doesn't exist or is invalid, the command will fail and // CommandObject::GetInvalidRegContextDescription() will be returned as // the error. CommandObject subclasses can override the virtual function // for GetInvalidRegContextDescription() to provide custom strings when // needed. //---------------------------------------------------------------------- eFlagRequiresRegContext = (1u << 4), //---------------------------------------------------------------------- // eFlagTryTargetAPILock // // Attempts to acquire the target lock if a target is selected in the // command interpreter. If the command object fails to acquire the API // lock, the command will fail with an appropriate error message. //---------------------------------------------------------------------- eFlagTryTargetAPILock = (1u << 5), //---------------------------------------------------------------------- // eFlagProcessMustBeLaunched // // Verifies that there is a launched process in m_exe_ctx, if there // isn't, the command will fail with an appropriate error message. //---------------------------------------------------------------------- eFlagProcessMustBeLaunched = (1u << 6), //---------------------------------------------------------------------- // eFlagProcessMustBePaused // // Verifies that there is a paused process in m_exe_ctx, if there // isn't, the command will fail with an appropriate error message. //---------------------------------------------------------------------- eFlagProcessMustBePaused = (1u << 7) }; Now each command object contains a "ExecutionContext m_exe_ctx;" member variable that gets initialized prior to running the command. The validity of the target objects in m_exe_ctx are checked to ensure that any target/process/thread/frame/reg context that are required are valid prior to executing the command. Each command object also contains a Mutex::Locker m_api_locker which gets used if eFlagTryTargetAPILock is set. This centralizes a lot of checking code that was previously and inconsistently implemented across many commands. llvm-svn: 171990
Diffstat (limited to 'lldb/source/Commands/CommandObjectSettings.cpp')
-rw-r--r--lldb/source/Commands/CommandObjectSettings.cpp33
1 files changed, 11 insertions, 22 deletions
diff --git a/lldb/source/Commands/CommandObjectSettings.cpp b/lldb/source/Commands/CommandObjectSettings.cpp
index 6a6e8a6..c7502d1 100644
--- a/lldb/source/Commands/CommandObjectSettings.cpp
+++ b/lldb/source/Commands/CommandObjectSettings.cpp
@@ -202,12 +202,10 @@ insert-before or insert-after.\n");
}
else
{
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
-
// Complete setting value
const char *setting_var_name = input.GetArgumentAtIndex(setting_var_idx);
Error error;
- lldb::OptionValueSP value_sp (m_interpreter.GetDebugger().GetPropertyValue(&exe_ctx, setting_var_name, false, error));
+ lldb::OptionValueSP value_sp (m_interpreter.GetDebugger().GetPropertyValue(&m_exe_ctx, setting_var_name, false, error));
if (value_sp)
{
value_sp->AutoComplete (m_interpreter,
@@ -256,7 +254,6 @@ protected:
StripLeadingSpaces(var_value_str);
std::string var_value_string = var_value_str.str();
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
Error error;
if (m_options.m_global)
{
@@ -268,7 +265,7 @@ protected:
if (error.Success())
{
- error = m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx,
+ error = m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx,
eVarSetOperationAssign,
var_name,
var_value_string.c_str());
@@ -357,7 +354,6 @@ protected:
virtual bool
DoExecute (Args& args, CommandReturnObject &result)
{
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
result.SetStatus (eReturnStatusSuccessFinishResult);
const size_t argc = args.GetArgumentCount ();
@@ -367,7 +363,7 @@ protected:
{
const char *property_path = args.GetArgumentAtIndex (i);
- Error error(m_interpreter.GetDebugger().DumpPropertyValue (&exe_ctx, result.GetOutputStream(), property_path, OptionValue::eDumpGroupValue));
+ Error error(m_interpreter.GetDebugger().DumpPropertyValue (&m_exe_ctx, result.GetOutputStream(), property_path, OptionValue::eDumpGroupValue));
if (error.Success())
{
result.GetOutputStream().EOL();
@@ -381,7 +377,7 @@ protected:
}
else
{
- m_interpreter.GetDebugger().DumpAllPropertyValues (& exe_ctx, result.GetOutputStream(), OptionValue::eDumpGroupValue);
+ m_interpreter.GetDebugger().DumpAllPropertyValues (&m_exe_ctx, result.GetOutputStream(), OptionValue::eDumpGroupValue);
}
return result.Succeeded();
@@ -450,7 +446,6 @@ protected:
virtual bool
DoExecute (Args& args, CommandReturnObject &result)
{
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
result.SetStatus (eReturnStatusSuccessFinishResult);
const bool will_modify = false;
@@ -463,7 +458,7 @@ protected:
{
const char *property_path = args.GetArgumentAtIndex (i);
- const Property *property = m_interpreter.GetDebugger().GetValueProperties()->GetPropertyAtPath (&exe_ctx, will_modify, property_path);
+ const Property *property = m_interpreter.GetDebugger().GetValueProperties()->GetPropertyAtPath (&m_exe_ctx, will_modify, property_path);
if (property)
{
@@ -592,8 +587,7 @@ protected:
StripLeadingSpaces(var_value_str);
std::string var_value_string = var_value_str.str();
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
- Error error (m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx,
+ Error error (m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx,
eVarSetOperationRemove,
var_name,
var_value_string.c_str()));
@@ -719,8 +713,7 @@ protected:
StripLeadingSpaces(var_value_str);
std::string var_value_string = var_value_str.str();
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
- Error error(m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx,
+ Error error(m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx,
eVarSetOperationReplace,
var_name,
var_value_string.c_str()));
@@ -853,8 +846,7 @@ protected:
StripLeadingSpaces(var_value_str);
std::string var_value_string = var_value_str.str();
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
- Error error(m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx,
+ Error error(m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx,
eVarSetOperationInsertBefore,
var_name,
var_value_string.c_str()));
@@ -982,8 +974,7 @@ protected:
StripLeadingSpaces(var_value_str);
std::string var_value_string = var_value_str.str();
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
- Error error(m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx,
+ Error error(m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx,
eVarSetOperationInsertAfter,
var_name,
var_value_string.c_str()));
@@ -1102,8 +1093,7 @@ protected:
StripLeadingSpaces(var_value_str);
std::string var_value_string = var_value_str.str();
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
- Error error(m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx,
+ Error error(m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx,
eVarSetOperationAppend,
var_name,
var_value_string.c_str()));
@@ -1196,8 +1186,7 @@ protected:
return false;
}
- ExecutionContext exe_ctx(m_interpreter.GetExecutionContext());
- Error error (m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx,
+ Error error (m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx,
eVarSetOperationClear,
var_name,
NULL));