forked from OSchip/llvm-project
110 lines
2.9 KiB
C++
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;
|
|
}
|