diff options
Diffstat (limited to 'lldb/source/Expression/ClangExpressionDeclMap.cpp')
-rw-r--r-- | lldb/source/Expression/ClangExpressionDeclMap.cpp | 17 |
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 |