blob: 9a5fa4ed4f462c22fa741b8e3d9eef598d0af346 [file] [log] [blame]
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +00001//===-- SBTrace.cpp ---------------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000010#include "lldb/Target/Process.h"
Ravitheja Addepallye714c4f2017-05-26 11:46:27 +000011#include "lldb/Utility/Log.h"
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000012
13#include "lldb/API/SBTrace.h"
14#include "lldb/API/SBTraceOptions.h"
15
16using namespace lldb;
17using namespace lldb_private;
18
19class TraceImpl {
20public:
21 lldb::user_id_t uid;
22};
23
24lldb::ProcessSP SBTrace::GetSP() const { return m_opaque_wp.lock(); }
25
26size_t SBTrace::GetTraceData(SBError &error, void *buf, size_t size,
27 size_t offset, lldb::tid_t thread_id) {
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000028 ProcessSP process_sp(GetSP());
29 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
Ravitheja Addepallye714c4f2017-05-26 11:46:27 +000030 llvm::MutableArrayRef<uint8_t> buffer(static_cast<uint8_t *>(buf), size);
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000031 error.Clear();
32
33 if (!process_sp) {
34 error.SetErrorString("invalid process");
35 } else {
Ravitheja Addepallye714c4f2017-05-26 11:46:27 +000036 error.SetError(
37 process_sp->GetData(GetTraceUID(), thread_id, buffer, offset));
38 LLDB_LOG(log, "SBTrace::bytes_read - {0}", buffer.size());
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000039 }
Ravitheja Addepallye714c4f2017-05-26 11:46:27 +000040 return buffer.size();
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000041}
42
43size_t SBTrace::GetMetaData(SBError &error, void *buf, size_t size,
44 size_t offset, lldb::tid_t thread_id) {
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000045 ProcessSP process_sp(GetSP());
46 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
Ravitheja Addepallye714c4f2017-05-26 11:46:27 +000047 llvm::MutableArrayRef<uint8_t> buffer(static_cast<uint8_t *>(buf), size);
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000048 error.Clear();
49
50 if (!process_sp) {
51 error.SetErrorString("invalid process");
52 } else {
53
Ravitheja Addepallye714c4f2017-05-26 11:46:27 +000054 error.SetError(
55 process_sp->GetMetaData(GetTraceUID(), thread_id, buffer, offset));
56 LLDB_LOG(log, "SBTrace::bytes_read - {0}", buffer.size());
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000057 }
Ravitheja Addepallye714c4f2017-05-26 11:46:27 +000058 return buffer.size();
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000059}
60
61void SBTrace::StopTrace(SBError &error, lldb::tid_t thread_id) {
62 ProcessSP process_sp(GetSP());
63 error.Clear();
64
65 if (!process_sp) {
66 error.SetErrorString("invalid process");
67 return;
68 }
Ravitheja Addepallye714c4f2017-05-26 11:46:27 +000069 error.SetError(process_sp->StopTrace(GetTraceUID(), thread_id));
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000070}
71
72void SBTrace::GetTraceConfig(SBTraceOptions &options, SBError &error) {
73 ProcessSP process_sp(GetSP());
74 error.Clear();
75
76 if (!process_sp) {
77 error.SetErrorString("invalid process");
78 } else {
Ravitheja Addepallye714c4f2017-05-26 11:46:27 +000079 error.SetError(process_sp->GetTraceConfig(GetTraceUID(),
80 *(options.m_traceoptions_sp)));
Ravitheja Addepallyd5d8d912017-04-26 08:48:50 +000081 }
82}
83
84lldb::user_id_t SBTrace::GetTraceUID() {
85 if (m_trace_impl_sp)
86 return m_trace_impl_sp->uid;
87 return LLDB_INVALID_UID;
88}
89
90void SBTrace::SetTraceUID(lldb::user_id_t uid) {
91 if (m_trace_impl_sp)
92 m_trace_impl_sp->uid = uid;
93}
94
95SBTrace::SBTrace() {
96 m_trace_impl_sp.reset(new TraceImpl);
97 if (m_trace_impl_sp)
98 m_trace_impl_sp->uid = LLDB_INVALID_UID;
99}
100
101void SBTrace::SetSP(const ProcessSP &process_sp) { m_opaque_wp = process_sp; }
102
103bool SBTrace::IsValid() {
104 if (!m_trace_impl_sp)
105 return false;
106 if (!GetSP())
107 return false;
108 return true;
109}