diff options
author | Ilia K <ki.stfu@gmail.com> | 2015-04-17 14:49:54 +0000 |
---|---|---|
committer | Ilia K <ki.stfu@gmail.com> | 2015-04-17 14:49:54 +0000 |
commit | d854180afb5534537d854504498d96803dd914fe (patch) | |
tree | 458cd288379db401b0ea88ab65145c4d9d410973 /lldb/tools/lldb-mi/MICmdCmdVar.cpp | |
parent | a4035e628409ac46a9dff60ae6b916c747253afe (diff) | |
download | bcm5719-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.cpp | 22 |
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()); |