summaryrefslogtreecommitdiffstats
path: root/lldb/tools/lldb-mi/MICmdCmdVar.cpp
diff options
context:
space:
mode:
authorIlia K <ki.stfu@gmail.com>2015-04-17 14:49:54 +0000
committerIlia K <ki.stfu@gmail.com>2015-04-17 14:49:54 +0000
commitd854180afb5534537d854504498d96803dd914fe (patch)
tree458cd288379db401b0ea88ab65145c4d9d410973 /lldb/tools/lldb-mi/MICmdCmdVar.cpp
parenta4035e628409ac46a9dff60ae6b916c747253afe (diff)
downloadbcm5719-llvm-d854180afb5534537d854504498d96803dd914fe.tar.gz
bcm5719-llvm-d854180afb5534537d854504498d96803dd914fe.zip
MI support for '-var-create $regname' command.
Summary: This command is currently processed using expression evaluation, meaning the variable binds to the result of the expression not the register. Therefore any subsequent calls to '-var-assign' will not update the register. Fixed by detecting '$' prefix for registers according to specification. Thanks, Ewan Patch from ewan@codeplay.com Reviewers: EwanCrawford Subscribers: lldb-commits, deepak2427 Differential Revision: http://reviews.llvm.org/D8965 llvm-svn: 235195
Diffstat (limited to 'lldb/tools/lldb-mi/MICmdCmdVar.cpp')
-rw-r--r--lldb/tools/lldb-mi/MICmdCmdVar.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/lldb/tools/lldb-mi/MICmdCmdVar.cpp b/lldb/tools/lldb-mi/MICmdCmdVar.cpp
index 5ec2a69571a..dd3f196c363 100644
--- a/lldb/tools/lldb-mi/MICmdCmdVar.cpp
+++ b/lldb/tools/lldb-mi/MICmdCmdVar.cpp
@@ -177,13 +177,23 @@ CMICmdCmdVarCreate::Execute(void)
lldb::SBThread thread = (nThreadId != UINT64_MAX) ? sbProcess.GetThreadByIndexID(nThreadId) : sbProcess.GetSelectedThread();
m_nThreadId = thread.GetIndexID();
lldb::SBFrame frame = bCurrentFrame ? thread.GetSelectedFrame() : thread.GetFrameAtIndex(nFrame);
+ lldb::SBValue value;
+
+ if (rStrExpression[0] == '$')
+ {
+ const CMIUtilString rStrRegister(rStrExpression.substr(1).c_str());
+ value = frame.FindRegister(rStrRegister.c_str());
+ }
+ else
+ {
+ const bool bArgs = true;
+ const bool bLocals = true;
+ const bool bStatics = true;
+ const bool bInScopeOnly = false;
+ const lldb::SBValueList valueList = frame.GetVariables(bArgs, bLocals, bStatics, bInScopeOnly);
+ value = valueList.GetFirstValueByName(rStrExpression.c_str());
+ }
- const bool bArgs = true;
- const bool bLocals = true;
- const bool bStatics = true;
- const bool bInScopeOnly = false;
- const lldb::SBValueList valueList = frame.GetVariables(bArgs, bLocals, bStatics, bInScopeOnly);
- lldb::SBValue value = valueList.GetFirstValueByName(rStrExpression.c_str());
if (!value.IsValid())
value = frame.EvaluateExpression(rStrExpression.c_str());
OpenPOWER on IntegriCloud