summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/ClangExpressionDeclMap.cpp
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2011-11-03 22:48:37 +0000
committerSean Callanan <scallanan@apple.com>2011-11-03 22:48:37 +0000
commit3dea5c7cad6cbadc6edb780d326d4a7835c3ab1c (patch)
tree14b25f8070e9f7e9d6a475a095c3952b6e78ea78 /lldb/source/Expression/ClangExpressionDeclMap.cpp
parentb4ce26a2eaf895268f6f29ca960c43255865881b (diff)
downloadbcm5719-llvm-3dea5c7cad6cbadc6edb780d326d4a7835c3ab1c.tar.gz
bcm5719-llvm-3dea5c7cad6cbadc6edb780d326d4a7835c3ab1c.zip
Fixed a problem where the "this" pointer didn't
have the correct value in the IRInterpreter. llvm-svn: 143663
Diffstat (limited to 'lldb/source/Expression/ClangExpressionDeclMap.cpp')
-rw-r--r--lldb/source/Expression/ClangExpressionDeclMap.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/lldb/source/Expression/ClangExpressionDeclMap.cpp b/lldb/source/Expression/ClangExpressionDeclMap.cpp
index fdbb25d9380..d80941661d4 100644
--- a/lldb/source/Expression/ClangExpressionDeclMap.cpp
+++ b/lldb/source/Expression/ClangExpressionDeclMap.cpp
@@ -1038,6 +1038,23 @@ ClangExpressionDeclMap::GetSpecialValue (const ConstString &name)
std::auto_ptr<Value> value(GetVariableValue(*m_parser_vars->m_exe_ctx, var, NULL));
+ if (value.get() && value->GetValueType() == Value::eValueTypeLoadAddress)
+ {
+ Process *process = m_parser_vars->m_exe_ctx->GetProcessPtr();
+
+ if (!process)
+ return Value();
+
+ lldb::addr_t value_addr = value->GetScalar().ULongLong();
+ Error read_error;
+ addr_t ptr_value = process->ReadPointerFromMemory (value_addr, read_error);
+
+ if (!read_error.Success())
+ return Value();
+
+ value->GetScalar() = (unsigned long long)ptr_value;
+ }
+
if (value.get())
return *value;
else
OpenPOWER on IntegriCloud