freebsd-dev/contrib/llvm/tools/lldb/source/API/SBTrace.cpp
2017-04-26 22:33:09 +00:00

110 lines
2.9 KiB
C++

//===-- SBTrace.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/Utility/Log.h"
#include "lldb/Target/Process.h"
#include "lldb/API/SBTrace.h"
#include "lldb/API/SBTraceOptions.h"
using namespace lldb;
using namespace lldb_private;
class TraceImpl {
public:
lldb::user_id_t uid;
};
lldb::ProcessSP SBTrace::GetSP() const { return m_opaque_wp.lock(); }
size_t SBTrace::GetTraceData(SBError &error, void *buf, size_t size,
size_t offset, lldb::tid_t thread_id) {
size_t bytes_read = 0;
ProcessSP process_sp(GetSP());
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
error.Clear();
if (!process_sp) {
error.SetErrorString("invalid process");
} else {
bytes_read = process_sp->GetData(GetTraceUID(), thread_id, error.ref(), buf,
size, offset);
LLDB_LOG(log, "SBTrace::bytes_read - %" PRIx64, bytes_read);
}
return bytes_read;
}
size_t SBTrace::GetMetaData(SBError &error, void *buf, size_t size,
size_t offset, lldb::tid_t thread_id) {
size_t bytes_read = 0;
ProcessSP process_sp(GetSP());
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
error.Clear();
if (!process_sp) {
error.SetErrorString("invalid process");
} else {
bytes_read = process_sp->GetMetaData(GetTraceUID(), thread_id, error.ref(),
buf, size, offset);
LLDB_LOG(log, "SBTrace::bytes_read - %" PRIx64, bytes_read);
}
return bytes_read;
}
void SBTrace::StopTrace(SBError &error, lldb::tid_t thread_id) {
ProcessSP process_sp(GetSP());
error.Clear();
if (!process_sp) {
error.SetErrorString("invalid process");
return;
}
process_sp->StopTrace(GetTraceUID(), thread_id, error.ref());
}
void SBTrace::GetTraceConfig(SBTraceOptions &options, SBError &error) {
ProcessSP process_sp(GetSP());
error.Clear();
if (!process_sp) {
error.SetErrorString("invalid process");
} else {
process_sp->GetTraceConfig(GetTraceUID(), error.ref(),
options.m_traceoptions_sp);
}
}
lldb::user_id_t SBTrace::GetTraceUID() {
if (m_trace_impl_sp)
return m_trace_impl_sp->uid;
return LLDB_INVALID_UID;
}
void SBTrace::SetTraceUID(lldb::user_id_t uid) {
if (m_trace_impl_sp)
m_trace_impl_sp->uid = uid;
}
SBTrace::SBTrace() {
m_trace_impl_sp.reset(new TraceImpl);
if (m_trace_impl_sp)
m_trace_impl_sp->uid = LLDB_INVALID_UID;
}
void SBTrace::SetSP(const ProcessSP &process_sp) { m_opaque_wp = process_sp; }
bool SBTrace::IsValid() {
if (!m_trace_impl_sp)
return false;
if (!GetSP())
return false;
return true;
}