summaryrefslogtreecommitdiff
path: root/lldb/source/API/SBValue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/API/SBValue.cpp')
-rw-r--r--lldb/source/API/SBValue.cpp1720
1 files changed, 0 insertions, 1720 deletions
diff --git a/lldb/source/API/SBValue.cpp b/lldb/source/API/SBValue.cpp
deleted file mode 100644
index 6908c8f13d4d..000000000000
--- a/lldb/source/API/SBValue.cpp
+++ /dev/null
@@ -1,1720 +0,0 @@
-//===-- SBValue.cpp ---------------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "lldb/API/SBValue.h"
-
-#include "lldb/API/SBStream.h"
-#include "lldb/API/SBTypeFilter.h"
-#include "lldb/API/SBTypeFormat.h"
-#include "lldb/API/SBTypeSummary.h"
-#include "lldb/API/SBTypeSynthetic.h"
-
-#include "lldb/Breakpoint/Watchpoint.h"
-#include "lldb/Core/DataExtractor.h"
-#include "lldb/Core/DataVisualization.h"
-#include "lldb/Core/Log.h"
-#include "lldb/Core/Module.h"
-#include "lldb/Core/Scalar.h"
-#include "lldb/Core/Stream.h"
-#include "lldb/Core/StreamFile.h"
-#include "lldb/Core/Value.h"
-#include "lldb/Core/ValueObject.h"
-#include "lldb/Core/ValueObjectConstResult.h"
-#include "lldb/Symbol/Block.h"
-#include "lldb/Symbol/ObjectFile.h"
-#include "lldb/Symbol/Type.h"
-#include "lldb/Symbol/Variable.h"
-#include "lldb/Symbol/VariableList.h"
-#include "lldb/Target/ExecutionContext.h"
-#include "lldb/Target/Process.h"
-#include "lldb/Target/StackFrame.h"
-#include "lldb/Target/Target.h"
-#include "lldb/Target/Thread.h"
-
-#include "lldb/API/SBProcess.h"
-#include "lldb/API/SBTarget.h"
-#include "lldb/API/SBThread.h"
-#include "lldb/API/SBFrame.h"
-#include "lldb/API/SBDebugger.h"
-
-using namespace lldb;
-using namespace lldb_private;
-
-SBValue::SBValue () :
- m_opaque_sp ()
-{
-}
-
-SBValue::SBValue (const lldb::ValueObjectSP &value_sp)
-{
- SetSP(value_sp); // whenever setting the SP call SetSP() since it knows how to deal with synthetic values properly
-}
-
-SBValue::SBValue(const SBValue &rhs)
-{
- SetSP(rhs.m_opaque_sp); // whenever setting the SP call SetSP() since it knows how to deal with synthetic values properly
-}
-
-SBValue &
-SBValue::operator = (const SBValue &rhs)
-{
- if (this != &rhs)
- {
- SetSP(rhs.m_opaque_sp); // whenever setting the SP call SetSP() since it knows how to deal with synthetic values properly
- }
- return *this;
-}
-
-SBValue::~SBValue()
-{
-}
-
-bool
-SBValue::IsValid ()
-{
- // If this function ever changes to anything that does more than just
- // check if the opaque shared pointer is non NULL, then we need to update
- // all "if (m_opaque_sp)" code in this file.
- return m_opaque_sp.get() != NULL;
-}
-
-void
-SBValue::Clear()
-{
- m_opaque_sp.reset();
-}
-
-SBError
-SBValue::GetError()
-{
- SBError sb_error;
-
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- sb_error.SetError(value_sp->GetError());
- else
- sb_error.SetErrorString("error: invalid value");
-
- return sb_error;
-}
-
-user_id_t
-SBValue::GetID()
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- return value_sp->GetID();
- return LLDB_INVALID_UID;
-}
-
-const char *
-SBValue::GetName()
-{
-
- const char *name = NULL;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- name = value_sp->GetName().GetCString();
-
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (name)
- log->Printf ("SBValue(%p)::GetName () => \"%s\"", value_sp.get(), name);
- else
- log->Printf ("SBValue(%p)::GetName () => NULL", value_sp.get());
- }
-
- return name;
-}
-
-const char *
-SBValue::GetTypeName ()
-{
- const char *name = NULL;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- name = value_sp->GetQualifiedTypeName().GetCString();
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (name)
- log->Printf ("SBValue(%p)::GetTypeName () => \"%s\"", value_sp.get(), name);
- else
- log->Printf ("SBValue(%p)::GetTypeName () => NULL", value_sp.get());
- }
-
- return name;
-}
-
-size_t
-SBValue::GetByteSize ()
-{
- size_t result = 0;
-
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- result = value_sp->GetByteSize();
-
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetByteSize () => %zu", value_sp.get(), result);
-
- return result;
-}
-
-bool
-SBValue::IsInScope ()
-{
- bool result = false;
-
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- result = value_sp->IsInScope ();
- }
- }
-
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::IsInScope () => %i", value_sp.get(), result);
-
- return result;
-}
-
-const char *
-SBValue::GetValue ()
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- const char *cstr = NULL;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetValue() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- cstr = value_sp->GetValueAsCString ();
- }
- }
- }
- if (log)
- {
- if (cstr)
- log->Printf ("SBValue(%p)::GetValue() => \"%s\"", value_sp.get(), cstr);
- else
- log->Printf ("SBValue(%p)::GetValue() => NULL", value_sp.get());
- }
-
- return cstr;
-}
-
-ValueType
-SBValue::GetValueType ()
-{
- ValueType result = eValueTypeInvalid;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- result = value_sp->GetValueType();
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- switch (result)
- {
- case eValueTypeInvalid: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeInvalid", value_sp.get()); break;
- case eValueTypeVariableGlobal: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableGlobal", value_sp.get()); break;
- case eValueTypeVariableStatic: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableStatic", value_sp.get()); break;
- case eValueTypeVariableArgument:log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableArgument", value_sp.get()); break;
- case eValueTypeVariableLocal: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableLocal", value_sp.get()); break;
- case eValueTypeRegister: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeRegister", value_sp.get()); break;
- case eValueTypeRegisterSet: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeRegisterSet", value_sp.get()); break;
- case eValueTypeConstResult: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeConstResult", value_sp.get()); break;
- default: log->Printf ("SBValue(%p)::GetValueType () => %i ???", value_sp.get(), result); break;
- }
- }
- return result;
-}
-
-const char *
-SBValue::GetObjectDescription ()
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- const char *cstr = NULL;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetObjectDescription() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- cstr = value_sp->GetObjectDescription ();
- }
- }
- }
- if (log)
- {
- if (cstr)
- log->Printf ("SBValue(%p)::GetObjectDescription() => \"%s\"", value_sp.get(), cstr);
- else
- log->Printf ("SBValue(%p)::GetObjectDescription() => NULL", value_sp.get());
- }
- return cstr;
-}
-
-SBType
-SBValue::GetType()
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- SBType sb_type;
- lldb::ValueObjectSP value_sp(GetSP());
- TypeImplSP type_sp;
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetValueDidChange() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- type_sp.reset (new TypeImpl(ClangASTType (value_sp->GetClangAST(), value_sp->GetClangType())));
- sb_type.SetSP(type_sp);
- }
- }
- }
- if (log)
- {
- if (type_sp)
- log->Printf ("SBValue(%p)::GetType => SBType(%p)", value_sp.get(), type_sp.get());
- else
- log->Printf ("SBValue(%p)::GetType => NULL", value_sp.get());
- }
- return sb_type;
-}
-
-bool
-SBValue::GetValueDidChange ()
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- bool result = false;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetValueDidChange() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- result = value_sp->GetValueDidChange ();
- }
- }
- }
- if (log)
- log->Printf ("SBValue(%p)::GetValueDidChange() => %i", value_sp.get(), result);
-
- return result;
-}
-
-#ifndef LLDB_DISABLE_PYTHON
-const char *
-SBValue::GetSummary ()
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- const char *cstr = NULL;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetSummary() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- cstr = value_sp->GetSummaryAsCString();
- }
- }
- }
- if (log)
- {
- if (cstr)
- log->Printf ("SBValue(%p)::GetSummary() => \"%s\"", value_sp.get(), cstr);
- else
- log->Printf ("SBValue(%p)::GetSummary() => NULL", value_sp.get());
- }
- return cstr;
-}
-#endif // LLDB_DISABLE_PYTHON
-
-const char *
-SBValue::GetLocation ()
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- const char *cstr = NULL;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetLocation() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- cstr = value_sp->GetLocationAsCString();
- }
- }
- }
- if (log)
- {
- if (cstr)
- log->Printf ("SBValue(%p)::GetLocation() => \"%s\"", value_sp.get(), cstr);
- else
- log->Printf ("SBValue(%p)::GetLocation() => NULL", value_sp.get());
- }
- return cstr;
-}
-
-bool
-SBValue::SetValueFromCString (const char *value_str)
-{
- bool success = false;
- lldb::ValueObjectSP value_sp(GetSP());
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::SetValueFromCString() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- success = value_sp->SetValueFromCString (value_str);
- }
- }
- }
- if (log)
- log->Printf ("SBValue(%p)::SetValueFromCString(\"%s\") => %i", value_sp.get(), value_str, success);
-
- return success;
-}
-
-lldb::SBTypeFormat
-SBValue::GetTypeFormat ()
-{
- lldb::SBTypeFormat format;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetTypeSummary() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- if (value_sp->UpdateValueIfNeeded(true))
- {
- lldb::TypeFormatImplSP format_sp = value_sp->GetValueFormat();
- if (format_sp)
- format.SetSP(format_sp);
- }
- }
- }
- }
- return format;
-}
-
-#ifndef LLDB_DISABLE_PYTHON
-lldb::SBTypeSummary
-SBValue::GetTypeSummary ()
-{
- lldb::SBTypeSummary summary;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetTypeSummary() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- if (value_sp->UpdateValueIfNeeded(true))
- {
- lldb::TypeSummaryImplSP summary_sp = value_sp->GetSummaryFormat();
- if (summary_sp)
- summary.SetSP(summary_sp);
- }
- }
- }
- }
- return summary;
-}
-#endif // LLDB_DISABLE_PYTHON
-
-lldb::SBTypeFilter
-SBValue::GetTypeFilter ()
-{
- lldb::SBTypeFilter filter;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetTypeFilter() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- if (value_sp->UpdateValueIfNeeded(true))
- {
- lldb::SyntheticChildrenSP synthetic_sp = value_sp->GetSyntheticChildren();
-
- if (synthetic_sp && !synthetic_sp->IsScripted())
- {
- TypeFilterImplSP filter_sp = STD_STATIC_POINTER_CAST(TypeFilterImpl,synthetic_sp);
- filter.SetSP(filter_sp);
- }
- }
- }
- }
- }
- return filter;
-}
-
-#ifndef LLDB_DISABLE_PYTHON
-lldb::SBTypeSynthetic
-SBValue::GetTypeSynthetic ()
-{
- lldb::SBTypeSynthetic synthetic;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetTypeSynthetic() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- if (value_sp->UpdateValueIfNeeded(true))
- {
- lldb::SyntheticChildrenSP children_sp = value_sp->GetSyntheticChildren();
-
- if (children_sp && children_sp->IsScripted())
- {
- TypeSyntheticImplSP synth_sp = STD_STATIC_POINTER_CAST(TypeSyntheticImpl,children_sp);
- synthetic.SetSP(synth_sp);
- }
- }
- }
- }
- }
- return synthetic;
-}
-#endif
-
-lldb::SBValue
-SBValue::CreateChildAtOffset (const char *name, uint32_t offset, SBType type)
-{
- lldb::SBValue sb_value;
- lldb::ValueObjectSP value_sp(GetSP());
- lldb::ValueObjectSP new_value_sp;
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetTypeSynthetic() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- TypeImplSP type_sp (type.GetSP());
- if (type.IsValid())
- {
- sb_value = SBValue(value_sp->GetSyntheticChildAtOffset(offset, type_sp->GetClangASTType(), true));
- new_value_sp = sb_value.GetSP();
- if (new_value_sp)
- new_value_sp->SetName(ConstString(name));
- }
- }
- }
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (new_value_sp)
- log->Printf ("SBValue(%p)::GetChildAtOffset => \"%s\"", value_sp.get(), new_value_sp->GetName().AsCString());
- else
- log->Printf ("SBValue(%p)::GetChildAtOffset => NULL", value_sp.get());
- }
- return sb_value;
-}
-
-lldb::SBValue
-SBValue::Cast (SBType type)
-{
- lldb::SBValue sb_value;
- lldb::ValueObjectSP value_sp(GetSP());
- TypeImplSP type_sp (type.GetSP());
- if (value_sp && type_sp)
- sb_value.SetSP(value_sp->Cast(type_sp->GetClangASTType()));
- return sb_value;
-}
-
-lldb::SBValue
-SBValue::CreateValueFromExpression (const char *name, const char* expression)
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- lldb::SBValue sb_value;
- lldb::ValueObjectSP value_sp(GetSP());
- lldb::ValueObjectSP new_value_sp;
- if (value_sp)
- {
- ExecutionContext exe_ctx (value_sp->GetExecutionContextRef());
- ProcessSP process_sp(exe_ctx.GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::CreateValueFromExpression() => error: process is running", value_sp.get());
- }
- else
- {
- Target* target = exe_ctx.GetTargetPtr();
- if (target)
- {
- target->EvaluateExpression (expression,
- exe_ctx.GetFramePtr(),
- eExecutionPolicyOnlyWhenNeeded,
- false, // coerce to id
- true, // unwind on error
- true, // keep in memory
- eNoDynamicValues,
- new_value_sp);
- if (new_value_sp)
- {
- new_value_sp->SetName(ConstString(name));
- sb_value.SetSP(new_value_sp);
- }
- }
- }
- }
- if (log)
- {
- if (new_value_sp)
- log->Printf ("SBValue(%p)::GetChildFromExpression(name=\"%s\", expression=\"%s\") => SBValue (%p)",
- value_sp.get(),
- name,
- expression,
- new_value_sp.get());
- else
- log->Printf ("SBValue(%p)::GetChildFromExpression(name=\"%s\", expression=\"%s\") => NULL",
- value_sp.get(),
- name,
- expression);
- }
- return sb_value;
-}
-
-lldb::SBValue
-SBValue::CreateValueFromAddress(const char* name, lldb::addr_t address, SBType sb_type)
-{
- lldb::SBValue sb_value;
- lldb::ValueObjectSP value_sp(GetSP());
- lldb::ValueObjectSP new_value_sp;
- lldb::TypeImplSP type_impl_sp (sb_type.GetSP());
- if (value_sp && type_impl_sp)
- {
- ClangASTType pointee_ast_type(type_impl_sp->GetASTContext(), type_impl_sp->GetClangASTType().GetPointerType ());
- lldb::TypeImplSP pointee_type_impl_sp (new TypeImpl(pointee_ast_type));
- if (pointee_type_impl_sp)
- {
-
- lldb::DataBufferSP buffer(new lldb_private::DataBufferHeap(&address,sizeof(lldb::addr_t)));
-
- ExecutionContext exe_ctx (value_sp->GetExecutionContextRef());
- ValueObjectSP ptr_result_valobj_sp(ValueObjectConstResult::Create (exe_ctx.GetBestExecutionContextScope(),
- pointee_type_impl_sp->GetASTContext(),
- pointee_type_impl_sp->GetOpaqueQualType(),
- ConstString(name),
- buffer,
- lldb::endian::InlHostByteOrder(),
- exe_ctx.GetAddressByteSize()));
-
- if (ptr_result_valobj_sp)
- {
- ptr_result_valobj_sp->GetValue().SetValueType(Value::eValueTypeLoadAddress);
- Error err;
- new_value_sp = ptr_result_valobj_sp->Dereference(err);
- if (new_value_sp)
- new_value_sp->SetName(ConstString(name));
- }
- sb_value.SetSP(new_value_sp);
- }
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (new_value_sp)
- log->Printf ("SBValue(%p)::CreateValueFromAddress => \"%s\"", value_sp.get(), new_value_sp->GetName().AsCString());
- else
- log->Printf ("SBValue(%p)::CreateValueFromAddress => NULL", value_sp.get());
- }
- return sb_value;
-}
-
-lldb::SBValue
-SBValue::CreateValueFromData (const char* name, SBData data, SBType type)
-{
- lldb::SBValue sb_value;
- lldb::ValueObjectSP new_value_sp;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ExecutionContext exe_ctx (value_sp->GetExecutionContextRef());
-
- new_value_sp = ValueObjectConstResult::Create (exe_ctx.GetBestExecutionContextScope(),
- type.m_opaque_sp->GetASTContext() ,
- type.m_opaque_sp->GetOpaqueQualType(),
- ConstString(name),
- *data.m_opaque_sp,
- LLDB_INVALID_ADDRESS);
- new_value_sp->SetAddressTypeOfChildren(eAddressTypeLoad);
- sb_value.SetSP(new_value_sp);
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (new_value_sp)
- log->Printf ("SBValue(%p)::GetChildFromExpression => \"%s\"", value_sp.get(), new_value_sp->GetName().AsCString());
- else
- log->Printf ("SBValue(%p)::GetChildFromExpression => NULL", value_sp.get());
- }
- return sb_value;
-}
-
-SBValue
-SBValue::GetChildAtIndex (uint32_t idx)
-{
- const bool can_create_synthetic = false;
- lldb::DynamicValueType use_dynamic = eNoDynamicValues;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- use_dynamic = target_sp->GetPreferDynamicValue();
- }
- return GetChildAtIndex (idx, use_dynamic, can_create_synthetic);
-}
-
-SBValue
-SBValue::GetChildAtIndex (uint32_t idx, lldb::DynamicValueType use_dynamic, bool can_create_synthetic)
-{
- lldb::ValueObjectSP child_sp;
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetChildAtIndex() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- const bool can_create = true;
- child_sp = value_sp->GetChildAtIndex (idx, can_create);
- if (can_create_synthetic && !child_sp)
- {
- if (value_sp->IsPointerType())
- {
- child_sp = value_sp->GetSyntheticArrayMemberFromPointer(idx, can_create);
- }
- else if (value_sp->IsArrayType())
- {
- child_sp = value_sp->GetSyntheticArrayMemberFromArray(idx, can_create);
- }
- }
-
- if (child_sp)
- {
- if (use_dynamic != lldb::eNoDynamicValues)
- {
- lldb::ValueObjectSP dynamic_sp(child_sp->GetDynamicValue (use_dynamic));
- if (dynamic_sp)
- child_sp = dynamic_sp;
- }
- }
- }
- }
- }
-
- SBValue sb_value (child_sp);
- if (log)
- log->Printf ("SBValue(%p)::GetChildAtIndex (%u) => SBValue(%p)", value_sp.get(), idx, value_sp.get());
-
- return sb_value;
-}
-
-uint32_t
-SBValue::GetIndexOfChildWithName (const char *name)
-{
- uint32_t idx = UINT32_MAX;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
-
- idx = value_sp->GetIndexOfChildWithName (ConstString(name));
- }
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (idx == UINT32_MAX)
- log->Printf ("SBValue(%p)::GetIndexOfChildWithName (name=\"%s\") => NOT FOUND", value_sp.get(), name);
- else
- log->Printf ("SBValue(%p)::GetIndexOfChildWithName (name=\"%s\") => %u", value_sp.get(), name, idx);
- }
- return idx;
-}
-
-SBValue
-SBValue::GetChildMemberWithName (const char *name)
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- lldb::DynamicValueType use_dynamic_value = eNoDynamicValues;
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- use_dynamic_value = target_sp->GetPreferDynamicValue();
- }
- return GetChildMemberWithName (name, use_dynamic_value);
- }
- return SBValue();
-}
-
-SBValue
-SBValue::GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dynamic_value)
-{
- lldb::ValueObjectSP child_sp;
- const ConstString str_name (name);
-
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
-
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetChildMemberWithName() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- child_sp = value_sp->GetChildMemberWithName (str_name, true);
- if (use_dynamic_value != lldb::eNoDynamicValues)
- {
- if (child_sp)
- {
- lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (use_dynamic_value);
- if (dynamic_sp)
- child_sp = dynamic_sp;
- }
- }
- }
- }
- }
-
- SBValue sb_value (child_sp);
-
- if (log)
- log->Printf ("SBValue(%p)::GetChildMemberWithName (name=\"%s\") => SBValue(%p)", value_sp.get(), name, value_sp.get());
-
- return sb_value;
-}
-
-lldb::SBValue
-SBValue::GetDynamicValue (lldb::DynamicValueType use_dynamic)
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetDynamicValue() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- return SBValue (value_sp->GetDynamicValue(use_dynamic));
- }
- }
- }
-
- return SBValue();
-}
-
-lldb::SBValue
-SBValue::GetStaticValue ()
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- return SBValue(value_sp->GetStaticValue());
- }
- }
-
- return SBValue();
-}
-
-lldb::SBValue
-SBValue::GetNonSyntheticValue ()
-{
- SBValue sb_value;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- if (value_sp->IsSynthetic())
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- // deliberately breaking the rules here to optimize the case where we DO NOT want
- // the synthetic value to be returned to the user - if we did not do this, we would have to tell
- // the target to suppress the synthetic value, and then return the flag to its original value
- if (value_sp->GetParent())
- sb_value.m_opaque_sp = value_sp->GetParent()->GetSP();
- }
- }
- }
- return sb_value;
-}
-
-bool
-SBValue::IsDynamic()
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- return value_sp->IsDynamic();
- }
- }
- return false;
-}
-
-lldb::SBValue
-SBValue::GetValueForExpressionPath(const char* expr_path)
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- lldb::ValueObjectSP child_sp;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetValueForExpressionPath() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- // using default values for all the fancy options, just do it if you can
- child_sp = value_sp->GetValueForExpressionPath(expr_path);
- }
- }
- }
-
- SBValue sb_value (child_sp);
-
- if (log)
- log->Printf ("SBValue(%p)::GetValueForExpressionPath (expr_path=\"%s\") => SBValue(%p)", value_sp.get(), expr_path, value_sp.get());
-
- return sb_value;
-}
-
-int64_t
-SBValue::GetValueAsSigned(SBError& error, int64_t fail_value)
-{
- error.Clear();
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetValueAsSigned() => error: process is running", value_sp.get());
- error.SetErrorString("process is running");
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- Scalar scalar;
- if (value_sp->ResolveValue (scalar))
- return scalar.GetRawBits64(fail_value);
- else
- error.SetErrorString("could not get value");
- }
- else
- error.SetErrorString("could not get target");
- }
- }
- error.SetErrorString("invalid SBValue");
- return fail_value;
-}
-
-uint64_t
-SBValue::GetValueAsUnsigned(SBError& error, uint64_t fail_value)
-{
- error.Clear();
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetValueAsUnsigned() => error: process is running", value_sp.get());
- error.SetErrorString("process is running");
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- Scalar scalar;
- if (value_sp->ResolveValue (scalar))
- return scalar.GetRawBits64(fail_value);
- else
- error.SetErrorString("could not get value");
- }
- else
- error.SetErrorString("could not get target");
- }
- }
- error.SetErrorString("invalid SBValue");
- return fail_value;
-}
-
-int64_t
-SBValue::GetValueAsSigned(int64_t fail_value)
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetValueAsSigned() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- Scalar scalar;
- if (value_sp->ResolveValue (scalar))
- return scalar.GetRawBits64(fail_value);
- }
- }
- }
- return fail_value;
-}
-
-uint64_t
-SBValue::GetValueAsUnsigned(uint64_t fail_value)
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetValueAsUnsigned() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- Scalar scalar;
- if (value_sp->ResolveValue (scalar))
- return scalar.GetRawBits64(fail_value);
- }
- }
- }
- return fail_value;
-}
-
-uint32_t
-SBValue::GetNumChildren ()
-{
- uint32_t num_children = 0;
-
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetNumChildren() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
-
- num_children = value_sp->GetNumChildren();
- }
- }
- }
-
- if (log)
- log->Printf ("SBValue(%p)::GetNumChildren () => %u", value_sp.get(), num_children);
-
- return num_children;
-}
-
-
-SBValue
-SBValue::Dereference ()
-{
- SBValue sb_value;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
-
- Error error;
- sb_value = value_sp->Dereference (error);
- }
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::Dereference () => SBValue(%p)", value_sp.get(), value_sp.get());
-
- return sb_value;
-}
-
-bool
-SBValue::TypeIsPointerType ()
-{
- bool is_ptr_type = false;
-
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
-
- is_ptr_type = value_sp->IsPointerType();
- }
- }
-
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::TypeIsPointerType () => %i", value_sp.get(), is_ptr_type);
-
-
- return is_ptr_type;
-}
-
-void *
-SBValue::GetOpaqueType()
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp(value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
-
- return value_sp->GetClangType();
- }
- }
- return NULL;
-}
-
-lldb::SBTarget
-SBValue::GetTarget()
-{
- SBTarget sb_target;
- TargetSP target_sp;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- target_sp = value_sp->GetTargetSP();
- sb_target.SetSP (target_sp);
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (target_sp.get() == NULL)
- log->Printf ("SBValue(%p)::GetTarget () => NULL", value_sp.get());
- else
- log->Printf ("SBValue(%p)::GetTarget () => %p", value_sp.get(), target_sp.get());
- }
- return sb_target;
-}
-
-lldb::SBProcess
-SBValue::GetProcess()
-{
- SBProcess sb_process;
- ProcessSP process_sp;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- process_sp = value_sp->GetProcessSP();
- if (process_sp)
- sb_process.SetSP (process_sp);
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (process_sp.get() == NULL)
- log->Printf ("SBValue(%p)::GetProcess () => NULL", value_sp.get());
- else
- log->Printf ("SBValue(%p)::GetProcess () => %p", value_sp.get(), process_sp.get());
- }
- return sb_process;
-}
-
-lldb::SBThread
-SBValue::GetThread()
-{
- SBThread sb_thread;
- ThreadSP thread_sp;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- thread_sp = value_sp->GetThreadSP();
- sb_thread.SetThread(thread_sp);
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (thread_sp.get() == NULL)
- log->Printf ("SBValue(%p)::GetThread () => NULL", value_sp.get());
- else
- log->Printf ("SBValue(%p)::GetThread () => %p", value_sp.get(), thread_sp.get());
- }
- return sb_thread;
-}
-
-lldb::SBFrame
-SBValue::GetFrame()
-{
- SBFrame sb_frame;
- StackFrameSP frame_sp;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- frame_sp = value_sp->GetFrameSP();
- sb_frame.SetFrameSP (frame_sp);
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- {
- if (frame_sp.get() == NULL)
- log->Printf ("SBValue(%p)::GetFrame () => NULL", value_sp.get());
- else
- log->Printf ("SBValue(%p)::GetFrame () => %p", value_sp.get(), frame_sp.get());
- }
- return sb_frame;
-}
-
-
-lldb::ValueObjectSP
-SBValue::GetSP () const
-{
- return m_opaque_sp;
-}
-
-void
-SBValue::SetSP (const lldb::ValueObjectSP &sp)
-{
- m_opaque_sp = sp;
- if (IsValid() && m_opaque_sp->HasSyntheticValue())
- m_opaque_sp = m_opaque_sp->GetSyntheticValue();
-}
-
-
-bool
-SBValue::GetExpressionPath (SBStream &description)
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- value_sp->GetExpressionPath (description.ref(), false);
- return true;
- }
- return false;
-}
-
-bool
-SBValue::GetExpressionPath (SBStream &description, bool qualify_cxx_base_classes)
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- value_sp->GetExpressionPath (description.ref(), qualify_cxx_base_classes);
- return true;
- }
- return false;
-}
-
-bool
-SBValue::GetDescription (SBStream &description)
-{
- Stream &strm = description.ref();
-
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetDescription() => error: process is running", value_sp.get());
- }
- else
- {
- ValueObject::DumpValueObject (strm, value_sp.get());
- }
- }
- else
- strm.PutCString ("No value");
-
- return true;
-}
-
-lldb::Format
-SBValue::GetFormat ()
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- return value_sp->GetFormat();
- return eFormatDefault;
-}
-
-void
-SBValue::SetFormat (lldb::Format format)
-{
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- value_sp->SetFormat(format);
-}
-
-lldb::SBValue
-SBValue::AddressOf()
-{
- SBValue sb_value;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp (value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- Error error;
- sb_value = value_sp->AddressOf (error);
- }
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetPointerToObject () => SBValue(%p)", value_sp.get(), value_sp.get());
-
- return sb_value;
-}
-
-lldb::addr_t
-SBValue::GetLoadAddress()
-{
- lldb::addr_t value = LLDB_INVALID_ADDRESS;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp (value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- const bool scalar_is_load_address = true;
- AddressType addr_type;
- value = value_sp->GetAddressOf(scalar_is_load_address, &addr_type);
- if (addr_type == eAddressTypeFile)
- {
- ModuleSP module_sp (value_sp->GetModule());
- if (!module_sp)
- value = LLDB_INVALID_ADDRESS;
- else
- {
- Address addr;
- module_sp->ResolveFileAddress(value, addr);
- value = addr.GetLoadAddress(target_sp.get());
- }
- }
- else if (addr_type == eAddressTypeHost || addr_type == eAddressTypeInvalid)
- value = LLDB_INVALID_ADDRESS;
- }
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetLoadAddress () => (%llu)", value_sp.get(), value);
-
- return value;
-}
-
-lldb::SBAddress
-SBValue::GetAddress()
-{
- Address addr;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- TargetSP target_sp (value_sp->GetTargetSP());
- if (target_sp)
- {
- lldb::addr_t value = LLDB_INVALID_ADDRESS;
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- const bool scalar_is_load_address = true;
- AddressType addr_type;
- value = value_sp->GetAddressOf(scalar_is_load_address, &addr_type);
- if (addr_type == eAddressTypeFile)
- {
- ModuleSP module_sp (value_sp->GetModule());
- if (module_sp)
- module_sp->ResolveFileAddress(value, addr);
- }
- else if (addr_type == eAddressTypeLoad)
- {
- // no need to check the return value on this.. if it can actually do the resolve
- // addr will be in the form (section,offset), otherwise it will simply be returned
- // as (NULL, value)
- addr.SetLoadAddress(value, target_sp.get());
- }
- }
- }
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::GetAddress () => (%s,%llu)", value_sp.get(), (addr.GetSection() ? addr.GetSection()->GetName().GetCString() : "NULL"), addr.GetOffset());
- return SBAddress(new Address(addr));
-}
-
-lldb::SBData
-SBValue::GetPointeeData (uint32_t item_idx,
- uint32_t item_count)
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- lldb::SBData sb_data;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetPointeeData() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp (value_sp->GetTargetSP());
- if (target_sp)
- {
- DataExtractorSP data_sp(new DataExtractor());
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- value_sp->GetPointeeData(*data_sp, item_idx, item_count);
- if (data_sp->GetByteSize() > 0)
- *sb_data = data_sp;
- }
- }
- }
- if (log)
- log->Printf ("SBValue(%p)::GetPointeeData (%d, %d) => SBData(%p)",
- value_sp.get(),
- item_idx,
- item_count,
- sb_data.get());
-
- return sb_data;
-}
-
-lldb::SBData
-SBValue::GetData ()
-{
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- lldb::SBData sb_data;
- lldb::ValueObjectSP value_sp(GetSP());
- if (value_sp)
- {
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- if (log)
- log->Printf ("SBValue(%p)::GetData() => error: process is running", value_sp.get());
- }
- else
- {
- TargetSP target_sp (value_sp->GetTargetSP());
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
- DataExtractorSP data_sp(new DataExtractor());
- value_sp->GetData(*data_sp);
- if (data_sp->GetByteSize() > 0)
- *sb_data = data_sp;
- }
- }
- }
- if (log)
- log->Printf ("SBValue(%p)::GetData () => SBData(%p)",
- value_sp.get(),
- sb_data.get());
-
- return sb_data;
-}
-
-lldb::SBWatchpoint
-SBValue::Watch (bool resolve_location, bool read, bool write)
-{
- SBWatchpoint sb_watchpoint;
-
- // If the SBValue is not valid, there's no point in even trying to watch it.
- lldb::ValueObjectSP value_sp(GetSP());
- TargetSP target_sp (GetTarget().GetSP());
- if (value_sp && target_sp)
- {
- // Can't watch this if the process is running
- ProcessSP process_sp(value_sp->GetProcessSP());
- Process::StopLocker stop_locker;
- if (process_sp && !stop_locker.TryLock(&process_sp->GetRunLock()))
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
- if (log)
- log->Printf ("SBValue(%p)::Watch() => error: process is running", value_sp.get());
- return sb_watchpoint;
- }
-
- // Read and Write cannot both be false.
- if (!read && !write)
- return sb_watchpoint;
-
- // If the value is not in scope, don't try and watch and invalid value
- if (!IsInScope())
- return sb_watchpoint;
-
- addr_t addr = GetLoadAddress();
- if (addr == LLDB_INVALID_ADDRESS)
- return sb_watchpoint;
- size_t byte_size = GetByteSize();
- if (byte_size == 0)
- return sb_watchpoint;
-
- uint32_t watch_type = 0;
- if (read)
- watch_type |= LLDB_WATCH_TYPE_READ;
- if (write)
- watch_type |= LLDB_WATCH_TYPE_WRITE;
-
- WatchpointSP watchpoint_sp = target_sp->CreateWatchpoint(addr, byte_size, watch_type);
-
- if (watchpoint_sp)
- {
- sb_watchpoint.SetSP (watchpoint_sp);
- Declaration decl;
- if (value_sp->GetDeclaration (decl))
- {
- if (decl.GetFile())
- {
- StreamString ss;
- // True to show fullpath for declaration file.
- decl.DumpStopContext(&ss, true);
- watchpoint_sp->SetDeclInfo(ss.GetString());
- }
- }
- }
- }
- return sb_watchpoint;
-}
-
-lldb::SBWatchpoint
-SBValue::WatchPointee (bool resolve_location, bool read, bool write)
-{
- SBWatchpoint sb_watchpoint;
- if (IsInScope() && GetType().IsPointerType())
- sb_watchpoint = Dereference().Watch (resolve_location, read, write);
- return sb_watchpoint;
-}
-