180814287SRaphael Isemann //===-- SBDebugger.cpp ----------------------------------------------------===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
9baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
10d17cd902SAlex Langford #include "SystemInitializerFull.h"
11d17cd902SAlex Langford 
12ca93cc1dSEli Friedman #include "lldb/API/SBDebugger.h"
1330fdc8d8SChris Lattner 
14e0d378b3SGreg Clayton #include "lldb/lldb-private.h"
1530fdc8d8SChris Lattner 
16ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h"
17ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h"
184b354039SJonas Devlieghere #include "lldb/API/SBCommandInterpreterRunOptions.h"
19ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h"
202289fa48SGreg Clayton #include "lldb/API/SBError.h"
21ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h"
2296898eb6SLawrence D'Anna #include "lldb/API/SBFile.h"
23ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h"
24b9c1b51eSKate Stone #include "lldb/API/SBListener.h"
253df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h"
263df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h"
27dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
283df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h"
29c10e34d0SVadim Macagon #include "lldb/API/SBStructuredData.h"
303df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h"
313df9a8dfSCaroline Tice #include "lldb/API/SBThread.h"
32061858ceSEnrico Granata #include "lldb/API/SBTypeCategory.h"
33061858ceSEnrico Granata #include "lldb/API/SBTypeFilter.h"
34b9c1b51eSKate Stone #include "lldb/API/SBTypeFormat.h"
35061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h"
36061858ceSEnrico Granata #include "lldb/API/SBTypeSummary.h"
37061858ceSEnrico Granata #include "lldb/API/SBTypeSynthetic.h"
38061858ceSEnrico Granata 
396eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h"
40c10e34d0SVadim Macagon #include "lldb/Core/PluginManager.h"
41e122877fSGreg Clayton #include "lldb/Core/Progress.h"
4244d93782SGreg Clayton #include "lldb/Core/StreamFile.h"
43c10e34d0SVadim Macagon #include "lldb/Core/StructuredDataImpl.h"
445548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h"
4559998b7bSJonas Devlieghere #include "lldb/Host/Config.h"
46f1389e92SPavel Labath #include "lldb/Host/XML.h"
47e6e2bb38SZachary Turner #include "lldb/Initialization/SystemLifetimeManager.h"
486eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h"
4947cbf4a0SPavel Labath #include "lldb/Interpreter/OptionArgParser.h"
50cac9c5f9SGreg Clayton #include "lldb/Interpreter/OptionGroupPlatform.h"
516eee5aa0SGreg Clayton #include "lldb/Target/Process.h"
526eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h"
53145d95c9SPavel Labath #include "lldb/Utility/Args.h"
54d821c997SPavel Labath #include "lldb/Utility/State.h"
5530fdc8d8SChris Lattner 
56d717cc9fSEnrico Granata #include "llvm/ADT/STLExtras.h"
577b2e5a36SZachary Turner #include "llvm/ADT/StringRef.h"
5858a559c0SZachary Turner #include "llvm/Support/DynamicLibrary.h"
59b9c1b51eSKate Stone #include "llvm/Support/ManagedStatic.h"
6058a559c0SZachary Turner 
6130fdc8d8SChris Lattner using namespace lldb;
6230fdc8d8SChris Lattner using namespace lldb_private;
6330fdc8d8SChris Lattner 
64b9c1b51eSKate Stone static llvm::sys::DynamicLibrary LoadPlugin(const lldb::DebuggerSP &debugger_sp,
65b9c1b51eSKate Stone                                             const FileSpec &spec,
6697206d57SZachary Turner                                             Status &error) {
67b9c1b51eSKate Stone   llvm::sys::DynamicLibrary dynlib =
68b9c1b51eSKate Stone       llvm::sys::DynamicLibrary::getPermanentLibrary(spec.GetPath().c_str());
69b9c1b51eSKate Stone   if (dynlib.isValid()) {
705fb8f797SGreg Clayton     typedef bool (*LLDBCommandPluginInit)(lldb::SBDebugger & debugger);
715fb8f797SGreg Clayton 
725fb8f797SGreg Clayton     lldb::SBDebugger debugger_sb(debugger_sp);
73b9c1b51eSKate Stone     // This calls the bool lldb::PluginInitialize(lldb::SBDebugger debugger)
74b9c1b51eSKate Stone     // function.
75b9c1b51eSKate Stone     // TODO: mangle this differently for your system - on OSX, the first
76b9c1b51eSKate Stone     // underscore needs to be removed and the second one stays
77b9c1b51eSKate Stone     LLDBCommandPluginInit init_func =
7822701b2fSStephane Sezer         (LLDBCommandPluginInit)(uintptr_t)dynlib.getAddressOfSymbol(
79b9c1b51eSKate Stone             "_ZN4lldb16PluginInitializeENS_10SBDebuggerE");
80b9c1b51eSKate Stone     if (init_func) {
815fb8f797SGreg Clayton       if (init_func(debugger_sb))
8258a559c0SZachary Turner         return dynlib;
835fb8f797SGreg Clayton       else
84b9c1b51eSKate Stone         error.SetErrorString("plug-in refused to load "
85b9c1b51eSKate Stone                              "(lldb::PluginInitialize(lldb::SBDebugger) "
86b9c1b51eSKate Stone                              "returned false)");
87b9c1b51eSKate Stone     } else {
88b9c1b51eSKate Stone       error.SetErrorString("plug-in is missing the required initialization: "
89b9c1b51eSKate Stone                            "lldb::PluginInitialize(lldb::SBDebugger)");
905fb8f797SGreg Clayton     }
91b9c1b51eSKate Stone   } else {
92dbd7fabaSJonas Devlieghere     if (FileSystem::Instance().Exists(spec))
935fb8f797SGreg Clayton       error.SetErrorString("this file does not represent a loadable dylib");
945fb8f797SGreg Clayton     else
955fb8f797SGreg Clayton       error.SetErrorString("no such file");
965fb8f797SGreg Clayton   }
9758a559c0SZachary Turner   return llvm::sys::DynamicLibrary();
985fb8f797SGreg Clayton }
995fb8f797SGreg Clayton 
100e6e2bb38SZachary Turner static llvm::ManagedStatic<SystemLifetimeManager> g_debugger_lifetime;
101e6e2bb38SZachary Turner 
102b9c1b51eSKate Stone SBError SBInputReader::Initialize(
103b9c1b51eSKate Stone     lldb::SBDebugger &sb_debugger,
1040d7b0c96SJonas Devlieghere     unsigned long (*callback)(void *, lldb::SBInputReader *,
1050d7b0c96SJonas Devlieghere                               lldb::InputReaderAction, char const *,
1060d7b0c96SJonas Devlieghere                               unsigned long),
1070d7b0c96SJonas Devlieghere     void *a, lldb::InputReaderGranularity b, char const *c, char const *d,
1080d7b0c96SJonas Devlieghere     bool e) {
1097bc83564SJonas Devlieghere   LLDB_RECORD_DUMMY(
1107bc83564SJonas Devlieghere       lldb::SBError, SBInputReader, Initialize,
1117bc83564SJonas Devlieghere       (lldb::SBDebugger &,
1127bc83564SJonas Devlieghere        unsigned long (*)(void *, lldb::SBInputReader *, lldb::InputReaderAction,
1137bc83564SJonas Devlieghere                          const char *, unsigned long),
1147bc83564SJonas Devlieghere        void *, lldb::InputReaderGranularity, const char *, const char *, bool),
1150d7b0c96SJonas Devlieghere       sb_debugger, callback, a, b, c, d, e);
1160d7b0c96SJonas Devlieghere 
117e6e2bb38SZachary Turner   return SBError();
118e6e2bb38SZachary Turner }
119e6e2bb38SZachary Turner 
120baf5664fSJonas Devlieghere void SBInputReader::SetIsDone(bool b) {
121baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBInputReader, SetIsDone, (bool), b);
122baf5664fSJonas Devlieghere }
123dbb0abbfSEugene Zelenko 
124baf5664fSJonas Devlieghere bool SBInputReader::IsActive() const {
125baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBInputReader, IsActive);
126e6e2bb38SZachary Turner 
127baf5664fSJonas Devlieghere   return false;
128baf5664fSJonas Devlieghere }
129baf5664fSJonas Devlieghere 
130baf5664fSJonas Devlieghere SBDebugger::SBDebugger() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBDebugger); }
131dbb0abbfSEugene Zelenko 
132b9c1b51eSKate Stone SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp)
133baf5664fSJonas Devlieghere     : m_opaque_sp(debugger_sp) {
134baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &), debugger_sp);
135baf5664fSJonas Devlieghere }
136dbb0abbfSEugene Zelenko 
137baf5664fSJonas Devlieghere SBDebugger::SBDebugger(const SBDebugger &rhs) : m_opaque_sp(rhs.m_opaque_sp) {
138baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &), rhs);
139baf5664fSJonas Devlieghere }
140dbb0abbfSEugene Zelenko 
141dbb0abbfSEugene Zelenko SBDebugger::~SBDebugger() = default;
142dbb0abbfSEugene Zelenko 
143b9c1b51eSKate Stone SBDebugger &SBDebugger::operator=(const SBDebugger &rhs) {
144baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBDebugger &,
145baf5664fSJonas Devlieghere                      SBDebugger, operator=,(const lldb::SBDebugger &), rhs);
146baf5664fSJonas Devlieghere 
147b9c1b51eSKate Stone   if (this != &rhs) {
148dbb0abbfSEugene Zelenko     m_opaque_sp = rhs.m_opaque_sp;
149dbb0abbfSEugene Zelenko   }
150306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
151dbb0abbfSEugene Zelenko }
152dbb0abbfSEugene Zelenko 
153e122877fSGreg Clayton const char *SBDebugger::GetBroadcasterClass() {
154e122877fSGreg Clayton   LLDB_RECORD_STATIC_METHOD_NO_ARGS(const char *, SBDebugger,
155e122877fSGreg Clayton                                     GetBroadcasterClass);
156e122877fSGreg Clayton 
157e122877fSGreg Clayton   return Debugger::GetStaticBroadcasterClass().AsCString();
158e122877fSGreg Clayton }
159e122877fSGreg Clayton 
160e122877fSGreg Clayton const char *SBDebugger::GetProgressFromEvent(const lldb::SBEvent &event,
161e122877fSGreg Clayton                                              uint64_t &progress_id,
162e122877fSGreg Clayton                                              uint64_t &completed,
163e122877fSGreg Clayton                                              uint64_t &total,
164e122877fSGreg Clayton                                              bool &is_debugger_specific) {
165e122877fSGreg Clayton   const Debugger::ProgressEventData *progress_data =
166e122877fSGreg Clayton       Debugger::ProgressEventData::GetEventDataFromEvent(event.get());
167e122877fSGreg Clayton   if (progress_data == nullptr)
168e122877fSGreg Clayton     return nullptr;
169e122877fSGreg Clayton   progress_id = progress_data->GetID();
170e122877fSGreg Clayton   completed = progress_data->GetCompleted();
171e122877fSGreg Clayton   total = progress_data->GetTotal();
172e122877fSGreg Clayton   is_debugger_specific = progress_data->IsDebuggerSpecific();
17336597e47SBruce Mitchener   // We must record the static method _after_ the out parameters have been
174e122877fSGreg Clayton   // filled in.
175e122877fSGreg Clayton   LLDB_RECORD_STATIC_METHOD(
176e122877fSGreg Clayton       const char *, SBDebugger, GetProgressFromEvent,
177e122877fSGreg Clayton       (const lldb::SBEvent &, uint64_t &, uint64_t &, uint64_t &, bool &),
178e122877fSGreg Clayton       event, progress_id, completed, total, is_debugger_specific);
179e122877fSGreg Clayton   return LLDB_RECORD_RESULT(progress_data->GetMessage().c_str())
180e122877fSGreg Clayton }
181e122877fSGreg Clayton 
182e122877fSGreg Clayton SBBroadcaster SBDebugger::GetBroadcaster() {
183e122877fSGreg Clayton   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBroadcaster, SBDebugger, GetBroadcaster);
184e122877fSGreg Clayton   SBBroadcaster broadcaster(&m_opaque_sp->GetBroadcaster(), false);
185e122877fSGreg Clayton   return LLDB_RECORD_RESULT(broadcaster);
186e122877fSGreg Clayton }
187e122877fSGreg Clayton 
188b9c1b51eSKate Stone void SBDebugger::Initialize() {
189baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Initialize);
190936c6242SJonas Devlieghere   SBError ignored = SBDebugger::InitializeWithErrorHandling();
19115eacd74SJonas Devlieghere }
19215eacd74SJonas Devlieghere 
193936c6242SJonas Devlieghere lldb::SBError SBDebugger::InitializeWithErrorHandling() {
194baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBError, SBDebugger,
195baf5664fSJonas Devlieghere                                     InitializeWithErrorHandling);
196baf5664fSJonas Devlieghere 
19715eacd74SJonas Devlieghere   SBError error;
19815eacd74SJonas Devlieghere   if (auto e = g_debugger_lifetime->Initialize(
199a8f3ae7cSJonas Devlieghere           std::make_unique<SystemInitializerFull>(), LoadPlugin)) {
20015eacd74SJonas Devlieghere     error.SetError(Status(std::move(e)));
20115eacd74SJonas Devlieghere   }
202baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(error);
20330fdc8d8SChris Lattner }
20430fdc8d8SChris Lattner 
205baf5664fSJonas Devlieghere void SBDebugger::Terminate() {
206baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Terminate);
207baf5664fSJonas Devlieghere 
208baf5664fSJonas Devlieghere   g_debugger_lifetime->Terminate();
209baf5664fSJonas Devlieghere }
21030fdc8d8SChris Lattner 
211b9c1b51eSKate Stone void SBDebugger::Clear() {
212baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, Clear);
213baf5664fSJonas Devlieghere 
2143d6086f6SCaroline Tice   if (m_opaque_sp)
21544d93782SGreg Clayton     m_opaque_sp->ClearIOHandlers();
216ceb6b139SCaroline Tice 
21748e42549SGreg Clayton   m_opaque_sp.reset();
21848e42549SGreg Clayton }
21948e42549SGreg Clayton 
220b9c1b51eSKate Stone SBDebugger SBDebugger::Create() {
221baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBDebugger, SBDebugger, Create);
222baf5664fSJonas Devlieghere 
223baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBDebugger::Create(false, nullptr, nullptr));
22406942690SJim Ingham }
22506942690SJim Ingham 
226b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files) {
227baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool),
228baf5664fSJonas Devlieghere                             source_init_files);
229baf5664fSJonas Devlieghere 
230baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
231baf5664fSJonas Devlieghere       SBDebugger::Create(source_init_files, nullptr, nullptr));
232228063cdSJim Ingham }
233228063cdSJim Ingham 
234b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files,
235b9c1b51eSKate Stone                               lldb::LogOutputCallback callback, void *baton)
236228063cdSJim Ingham 
237228063cdSJim Ingham {
2380d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(lldb::SBDebugger, SBDebugger, Create,
2397bc83564SJonas Devlieghere                     (bool, lldb::LogOutputCallback, void *), source_init_files,
2407bc83564SJonas Devlieghere                     callback, baton);
241ceb6b139SCaroline Tice 
2426611103cSGreg Clayton   SBDebugger debugger;
243cb172b10SGreg Clayton 
244b9c1b51eSKate Stone   // Currently we have issues if this function is called simultaneously on two
24505097246SAdrian Prantl   // different threads. The issues mainly revolve around the fact that the
24605097246SAdrian Prantl   // lldb_private::FormatManager uses global collections and having two threads
24705097246SAdrian Prantl   // parsing the .lldbinit files can cause mayhem. So to get around this for
24805097246SAdrian Prantl   // now we need to use a mutex to prevent bad things from happening.
24916ff8604SSaleem Abdulrasool   static std::recursive_mutex g_mutex;
25016ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(g_mutex);
251cb172b10SGreg Clayton 
252228063cdSJim Ingham   debugger.reset(Debugger::CreateInstance(callback, baton));
253ceb6b139SCaroline Tice 
25406942690SJim Ingham   SBCommandInterpreter interp = debugger.GetCommandInterpreter();
255b9c1b51eSKate Stone   if (source_init_files) {
25606942690SJim Ingham     interp.get()->SkipLLDBInitFiles(false);
25706942690SJim Ingham     interp.get()->SkipAppInitFiles(false);
25806942690SJim Ingham     SBCommandReturnObject result;
259868b45b5SMed Ismail Bennani     interp.SourceInitFileInHomeDirectory(result, false);
260b9c1b51eSKate Stone   } else {
26106942690SJim Ingham     interp.get()->SkipLLDBInitFiles(true);
26206942690SJim Ingham     interp.get()->SkipAppInitFiles(true);
26306942690SJim Ingham   }
2646611103cSGreg Clayton   return debugger;
2656611103cSGreg Clayton }
2666611103cSGreg Clayton 
267b9c1b51eSKate Stone void SBDebugger::Destroy(SBDebugger &debugger) {
268baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(void, SBDebugger, Destroy, (lldb::SBDebugger &),
269baf5664fSJonas Devlieghere                             debugger);
270baf5664fSJonas Devlieghere 
271e02657b1SCaroline Tice   Debugger::Destroy(debugger.m_opaque_sp);
272e02657b1SCaroline Tice 
273dbb0abbfSEugene Zelenko   if (debugger.m_opaque_sp.get() != nullptr)
274e02657b1SCaroline Tice     debugger.m_opaque_sp.reset();
275e02657b1SCaroline Tice }
276e02657b1SCaroline Tice 
277b9c1b51eSKate Stone void SBDebugger::MemoryPressureDetected() {
278baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, MemoryPressureDetected);
279baf5664fSJonas Devlieghere 
28005097246SAdrian Prantl   // Since this function can be call asynchronously, we allow it to be non-
28105097246SAdrian Prantl   // mandatory. We have seen deadlocks with this function when called so we
28205097246SAdrian Prantl   // need to safeguard against this until we can determine what is causing the
28305097246SAdrian Prantl   // deadlocks.
284aebdf1beSJim Ingham 
2850cd70866SGreg Clayton   const bool mandatory = false;
286aebdf1beSJim Ingham 
2870cd70866SGreg Clayton   ModuleList::RemoveOrphanSharedModules(mandatory);
288f9322415SGreg Clayton }
289f9322415SGreg Clayton 
290baf5664fSJonas Devlieghere bool SBDebugger::IsValid() const {
291baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, IsValid);
2927f5237bcSPavel Labath   return this->operator bool();
2937f5237bcSPavel Labath }
2947f5237bcSPavel Labath SBDebugger::operator bool() const {
2957f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, operator bool);
296baf5664fSJonas Devlieghere 
297baf5664fSJonas Devlieghere   return m_opaque_sp.get() != nullptr;
298baf5664fSJonas Devlieghere }
2996611103cSGreg Clayton 
300b9c1b51eSKate Stone void SBDebugger::SetAsync(bool b) {
301baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetAsync, (bool), b);
302baf5664fSJonas Devlieghere 
3036611103cSGreg Clayton   if (m_opaque_sp)
3046611103cSGreg Clayton     m_opaque_sp->SetAsyncExecution(b);
30530fdc8d8SChris Lattner }
30630fdc8d8SChris Lattner 
307b9c1b51eSKate Stone bool SBDebugger::GetAsync() {
308baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetAsync);
309baf5664fSJonas Devlieghere 
310dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetAsyncExecution() : false);
311e64f0dc7SJim Ingham }
312e64f0dc7SJim Ingham 
313b9c1b51eSKate Stone void SBDebugger::SkipLLDBInitFiles(bool b) {
314baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool), b);
315baf5664fSJonas Devlieghere 
3166eee5aa0SGreg Clayton   if (m_opaque_sp)
3176eee5aa0SGreg Clayton     m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles(b);
3186eee5aa0SGreg Clayton }
3196eee5aa0SGreg Clayton 
320b9c1b51eSKate Stone void SBDebugger::SkipAppInitFiles(bool b) {
321baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SkipAppInitFiles, (bool), b);
322baf5664fSJonas Devlieghere 
32316e0c686SJim Ingham   if (m_opaque_sp)
32416e0c686SJim Ingham     m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles(b);
32516e0c686SJim Ingham }
32616e0c686SJim Ingham 
327b9c1b51eSKate Stone void SBDebugger::SetInputFileHandle(FILE *fh, bool transfer_ownership) {
328baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool), fh,
329baf5664fSJonas Devlieghere                      transfer_ownership);
330f913fd6eSLawrence D'Anna   SetInputFile((FileSP)std::make_shared<NativeFile>(fh, transfer_ownership));
33196898eb6SLawrence D'Anna }
332baf5664fSJonas Devlieghere 
333c040b30fSLawrence D'Anna SBError SBDebugger::SetInputFile(FileSP file_sp) {
334c040b30fSLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetInputFile, (FileSP), file_sp);
335fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(SetInputFile(SBFile(file_sp)));
336c040b30fSLawrence D'Anna }
337c040b30fSLawrence D'Anna 
33896898eb6SLawrence D'Anna // Shouldn't really be settable after initialization as this could cause lots
33996898eb6SLawrence D'Anna // of problems; don't want users trying to switch modes in the middle of a
34096898eb6SLawrence D'Anna // debugging session.
34196898eb6SLawrence D'Anna SBError SBDebugger::SetInputFile(SBFile file) {
34296898eb6SLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetInputFile, (SBFile), file);
34396898eb6SLawrence D'Anna 
34496898eb6SLawrence D'Anna   SBError error;
34596898eb6SLawrence D'Anna   if (!m_opaque_sp) {
34696898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid debugger");
347fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
34896898eb6SLawrence D'Anna   }
349d77c2e09SJonas Devlieghere 
350d77c2e09SJonas Devlieghere   repro::DataRecorder *recorder = nullptr;
351d77c2e09SJonas Devlieghere   if (repro::Generator *g = repro::Reproducer::Instance().GetGenerator())
352169c8320SJonas Devlieghere     recorder = g->GetOrCreate<repro::CommandProvider>().GetNewRecorder();
353d77c2e09SJonas Devlieghere 
35496898eb6SLawrence D'Anna   FileSP file_sp = file.m_opaque_sp;
35596898eb6SLawrence D'Anna 
3561d41d1bcSEric Christopher   static std::unique_ptr<repro::MultiLoader<repro::CommandProvider>> loader =
3571d41d1bcSEric Christopher       repro::MultiLoader<repro::CommandProvider>::Create(
3581d41d1bcSEric Christopher           repro::Reproducer::Instance().GetLoader());
3594a491ec4SJonas Devlieghere   if (loader) {
36096898eb6SLawrence D'Anna     llvm::Optional<std::string> nextfile = loader->GetNextFile();
36196898eb6SLawrence D'Anna     FILE *fh = nextfile ? FileSystem::Instance().Fopen(nextfile->c_str(), "r")
36296898eb6SLawrence D'Anna                         : nullptr;
36396898eb6SLawrence D'Anna     // FIXME Jonas Devlieghere: shouldn't this error be propagated out to the
36496898eb6SLawrence D'Anna     // reproducer somehow if fh is NULL?
36596898eb6SLawrence D'Anna     if (fh) {
366f913fd6eSLawrence D'Anna       file_sp = std::make_shared<NativeFile>(fh, true);
36796898eb6SLawrence D'Anna     }
3684a491ec4SJonas Devlieghere   }
369d77c2e09SJonas Devlieghere 
37096898eb6SLawrence D'Anna   if (!file_sp || !file_sp->IsValid()) {
37196898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid file");
372fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
37396898eb6SLawrence D'Anna   }
37496898eb6SLawrence D'Anna 
37596898eb6SLawrence D'Anna   m_opaque_sp->SetInputFile(file_sp, recorder);
376fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(error);
37730fdc8d8SChris Lattner }
37830fdc8d8SChris Lattner 
379c040b30fSLawrence D'Anna SBError SBDebugger::SetOutputFile(FileSP file_sp) {
380c040b30fSLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetOutputFile, (FileSP), file_sp);
381fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(SetOutputFile(SBFile(file_sp)));
382c040b30fSLawrence D'Anna }
383c040b30fSLawrence D'Anna 
384b9c1b51eSKate Stone void SBDebugger::SetOutputFileHandle(FILE *fh, bool transfer_ownership) {
385baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetOutputFileHandle, (FILE *, bool), fh,
386baf5664fSJonas Devlieghere                      transfer_ownership);
387f913fd6eSLawrence D'Anna   SetOutputFile((FileSP)std::make_shared<NativeFile>(fh, transfer_ownership));
38896898eb6SLawrence D'Anna }
389baf5664fSJonas Devlieghere 
39096898eb6SLawrence D'Anna SBError SBDebugger::SetOutputFile(SBFile file) {
39196898eb6SLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetOutputFile, (SBFile file), file);
39296898eb6SLawrence D'Anna   SBError error;
39396898eb6SLawrence D'Anna   if (!m_opaque_sp) {
39496898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid debugger");
395fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
39696898eb6SLawrence D'Anna   }
39796898eb6SLawrence D'Anna   if (!file) {
39896898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid file");
399fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
40096898eb6SLawrence D'Anna   }
40196898eb6SLawrence D'Anna   m_opaque_sp->SetOutputFile(file.m_opaque_sp);
402fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(error);
40330fdc8d8SChris Lattner }
40430fdc8d8SChris Lattner 
405b9c1b51eSKate Stone void SBDebugger::SetErrorFileHandle(FILE *fh, bool transfer_ownership) {
406baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetErrorFileHandle, (FILE *, bool), fh,
407baf5664fSJonas Devlieghere                      transfer_ownership);
408f913fd6eSLawrence D'Anna   SetErrorFile((FileSP)std::make_shared<NativeFile>(fh, transfer_ownership));
40996898eb6SLawrence D'Anna }
410baf5664fSJonas Devlieghere 
411c040b30fSLawrence D'Anna SBError SBDebugger::SetErrorFile(FileSP file_sp) {
412c040b30fSLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetErrorFile, (FileSP), file_sp);
413fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(SetErrorFile(SBFile(file_sp)));
414c040b30fSLawrence D'Anna }
415c040b30fSLawrence D'Anna 
41696898eb6SLawrence D'Anna SBError SBDebugger::SetErrorFile(SBFile file) {
41796898eb6SLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetErrorFile, (SBFile file), file);
41896898eb6SLawrence D'Anna   SBError error;
41996898eb6SLawrence D'Anna   if (!m_opaque_sp) {
42096898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid debugger");
421fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
42296898eb6SLawrence D'Anna   }
42396898eb6SLawrence D'Anna   if (!file) {
42496898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid file");
425fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
42696898eb6SLawrence D'Anna   }
42796898eb6SLawrence D'Anna   m_opaque_sp->SetErrorFile(file.m_opaque_sp);
428fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(error);
42930fdc8d8SChris Lattner }
43030fdc8d8SChris Lattner 
431b9c1b51eSKate Stone FILE *SBDebugger::GetInputFileHandle() {
432baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetInputFileHandle);
433b9c1b51eSKate Stone   if (m_opaque_sp) {
4347ca15ba7SLawrence D'Anna     File &file_sp = m_opaque_sp->GetInputFile();
4357ca15ba7SLawrence D'Anna     return LLDB_RECORD_RESULT(file_sp.GetStream());
43644d93782SGreg Clayton   }
437fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(nullptr);
43830fdc8d8SChris Lattner }
43930fdc8d8SChris Lattner 
44096898eb6SLawrence D'Anna SBFile SBDebugger::GetInputFile() {
44196898eb6SLawrence D'Anna   LLDB_RECORD_METHOD_NO_ARGS(SBFile, SBDebugger, GetInputFile);
44296898eb6SLawrence D'Anna   if (m_opaque_sp) {
44396898eb6SLawrence D'Anna     return LLDB_RECORD_RESULT(SBFile(m_opaque_sp->GetInputFileSP()));
44496898eb6SLawrence D'Anna   }
44596898eb6SLawrence D'Anna   return LLDB_RECORD_RESULT(SBFile());
44696898eb6SLawrence D'Anna }
44796898eb6SLawrence D'Anna 
448b9c1b51eSKate Stone FILE *SBDebugger::GetOutputFileHandle() {
449baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetOutputFileHandle);
450b9c1b51eSKate Stone   if (m_opaque_sp) {
4517ca15ba7SLawrence D'Anna     StreamFile &stream_file = m_opaque_sp->GetOutputStream();
4527ca15ba7SLawrence D'Anna     return LLDB_RECORD_RESULT(stream_file.GetFile().GetStream());
45344d93782SGreg Clayton   }
454fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(nullptr);
45530fdc8d8SChris Lattner }
45630fdc8d8SChris Lattner 
45796898eb6SLawrence D'Anna SBFile SBDebugger::GetOutputFile() {
45896898eb6SLawrence D'Anna   LLDB_RECORD_METHOD_NO_ARGS(SBFile, SBDebugger, GetOutputFile);
45996898eb6SLawrence D'Anna   if (m_opaque_sp) {
46096898eb6SLawrence D'Anna     SBFile file(m_opaque_sp->GetOutputStream().GetFileSP());
46196898eb6SLawrence D'Anna     return LLDB_RECORD_RESULT(file);
46296898eb6SLawrence D'Anna   }
46396898eb6SLawrence D'Anna   return LLDB_RECORD_RESULT(SBFile());
46496898eb6SLawrence D'Anna }
46596898eb6SLawrence D'Anna 
466b9c1b51eSKate Stone FILE *SBDebugger::GetErrorFileHandle() {
467baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetErrorFileHandle);
468baf5664fSJonas Devlieghere 
469b9c1b51eSKate Stone   if (m_opaque_sp) {
4707ca15ba7SLawrence D'Anna     StreamFile &stream_file = m_opaque_sp->GetErrorStream();
4717ca15ba7SLawrence D'Anna     return LLDB_RECORD_RESULT(stream_file.GetFile().GetStream());
47244d93782SGreg Clayton   }
473fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(nullptr);
47430fdc8d8SChris Lattner }
47530fdc8d8SChris Lattner 
47696898eb6SLawrence D'Anna SBFile SBDebugger::GetErrorFile() {
47796898eb6SLawrence D'Anna   LLDB_RECORD_METHOD_NO_ARGS(SBFile, SBDebugger, GetErrorFile);
47896898eb6SLawrence D'Anna   SBFile file;
47996898eb6SLawrence D'Anna   if (m_opaque_sp) {
48096898eb6SLawrence D'Anna     SBFile file(m_opaque_sp->GetErrorStream().GetFileSP());
48196898eb6SLawrence D'Anna     return LLDB_RECORD_RESULT(file);
48296898eb6SLawrence D'Anna   }
48396898eb6SLawrence D'Anna   return LLDB_RECORD_RESULT(SBFile());
48496898eb6SLawrence D'Anna }
48596898eb6SLawrence D'Anna 
486b9c1b51eSKate Stone void SBDebugger::SaveInputTerminalState() {
487b328dcbfSJonas Devlieghere   LLDB_RECORD_DUMMY_NO_ARGS(void, SBDebugger, SaveInputTerminalState);
488baf5664fSJonas Devlieghere 
489c5917d9aSJim Ingham   if (m_opaque_sp)
490c5917d9aSJim Ingham     m_opaque_sp->SaveInputTerminalState();
491c5917d9aSJim Ingham }
492c5917d9aSJim Ingham 
493b9c1b51eSKate Stone void SBDebugger::RestoreInputTerminalState() {
494b328dcbfSJonas Devlieghere   LLDB_RECORD_DUMMY_NO_ARGS(void, SBDebugger, RestoreInputTerminalState);
495baf5664fSJonas Devlieghere 
496c5917d9aSJim Ingham   if (m_opaque_sp)
497c5917d9aSJim Ingham     m_opaque_sp->RestoreInputTerminalState();
498c5917d9aSJim Ingham }
499b9c1b51eSKate Stone SBCommandInterpreter SBDebugger::GetCommandInterpreter() {
500baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBCommandInterpreter, SBDebugger,
501baf5664fSJonas Devlieghere                              GetCommandInterpreter);
502baf5664fSJonas Devlieghere 
5036611103cSGreg Clayton   SBCommandInterpreter sb_interpreter;
5046611103cSGreg Clayton   if (m_opaque_sp)
5056611103cSGreg Clayton     sb_interpreter.reset(&m_opaque_sp->GetCommandInterpreter());
506ceb6b139SCaroline Tice 
507baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_interpreter);
50830fdc8d8SChris Lattner }
50930fdc8d8SChris Lattner 
510b9c1b51eSKate Stone void SBDebugger::HandleCommand(const char *command) {
511baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, HandleCommand, (const char *), command);
512baf5664fSJonas Devlieghere 
513b9c1b51eSKate Stone   if (m_opaque_sp) {
514af67cecdSGreg Clayton     TargetSP target_sp(m_opaque_sp->GetSelectedTarget());
515bb19a13cSSaleem Abdulrasool     std::unique_lock<std::recursive_mutex> lock;
516af67cecdSGreg Clayton     if (target_sp)
517bb19a13cSSaleem Abdulrasool       lock = std::unique_lock<std::recursive_mutex>(target_sp->GetAPIMutex());
518af67cecdSGreg Clayton 
5196611103cSGreg Clayton     SBCommandInterpreter sb_interpreter(GetCommandInterpreter());
52030fdc8d8SChris Lattner     SBCommandReturnObject result;
52130fdc8d8SChris Lattner 
52230fdc8d8SChris Lattner     sb_interpreter.HandleCommand(command, result, false);
52330fdc8d8SChris Lattner 
5245da2bc22SLawrence D'Anna     result.PutError(m_opaque_sp->GetErrorStream().GetFileSP());
5255da2bc22SLawrence D'Anna     result.PutOutput(m_opaque_sp->GetOutputStream().GetFileSP());
52630fdc8d8SChris Lattner 
527b9c1b51eSKate Stone     if (!m_opaque_sp->GetAsyncExecution()) {
5286611103cSGreg Clayton       SBProcess process(GetCommandInterpreter().GetProcess());
529b9556accSGreg Clayton       ProcessSP process_sp(process.GetSP());
530b9c1b51eSKate Stone       if (process_sp) {
53130fdc8d8SChris Lattner         EventSP event_sp;
532583bbb1dSJim Ingham         ListenerSP lldb_listener_sp = m_opaque_sp->GetListener();
533d35031e1SPavel Labath         while (lldb_listener_sp->GetEventForBroadcaster(
534d35031e1SPavel Labath             process_sp.get(), event_sp, std::chrono::seconds(0))) {
53530fdc8d8SChris Lattner           SBEvent event(event_sp);
536322f12afSLawrence D'Anna           HandleProcessEvent(process, event, GetOutputFile(), GetErrorFile());
53730fdc8d8SChris Lattner         }
53830fdc8d8SChris Lattner       }
53930fdc8d8SChris Lattner     }
54030fdc8d8SChris Lattner   }
5416611103cSGreg Clayton }
54230fdc8d8SChris Lattner 
543b9c1b51eSKate Stone SBListener SBDebugger::GetListener() {
544baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBListener, SBDebugger, GetListener);
545baf5664fSJonas Devlieghere 
5466611103cSGreg Clayton   SBListener sb_listener;
5476611103cSGreg Clayton   if (m_opaque_sp)
548583bbb1dSJim Ingham     sb_listener.reset(m_opaque_sp->GetListener());
549ceb6b139SCaroline Tice 
550baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_listener);
55130fdc8d8SChris Lattner }
55230fdc8d8SChris Lattner 
553b9c1b51eSKate Stone void SBDebugger::HandleProcessEvent(const SBProcess &process,
554322f12afSLawrence D'Anna                                     const SBEvent &event, SBFile out,
555322f12afSLawrence D'Anna                                     SBFile err) {
556322f12afSLawrence D'Anna   LLDB_RECORD_METHOD(
557322f12afSLawrence D'Anna       void, SBDebugger, HandleProcessEvent,
558322f12afSLawrence D'Anna       (const lldb::SBProcess &, const lldb::SBEvent &, SBFile, SBFile), process,
559322f12afSLawrence D'Anna       event, out, err);
560322f12afSLawrence D'Anna 
561322f12afSLawrence D'Anna   return HandleProcessEvent(process, event, out.m_opaque_sp, err.m_opaque_sp);
562322f12afSLawrence D'Anna }
563322f12afSLawrence D'Anna 
564322f12afSLawrence D'Anna void SBDebugger::HandleProcessEvent(const SBProcess &process,
565b9c1b51eSKate Stone                                     const SBEvent &event, FILE *out,
566b9c1b51eSKate Stone                                     FILE *err) {
567baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
568baf5664fSJonas Devlieghere       void, SBDebugger, HandleProcessEvent,
569baf5664fSJonas Devlieghere       (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *), process,
570baf5664fSJonas Devlieghere       event, out, err);
571baf5664fSJonas Devlieghere 
572322f12afSLawrence D'Anna   FileSP outfile = std::make_shared<NativeFile>(out, false);
573322f12afSLawrence D'Anna   FileSP errfile = std::make_shared<NativeFile>(err, false);
574322f12afSLawrence D'Anna   return HandleProcessEvent(process, event, outfile, errfile);
575322f12afSLawrence D'Anna }
576322f12afSLawrence D'Anna 
577322f12afSLawrence D'Anna void SBDebugger::HandleProcessEvent(const SBProcess &process,
578322f12afSLawrence D'Anna                                     const SBEvent &event, FileSP out_sp,
579322f12afSLawrence D'Anna                                     FileSP err_sp) {
580322f12afSLawrence D'Anna 
581322f12afSLawrence D'Anna   LLDB_RECORD_METHOD(
582322f12afSLawrence D'Anna       void, SBDebugger, HandleProcessEvent,
583322f12afSLawrence D'Anna       (const lldb::SBProcess &, const lldb::SBEvent &, FileSP, FileSP), process,
584322f12afSLawrence D'Anna       event, out_sp, err_sp);
585322f12afSLawrence D'Anna 
586af67cecdSGreg Clayton   if (!process.IsValid())
587af67cecdSGreg Clayton     return;
588af67cecdSGreg Clayton 
589b9556accSGreg Clayton   TargetSP target_sp(process.GetTarget().GetSP());
590b9556accSGreg Clayton   if (!target_sp)
591b9556accSGreg Clayton     return;
592b9556accSGreg Clayton 
59330fdc8d8SChris Lattner   const uint32_t event_type = event.GetType();
59430fdc8d8SChris Lattner   char stdio_buffer[1024];
59530fdc8d8SChris Lattner   size_t len;
59630fdc8d8SChris Lattner 
597bb19a13cSSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(target_sp->GetAPIMutex());
598af67cecdSGreg Clayton 
599b9c1b51eSKate Stone   if (event_type &
600b9c1b51eSKate Stone       (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) {
601af67cecdSGreg Clayton     // Drain stdout when we stop just in case we have any bytes
60230fdc8d8SChris Lattner     while ((len = process.GetSTDOUT(stdio_buffer, sizeof(stdio_buffer))) > 0)
603322f12afSLawrence D'Anna       if (out_sp)
604322f12afSLawrence D'Anna         out_sp->Write(stdio_buffer, len);
60530fdc8d8SChris Lattner   }
606af67cecdSGreg Clayton 
607b9c1b51eSKate Stone   if (event_type &
608b9c1b51eSKate Stone       (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) {
609af67cecdSGreg Clayton     // Drain stderr when we stop just in case we have any bytes
61030fdc8d8SChris Lattner     while ((len = process.GetSTDERR(stdio_buffer, sizeof(stdio_buffer))) > 0)
611322f12afSLawrence D'Anna       if (err_sp)
612322f12afSLawrence D'Anna         err_sp->Write(stdio_buffer, len);
61330fdc8d8SChris Lattner   }
614af67cecdSGreg Clayton 
615b9c1b51eSKate Stone   if (event_type & Process::eBroadcastBitStateChanged) {
61630fdc8d8SChris Lattner     StateType event_state = SBProcess::GetStateFromEvent(event);
61730fdc8d8SChris Lattner 
61830fdc8d8SChris Lattner     if (event_state == eStateInvalid)
61930fdc8d8SChris Lattner       return;
62030fdc8d8SChris Lattner 
62130fdc8d8SChris Lattner     bool is_stopped = StateIsStoppedState(event_state);
62230fdc8d8SChris Lattner     if (!is_stopped)
623322f12afSLawrence D'Anna       process.ReportEventState(event, out_sp);
62430fdc8d8SChris Lattner   }
62530fdc8d8SChris Lattner }
62630fdc8d8SChris Lattner 
627b9c1b51eSKate Stone SBSourceManager SBDebugger::GetSourceManager() {
628baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBSourceManager, SBDebugger,
629baf5664fSJonas Devlieghere                              GetSourceManager);
630baf5664fSJonas Devlieghere 
631e37d605eSJim Ingham   SBSourceManager sb_source_manager(*this);
632baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_source_manager);
63330fdc8d8SChris Lattner }
63430fdc8d8SChris Lattner 
635b9c1b51eSKate Stone bool SBDebugger::GetDefaultArchitecture(char *arch_name, size_t arch_name_len) {
636e687aa82SJonas Devlieghere   LLDB_RECORD_CHAR_PTR_STATIC_METHOD(bool, SBDebugger, GetDefaultArchitecture,
637e687aa82SJonas Devlieghere                                      (char *, size_t), arch_name, "",
638e687aa82SJonas Devlieghere                                      arch_name_len);
639baf5664fSJonas Devlieghere 
640b9c1b51eSKate Stone   if (arch_name && arch_name_len) {
641431ce678SGreg Clayton     ArchSpec default_arch = Target::GetDefaultArchitecture();
642daccaa9eSCaroline Tice 
643b9c1b51eSKate Stone     if (default_arch.IsValid()) {
644431ce678SGreg Clayton       const std::string &triple_str = default_arch.GetTriple().str();
645431ce678SGreg Clayton       if (!triple_str.empty())
646431ce678SGreg Clayton         ::snprintf(arch_name, arch_name_len, "%s", triple_str.c_str());
647431ce678SGreg Clayton       else
648b9c1b51eSKate Stone         ::snprintf(arch_name, arch_name_len, "%s",
649b9c1b51eSKate Stone                    default_arch.GetArchitectureName());
65030fdc8d8SChris Lattner       return true;
65130fdc8d8SChris Lattner     }
65230fdc8d8SChris Lattner   }
65330fdc8d8SChris Lattner   if (arch_name && arch_name_len)
65430fdc8d8SChris Lattner     arch_name[0] = '\0';
65530fdc8d8SChris Lattner   return false;
65630fdc8d8SChris Lattner }
65730fdc8d8SChris Lattner 
658b9c1b51eSKate Stone bool SBDebugger::SetDefaultArchitecture(const char *arch_name) {
659baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture,
660baf5664fSJonas Devlieghere                             (const char *), arch_name);
661baf5664fSJonas Devlieghere 
662b9c1b51eSKate Stone   if (arch_name) {
66370512317SGreg Clayton     ArchSpec arch(arch_name);
664b9c1b51eSKate Stone     if (arch.IsValid()) {
665431ce678SGreg Clayton       Target::SetDefaultArchitecture(arch);
66630fdc8d8SChris Lattner       return true;
66730fdc8d8SChris Lattner     }
66830fdc8d8SChris Lattner   }
66930fdc8d8SChris Lattner   return false;
67030fdc8d8SChris Lattner }
67130fdc8d8SChris Lattner 
67230fdc8d8SChris Lattner ScriptLanguage
673b9c1b51eSKate Stone SBDebugger::GetScriptingLanguage(const char *script_language_name) {
674baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage,
675baf5664fSJonas Devlieghere                      (const char *), script_language_name);
676baf5664fSJonas Devlieghere 
677d9aec34bSJonas Devlieghere   if (!script_language_name)
678d9aec34bSJonas Devlieghere     return eScriptLanguageDefault;
67947cbf4a0SPavel Labath   return OptionArgParser::ToScriptLanguage(
68047cbf4a0SPavel Labath       llvm::StringRef(script_language_name), eScriptLanguageDefault, nullptr);
68130fdc8d8SChris Lattner }
68230fdc8d8SChris Lattner 
683*bbef51ebSLawrence D'Anna SBStructuredData
684*bbef51ebSLawrence D'Anna SBDebugger::GetScriptInterpreterInfo(lldb::ScriptLanguage language) {
685*bbef51ebSLawrence D'Anna   LLDB_RECORD_METHOD(SBStructuredData, SBDebugger, GetScriptInterpreterInfo,
686*bbef51ebSLawrence D'Anna                      (lldb::ScriptLanguage), language);
687*bbef51ebSLawrence D'Anna   SBStructuredData data;
688*bbef51ebSLawrence D'Anna   if (m_opaque_sp) {
689*bbef51ebSLawrence D'Anna     lldb_private::ScriptInterpreter *interp =
690*bbef51ebSLawrence D'Anna         m_opaque_sp->GetScriptInterpreter(language);
691*bbef51ebSLawrence D'Anna     if (interp) {
692*bbef51ebSLawrence D'Anna       data.m_impl_up->SetObjectSP(interp->GetInterpreterInfo());
693*bbef51ebSLawrence D'Anna     }
694*bbef51ebSLawrence D'Anna   }
695*bbef51ebSLawrence D'Anna   return LLDB_RECORD_RESULT(data);
696*bbef51ebSLawrence D'Anna }
697*bbef51ebSLawrence D'Anna 
698b9c1b51eSKate Stone const char *SBDebugger::GetVersionString() {
699baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(const char *, SBDebugger, GetVersionString);
700baf5664fSJonas Devlieghere 
701b2f1fb29SVirgile Bello   return lldb_private::GetVersion();
70230fdc8d8SChris Lattner }
70330fdc8d8SChris Lattner 
704b9c1b51eSKate Stone const char *SBDebugger::StateAsCString(StateType state) {
705baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(const char *, SBDebugger, StateAsCString,
706baf5664fSJonas Devlieghere                             (lldb::StateType), state);
707baf5664fSJonas Devlieghere 
708c2bbb49aSCaroline Tice   return lldb_private::StateAsCString(state);
70930fdc8d8SChris Lattner }
71030fdc8d8SChris Lattner 
711f1389e92SPavel Labath static void AddBoolConfigEntry(StructuredData::Dictionary &dict,
712f1389e92SPavel Labath                                llvm::StringRef name, bool value,
713f1389e92SPavel Labath                                llvm::StringRef description) {
714a8f3ae7cSJonas Devlieghere   auto entry_up = std::make_unique<StructuredData::Dictionary>();
715f1389e92SPavel Labath   entry_up->AddBooleanItem("value", value);
716f1389e92SPavel Labath   entry_up->AddStringItem("description", description);
717f1389e92SPavel Labath   dict.AddItem(name, std::move(entry_up));
718f1389e92SPavel Labath }
719f1389e92SPavel Labath 
720abc0c6adSPavel Labath static void AddLLVMTargets(StructuredData::Dictionary &dict) {
721a8f3ae7cSJonas Devlieghere   auto array_up = std::make_unique<StructuredData::Array>();
722abc0c6adSPavel Labath #define LLVM_TARGET(target)                                                    \
723a8f3ae7cSJonas Devlieghere   array_up->AddItem(std::make_unique<StructuredData::String>(#target));
724abc0c6adSPavel Labath #include "llvm/Config/Targets.def"
725a8f3ae7cSJonas Devlieghere   auto entry_up = std::make_unique<StructuredData::Dictionary>();
726abc0c6adSPavel Labath   entry_up->AddItem("value", std::move(array_up));
727abc0c6adSPavel Labath   entry_up->AddStringItem("description", "A list of configured LLVM targets.");
728abc0c6adSPavel Labath   dict.AddItem("targets", std::move(entry_up));
729abc0c6adSPavel Labath }
730abc0c6adSPavel Labath 
731f1389e92SPavel Labath SBStructuredData SBDebugger::GetBuildConfiguration() {
732baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBStructuredData, SBDebugger,
733baf5664fSJonas Devlieghere                                     GetBuildConfiguration);
734baf5664fSJonas Devlieghere 
735a8f3ae7cSJonas Devlieghere   auto config_up = std::make_unique<StructuredData::Dictionary>();
736f1389e92SPavel Labath   AddBoolConfigEntry(
737f1389e92SPavel Labath       *config_up, "xml", XMLDocument::XMLEnabled(),
738f1389e92SPavel Labath       "A boolean value that indicates if XML support is enabled in LLDB");
739eafede2aSPavel Labath   AddBoolConfigEntry(
740a4304f96SJonas Devlieghere       *config_up, "curses", LLDB_ENABLE_CURSES,
741eafede2aSPavel Labath       "A boolean value that indicates if curses support is enabled in LLDB");
7426cc3ee17SJonas Devlieghere   AddBoolConfigEntry(
7436cc3ee17SJonas Devlieghere       *config_up, "editline", LLDB_ENABLE_LIBEDIT,
7446cc3ee17SJonas Devlieghere       "A boolean value that indicates if editline support is enabled in LLDB");
7456cc3ee17SJonas Devlieghere   AddBoolConfigEntry(
7466cc3ee17SJonas Devlieghere       *config_up, "lzma", LLDB_ENABLE_LZMA,
7476cc3ee17SJonas Devlieghere       "A boolean value that indicates if lzma support is enabled in LLDB");
7486cc3ee17SJonas Devlieghere   AddBoolConfigEntry(
7496cc3ee17SJonas Devlieghere       *config_up, "python", LLDB_ENABLE_PYTHON,
7506cc3ee17SJonas Devlieghere       "A boolean value that indicates if python support is enabled in LLDB");
7516cc3ee17SJonas Devlieghere   AddBoolConfigEntry(
7526cc3ee17SJonas Devlieghere       *config_up, "lua", LLDB_ENABLE_LUA,
7536cc3ee17SJonas Devlieghere       "A boolean value that indicates if lua support is enabled in LLDB");
754abc0c6adSPavel Labath   AddLLVMTargets(*config_up);
755f1389e92SPavel Labath 
756f1389e92SPavel Labath   SBStructuredData data;
757f1389e92SPavel Labath   data.m_impl_up->SetObjectSP(std::move(config_up));
758baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(data);
759f1389e92SPavel Labath }
760f1389e92SPavel Labath 
761b9c1b51eSKate Stone bool SBDebugger::StateIsRunningState(StateType state) {
762baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsRunningState,
763baf5664fSJonas Devlieghere                             (lldb::StateType), state);
764baf5664fSJonas Devlieghere 
765c2bbb49aSCaroline Tice   const bool result = lldb_private::StateIsRunningState(state);
7664838131bSGreg Clayton 
7674838131bSGreg Clayton   return result;
76830fdc8d8SChris Lattner }
76930fdc8d8SChris Lattner 
770b9c1b51eSKate Stone bool SBDebugger::StateIsStoppedState(StateType state) {
771baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState,
772baf5664fSJonas Devlieghere                             (lldb::StateType), state);
773baf5664fSJonas Devlieghere 
7742637f825SGreg Clayton   const bool result = lldb_private::StateIsStoppedState(state, false);
775ceb6b139SCaroline Tice 
7764838131bSGreg Clayton   return result;
77730fdc8d8SChris Lattner }
77830fdc8d8SChris Lattner 
779b9c1b51eSKate Stone lldb::SBTarget SBDebugger::CreateTarget(const char *filename,
780cac9c5f9SGreg Clayton                                         const char *target_triple,
781cac9c5f9SGreg Clayton                                         const char *platform_name,
782cac9c5f9SGreg Clayton                                         bool add_dependent_modules,
783b9c1b51eSKate Stone                                         lldb::SBError &sb_error) {
784baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
785baf5664fSJonas Devlieghere       lldb::SBTarget, SBDebugger, CreateTarget,
786baf5664fSJonas Devlieghere       (const char *, const char *, const char *, bool, lldb::SBError &),
787baf5664fSJonas Devlieghere       filename, target_triple, platform_name, add_dependent_modules, sb_error);
788baf5664fSJonas Devlieghere 
789cac9c5f9SGreg Clayton   SBTarget sb_target;
790b9556accSGreg Clayton   TargetSP target_sp;
791b9c1b51eSKate Stone   if (m_opaque_sp) {
792cac9c5f9SGreg Clayton     sb_error.Clear();
793cac9c5f9SGreg Clayton     OptionGroupPlatform platform_options(false);
794cac9c5f9SGreg Clayton     platform_options.SetPlatformName(platform_name);
795cac9c5f9SGreg Clayton 
796b9c1b51eSKate Stone     sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget(
797f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, target_triple,
798f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo,
799b9c1b51eSKate Stone         &platform_options, target_sp);
800cac9c5f9SGreg Clayton 
801cac9c5f9SGreg Clayton     if (sb_error.Success())
802b9556accSGreg Clayton       sb_target.SetSP(target_sp);
803b9c1b51eSKate Stone   } else {
8049f521f22SJim Ingham     sb_error.SetErrorString("invalid debugger");
805cac9c5f9SGreg Clayton   }
806cac9c5f9SGreg Clayton 
8075160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
80863e5fb76SJonas Devlieghere   LLDB_LOGF(log,
80963e5fb76SJonas Devlieghere             "SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, "
810b9c1b51eSKate Stone             "platform_name=%s, add_dependent_modules=%u, error=%s) => "
811b9c1b51eSKate Stone             "SBTarget(%p)",
812b9c1b51eSKate Stone             static_cast<void *>(m_opaque_sp.get()), filename, target_triple,
813b9c1b51eSKate Stone             platform_name, add_dependent_modules, sb_error.GetCString(),
814b9c1b51eSKate Stone             static_cast<void *>(target_sp.get()));
815cac9c5f9SGreg Clayton 
816baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
817cac9c5f9SGreg Clayton }
81830fdc8d8SChris Lattner 
81930fdc8d8SChris Lattner SBTarget
82030fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple(const char *filename,
821b9c1b51eSKate Stone                                                 const char *target_triple) {
822baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger,
823baf5664fSJonas Devlieghere                      CreateTargetWithFileAndTargetTriple,
824baf5664fSJonas Devlieghere                      (const char *, const char *), filename, target_triple);
825baf5664fSJonas Devlieghere 
826b9556accSGreg Clayton   SBTarget sb_target;
827b9556accSGreg Clayton   TargetSP target_sp;
828b9c1b51eSKate Stone   if (m_opaque_sp) {
829cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
83097206d57SZachary Turner     Status error(m_opaque_sp->GetTargetList().CreateTarget(
831f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, target_triple,
832f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
833cac9c5f9SGreg Clayton         target_sp));
834b9556accSGreg Clayton     sb_target.SetSP(target_sp);
8356611103cSGreg Clayton   }
8364838131bSGreg Clayton 
8375160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
83863e5fb76SJonas Devlieghere   LLDB_LOGF(log,
83963e5fb76SJonas Devlieghere             "SBDebugger(%p)::CreateTargetWithFileAndTargetTriple "
840b9c1b51eSKate Stone             "(filename=\"%s\", triple=%s) => SBTarget(%p)",
841b9c1b51eSKate Stone             static_cast<void *>(m_opaque_sp.get()), filename, target_triple,
842b9c1b51eSKate Stone             static_cast<void *>(target_sp.get()));
8434838131bSGreg Clayton 
844baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
84530fdc8d8SChris Lattner }
84630fdc8d8SChris Lattner 
847b9c1b51eSKate Stone SBTarget SBDebugger::CreateTargetWithFileAndArch(const char *filename,
848b9c1b51eSKate Stone                                                  const char *arch_cstr) {
849baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTargetWithFileAndArch,
850baf5664fSJonas Devlieghere                      (const char *, const char *), filename, arch_cstr);
851baf5664fSJonas Devlieghere 
8525160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
853ceb6b139SCaroline Tice 
854b9556accSGreg Clayton   SBTarget sb_target;
855b9556accSGreg Clayton   TargetSP target_sp;
856b9c1b51eSKate Stone   if (m_opaque_sp) {
85797206d57SZachary Turner     Status error;
8587636b1f6SJim Ingham     if (arch_cstr == nullptr) {
8597636b1f6SJim Ingham       // The version of CreateTarget that takes an ArchSpec won't accept an
8607636b1f6SJim Ingham       // empty ArchSpec, so when the arch hasn't been specified, we need to
8617636b1f6SJim Ingham       // call the target triple version.
8627636b1f6SJim Ingham       error = m_opaque_sp->GetTargetList().CreateTarget(*m_opaque_sp, filename,
8637636b1f6SJim Ingham           arch_cstr, eLoadDependentsYes, nullptr, target_sp);
8647636b1f6SJim Ingham     } else {
8657636b1f6SJim Ingham       PlatformSP platform_sp = m_opaque_sp->GetPlatformList()
8667636b1f6SJim Ingham           .GetSelectedPlatform();
8677636b1f6SJim Ingham       ArchSpec arch = Platform::GetAugmentedArchSpec(platform_sp.get(),
8687636b1f6SJim Ingham           arch_cstr);
8697636b1f6SJim Ingham       if (arch.IsValid())
8707636b1f6SJim Ingham         error = m_opaque_sp->GetTargetList().CreateTarget(*m_opaque_sp, filename,
8717636b1f6SJim Ingham             arch, eLoadDependentsYes, platform_sp, target_sp);
8727636b1f6SJim Ingham       else
8737636b1f6SJim Ingham         error.SetErrorStringWithFormat("invalid arch_cstr: %s", arch_cstr);
8747636b1f6SJim Ingham     }
8752634ec6cSTatyana Krasnukha     if (error.Success())
876b9556accSGreg Clayton       sb_target.SetSP(target_sp);
8776611103cSGreg Clayton   }
878ceb6b139SCaroline Tice 
87963e5fb76SJonas Devlieghere   LLDB_LOGF(log,
88063e5fb76SJonas Devlieghere             "SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", "
881b9c1b51eSKate Stone             "arch=%s) => SBTarget(%p)",
8827636b1f6SJim Ingham             static_cast<void *>(m_opaque_sp.get()),
8837636b1f6SJim Ingham             filename ? filename : "<unspecified>",
8847636b1f6SJim Ingham             arch_cstr ? arch_cstr : "<unspecified>",
885324a1036SSaleem Abdulrasool             static_cast<void *>(target_sp.get()));
886ceb6b139SCaroline Tice 
887baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
88830fdc8d8SChris Lattner }
88930fdc8d8SChris Lattner 
890b9c1b51eSKate Stone SBTarget SBDebugger::CreateTarget(const char *filename) {
891baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTarget, (const char *),
892baf5664fSJonas Devlieghere                      filename);
893baf5664fSJonas Devlieghere 
894b9556accSGreg Clayton   SBTarget sb_target;
895b9556accSGreg Clayton   TargetSP target_sp;
896b9c1b51eSKate Stone   if (m_opaque_sp) {
89797206d57SZachary Turner     Status error;
898cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
899b9c1b51eSKate Stone     error = m_opaque_sp->GetTargetList().CreateTarget(
900f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, "",
901f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
902f9a07e9fSJonas Devlieghere         target_sp);
90330fdc8d8SChris Lattner 
9042634ec6cSTatyana Krasnukha     if (error.Success())
905b9556accSGreg Clayton       sb_target.SetSP(target_sp);
9066611103cSGreg Clayton   }
9075160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
90863e5fb76SJonas Devlieghere   LLDB_LOGF(log,
909b9c1b51eSKate Stone             "SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
910324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()), filename,
911324a1036SSaleem Abdulrasool             static_cast<void *>(target_sp.get()));
912baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
91330fdc8d8SChris Lattner }
91430fdc8d8SChris Lattner 
915b842f2ecSJim Ingham SBTarget SBDebugger::GetDummyTarget() {
916baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetDummyTarget);
917baf5664fSJonas Devlieghere 
918b842f2ecSJim Ingham   SBTarget sb_target;
919b842f2ecSJim Ingham   if (m_opaque_sp) {
920b2fa3b92SJonas Devlieghere     sb_target.SetSP(m_opaque_sp->GetDummyTarget().shared_from_this());
921b842f2ecSJim Ingham   }
922b842f2ecSJim Ingham   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
92363e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::GetDummyTarget() => SBTarget(%p)",
924b842f2ecSJim Ingham             static_cast<void *>(m_opaque_sp.get()),
925b842f2ecSJim Ingham             static_cast<void *>(sb_target.GetSP().get()));
926baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
927b842f2ecSJim Ingham }
928b842f2ecSJim Ingham 
929b9c1b51eSKate Stone bool SBDebugger::DeleteTarget(lldb::SBTarget &target) {
930baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &),
931baf5664fSJonas Devlieghere                      target);
932baf5664fSJonas Devlieghere 
9333794ad95SJohnny Chen   bool result = false;
934b9c1b51eSKate Stone   if (m_opaque_sp) {
935b9556accSGreg Clayton     TargetSP target_sp(target.GetSP());
936b9c1b51eSKate Stone     if (target_sp) {
9373794ad95SJohnny Chen       // No need to lock, the target list is thread safe
938b9556accSGreg Clayton       result = m_opaque_sp->GetTargetList().DeleteTarget(target_sp);
939b9556accSGreg Clayton       target_sp->Destroy();
94075340622SGreg Clayton       target.Clear();
9413794ad95SJohnny Chen     }
942b9556accSGreg Clayton   }
9433794ad95SJohnny Chen 
9445160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
94563e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i",
946324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
947324a1036SSaleem Abdulrasool             static_cast<void *>(target.m_opaque_sp.get()), result);
9483794ad95SJohnny Chen 
9493794ad95SJohnny Chen   return result;
9503794ad95SJohnny Chen }
951dbb0abbfSEugene Zelenko 
952b9c1b51eSKate Stone SBTarget SBDebugger::GetTargetAtIndex(uint32_t idx) {
953baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex, (uint32_t),
954baf5664fSJonas Devlieghere                      idx);
955baf5664fSJonas Devlieghere 
9566611103cSGreg Clayton   SBTarget sb_target;
957b9c1b51eSKate Stone   if (m_opaque_sp) {
958af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
959b9556accSGreg Clayton     sb_target.SetSP(m_opaque_sp->GetTargetList().GetTargetAtIndex(idx));
960af67cecdSGreg Clayton   }
961baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
96230fdc8d8SChris Lattner }
96330fdc8d8SChris Lattner 
964b9c1b51eSKate Stone uint32_t SBDebugger::GetIndexOfTarget(lldb::SBTarget target) {
965baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBDebugger, GetIndexOfTarget, (lldb::SBTarget),
966baf5664fSJonas Devlieghere                      target);
9678499e1a4SJim Ingham 
9688499e1a4SJim Ingham   lldb::TargetSP target_sp = target.GetSP();
9698499e1a4SJim Ingham   if (!target_sp)
9708499e1a4SJim Ingham     return UINT32_MAX;
9718499e1a4SJim Ingham 
9728499e1a4SJim Ingham   if (!m_opaque_sp)
9738499e1a4SJim Ingham     return UINT32_MAX;
9748499e1a4SJim Ingham 
9758499e1a4SJim Ingham   return m_opaque_sp->GetTargetList().GetIndexOfTarget(target.GetSP());
9768499e1a4SJim Ingham }
9778499e1a4SJim Ingham 
978b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithProcessID(lldb::pid_t pid) {
979baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID,
980baf5664fSJonas Devlieghere                      (lldb::pid_t), pid);
981baf5664fSJonas Devlieghere 
9826611103cSGreg Clayton   SBTarget sb_target;
983b9c1b51eSKate Stone   if (m_opaque_sp) {
984af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
985b9556accSGreg Clayton     sb_target.SetSP(m_opaque_sp->GetTargetList().FindTargetWithProcessID(pid));
986af67cecdSGreg Clayton   }
987baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
98830fdc8d8SChris Lattner }
98930fdc8d8SChris Lattner 
990b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithFileAndArch(const char *filename,
991b9c1b51eSKate Stone                                                const char *arch_name) {
992baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch,
993baf5664fSJonas Devlieghere                      (const char *, const char *), filename, arch_name);
994baf5664fSJonas Devlieghere 
9956611103cSGreg Clayton   SBTarget sb_target;
996b9c1b51eSKate Stone   if (m_opaque_sp && filename && filename[0]) {
997af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
9987263f1bdSPavel Labath     ArchSpec arch = Platform::GetAugmentedArchSpec(
9997263f1bdSPavel Labath         m_opaque_sp->GetPlatformList().GetSelectedPlatform().get(), arch_name);
1000b9c1b51eSKate Stone     TargetSP target_sp(
1001b9c1b51eSKate Stone         m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture(
10028f3be7a3SJonas Devlieghere             FileSpec(filename), arch_name ? &arch : nullptr));
1003b9556accSGreg Clayton     sb_target.SetSP(target_sp);
10046611103cSGreg Clayton   }
1005baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
100630fdc8d8SChris Lattner }
100730fdc8d8SChris Lattner 
1008b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithLLDBProcess(const ProcessSP &process_sp) {
10096611103cSGreg Clayton   SBTarget sb_target;
1010b9c1b51eSKate Stone   if (m_opaque_sp) {
1011af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
1012b9c1b51eSKate Stone     sb_target.SetSP(
1013b9c1b51eSKate Stone         m_opaque_sp->GetTargetList().FindTargetWithProcess(process_sp.get()));
1014af67cecdSGreg Clayton   }
101530fdc8d8SChris Lattner   return sb_target;
101630fdc8d8SChris Lattner }
101730fdc8d8SChris Lattner 
1018b9c1b51eSKate Stone uint32_t SBDebugger::GetNumTargets() {
1019baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumTargets);
1020baf5664fSJonas Devlieghere 
1021b9c1b51eSKate Stone   if (m_opaque_sp) {
1022af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
10236611103cSGreg Clayton     return m_opaque_sp->GetTargetList().GetNumTargets();
1024af67cecdSGreg Clayton   }
10256611103cSGreg Clayton   return 0;
10266611103cSGreg Clayton }
102730fdc8d8SChris Lattner 
1028b9c1b51eSKate Stone SBTarget SBDebugger::GetSelectedTarget() {
1029baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetSelectedTarget);
1030baf5664fSJonas Devlieghere 
10315160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1032ceb6b139SCaroline Tice 
10336611103cSGreg Clayton   SBTarget sb_target;
1034b9556accSGreg Clayton   TargetSP target_sp;
1035b9c1b51eSKate Stone   if (m_opaque_sp) {
1036af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
1037b9556accSGreg Clayton     target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget();
1038b9556accSGreg Clayton     sb_target.SetSP(target_sp);
1039af67cecdSGreg Clayton   }
1040ceb6b139SCaroline Tice 
1041b9c1b51eSKate Stone   if (log) {
1042ceb6b139SCaroline Tice     SBStream sstr;
1043431ce678SGreg Clayton     sb_target.GetDescription(sstr, eDescriptionLevelBrief);
104463e5fb76SJonas Devlieghere     LLDB_LOGF(log, "SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s",
1045324a1036SSaleem Abdulrasool               static_cast<void *>(m_opaque_sp.get()),
1046324a1036SSaleem Abdulrasool               static_cast<void *>(target_sp.get()), sstr.GetData());
1047ceb6b139SCaroline Tice   }
1048ceb6b139SCaroline Tice 
1049baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
105030fdc8d8SChris Lattner }
105130fdc8d8SChris Lattner 
1052b9c1b51eSKate Stone void SBDebugger::SetSelectedTarget(SBTarget &sb_target) {
1053baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedTarget, (lldb::SBTarget &),
1054baf5664fSJonas Devlieghere                      sb_target);
1055baf5664fSJonas Devlieghere 
10565160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1057e64f0dc7SJim Ingham 
1058b9556accSGreg Clayton   TargetSP target_sp(sb_target.GetSP());
1059b9c1b51eSKate Stone   if (m_opaque_sp) {
10602634ec6cSTatyana Krasnukha     m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp);
1061e64f0dc7SJim Ingham   }
1062b9c1b51eSKate Stone   if (log) {
1063e64f0dc7SJim Ingham     SBStream sstr;
1064e64f0dc7SJim Ingham     sb_target.GetDescription(sstr, eDescriptionLevelBrief);
106563e5fb76SJonas Devlieghere     LLDB_LOGF(log, "SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s",
1066324a1036SSaleem Abdulrasool               static_cast<void *>(m_opaque_sp.get()),
1067324a1036SSaleem Abdulrasool               static_cast<void *>(target_sp.get()), sstr.GetData());
1068e64f0dc7SJim Ingham   }
1069e64f0dc7SJim Ingham }
1070e64f0dc7SJim Ingham 
1071b9c1b51eSKate Stone SBPlatform SBDebugger::GetSelectedPlatform() {
1072baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBPlatform, SBDebugger, GetSelectedPlatform);
1073baf5664fSJonas Devlieghere 
1074fbb76349SGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1075fbb76349SGreg Clayton 
1076fbb76349SGreg Clayton   SBPlatform sb_platform;
1077fbb76349SGreg Clayton   DebuggerSP debugger_sp(m_opaque_sp);
1078b9c1b51eSKate Stone   if (debugger_sp) {
1079fbb76349SGreg Clayton     sb_platform.SetSP(debugger_sp->GetPlatformList().GetSelectedPlatform());
1080fbb76349SGreg Clayton   }
108163e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::GetSelectedPlatform () => SBPlatform(%p): %s",
1082324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
1083324a1036SSaleem Abdulrasool             static_cast<void *>(sb_platform.GetSP().get()),
1084324a1036SSaleem Abdulrasool             sb_platform.GetName());
1085baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_platform);
1086fbb76349SGreg Clayton }
1087fbb76349SGreg Clayton 
1088b9c1b51eSKate Stone void SBDebugger::SetSelectedPlatform(SBPlatform &sb_platform) {
1089baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedPlatform,
1090baf5664fSJonas Devlieghere                      (lldb::SBPlatform &), sb_platform);
1091baf5664fSJonas Devlieghere 
1092fbb76349SGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1093fbb76349SGreg Clayton 
1094fbb76349SGreg Clayton   DebuggerSP debugger_sp(m_opaque_sp);
1095b9c1b51eSKate Stone   if (debugger_sp) {
1096fbb76349SGreg Clayton     debugger_sp->GetPlatformList().SetSelectedPlatform(sb_platform.GetSP());
1097fbb76349SGreg Clayton   }
1098324a1036SSaleem Abdulrasool 
109963e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::SetSelectedPlatform (SBPlatform(%p) %s)",
1100324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
1101324a1036SSaleem Abdulrasool             static_cast<void *>(sb_platform.GetSP().get()),
1102324a1036SSaleem Abdulrasool             sb_platform.GetName());
1103fbb76349SGreg Clayton }
1104fbb76349SGreg Clayton 
1105c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumPlatforms() {
1106baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumPlatforms);
1107baf5664fSJonas Devlieghere 
1108c10e34d0SVadim Macagon   if (m_opaque_sp) {
1109c10e34d0SVadim Macagon     // No need to lock, the platform list is thread safe
1110c10e34d0SVadim Macagon     return m_opaque_sp->GetPlatformList().GetSize();
1111c10e34d0SVadim Macagon   }
1112c10e34d0SVadim Macagon   return 0;
1113c10e34d0SVadim Macagon }
1114c10e34d0SVadim Macagon 
1115c10e34d0SVadim Macagon SBPlatform SBDebugger::GetPlatformAtIndex(uint32_t idx) {
1116baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex,
1117baf5664fSJonas Devlieghere                      (uint32_t), idx);
1118baf5664fSJonas Devlieghere 
1119c10e34d0SVadim Macagon   SBPlatform sb_platform;
1120c10e34d0SVadim Macagon   if (m_opaque_sp) {
1121c10e34d0SVadim Macagon     // No need to lock, the platform list is thread safe
1122c10e34d0SVadim Macagon     sb_platform.SetSP(m_opaque_sp->GetPlatformList().GetAtIndex(idx));
1123c10e34d0SVadim Macagon   }
1124baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_platform);
1125c10e34d0SVadim Macagon }
1126c10e34d0SVadim Macagon 
1127c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumAvailablePlatforms() {
1128baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumAvailablePlatforms);
1129baf5664fSJonas Devlieghere 
1130c10e34d0SVadim Macagon   uint32_t idx = 0;
1131c10e34d0SVadim Macagon   while (true) {
1132a458ef4fSPavel Labath     if (PluginManager::GetPlatformPluginNameAtIndex(idx).empty()) {
1133c10e34d0SVadim Macagon       break;
1134c10e34d0SVadim Macagon     }
1135c10e34d0SVadim Macagon     ++idx;
1136c10e34d0SVadim Macagon   }
1137c10e34d0SVadim Macagon   // +1 for the host platform, which should always appear first in the list.
1138c10e34d0SVadim Macagon   return idx + 1;
1139c10e34d0SVadim Macagon }
1140c10e34d0SVadim Macagon 
1141c10e34d0SVadim Macagon SBStructuredData SBDebugger::GetAvailablePlatformInfoAtIndex(uint32_t idx) {
1142baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBStructuredData, SBDebugger,
1143baf5664fSJonas Devlieghere                      GetAvailablePlatformInfoAtIndex, (uint32_t), idx);
1144baf5664fSJonas Devlieghere 
1145c10e34d0SVadim Macagon   SBStructuredData data;
1146a8f3ae7cSJonas Devlieghere   auto platform_dict = std::make_unique<StructuredData::Dictionary>();
1147c10e34d0SVadim Macagon   llvm::StringRef name_str("name"), desc_str("description");
1148c10e34d0SVadim Macagon 
1149c10e34d0SVadim Macagon   if (idx == 0) {
1150c10e34d0SVadim Macagon     PlatformSP host_platform_sp(Platform::GetHostPlatform());
1151a3939e15SPavel Labath     platform_dict->AddStringItem(name_str, host_platform_sp->GetPluginName());
1152c10e34d0SVadim Macagon     platform_dict->AddStringItem(
1153c10e34d0SVadim Macagon         desc_str, llvm::StringRef(host_platform_sp->GetDescription()));
1154c10e34d0SVadim Macagon   } else if (idx > 0) {
1155a458ef4fSPavel Labath     llvm::StringRef plugin_name =
1156c10e34d0SVadim Macagon         PluginManager::GetPlatformPluginNameAtIndex(idx - 1);
1157a458ef4fSPavel Labath     if (plugin_name.empty()) {
1158baf5664fSJonas Devlieghere       return LLDB_RECORD_RESULT(data);
1159c10e34d0SVadim Macagon     }
1160c10e34d0SVadim Macagon     platform_dict->AddStringItem(name_str, llvm::StringRef(plugin_name));
1161c10e34d0SVadim Macagon 
1162a458ef4fSPavel Labath     llvm::StringRef plugin_desc =
1163c10e34d0SVadim Macagon         PluginManager::GetPlatformPluginDescriptionAtIndex(idx - 1);
1164c10e34d0SVadim Macagon     platform_dict->AddStringItem(desc_str, llvm::StringRef(plugin_desc));
1165c10e34d0SVadim Macagon   }
1166c10e34d0SVadim Macagon 
1167c10e34d0SVadim Macagon   data.m_impl_up->SetObjectSP(
1168c10e34d0SVadim Macagon       StructuredData::ObjectSP(platform_dict.release()));
1169baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(data);
1170c10e34d0SVadim Macagon }
1171c10e34d0SVadim Macagon 
1172b9c1b51eSKate Stone void SBDebugger::DispatchInput(void *baton, const void *data, size_t data_len) {
11730d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput,
11740d7b0c96SJonas Devlieghere                     (void *, const void *, size_t), baton, data, data_len);
11750d7b0c96SJonas Devlieghere 
11766b09d423SEnrico Granata   DispatchInput(data, data_len);
11776b09d423SEnrico Granata }
11786b09d423SEnrico Granata 
1179b9c1b51eSKate Stone void SBDebugger::DispatchInput(const void *data, size_t data_len) {
11800d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput, (const void *, size_t),
11810d7b0c96SJonas Devlieghere                     data, data_len);
11820d7b0c96SJonas Devlieghere 
118344d93782SGreg Clayton   //    Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
118444d93782SGreg Clayton   //
118544d93782SGreg Clayton   //    if (log)
118663e5fb76SJonas Devlieghere   //        LLDB_LOGF(log, "SBDebugger(%p)::DispatchInput (data=\"%.*s\",
1187b9c1b51eSKate Stone   //        size_t=%" PRIu64 ")",
118844d93782SGreg Clayton   //                     m_opaque_sp.get(),
118944d93782SGreg Clayton   //                     (int) data_len,
119044d93782SGreg Clayton   //                     (const char *) data,
119144d93782SGreg Clayton   //                     (uint64_t)data_len);
119244d93782SGreg Clayton   //
119344d93782SGreg Clayton   //    if (m_opaque_sp)
119444d93782SGreg Clayton   //        m_opaque_sp->DispatchInput ((const char *) data, data_len);
119530fdc8d8SChris Lattner }
119630fdc8d8SChris Lattner 
1197b9c1b51eSKate Stone void SBDebugger::DispatchInputInterrupt() {
1198b328dcbfSJonas Devlieghere   LLDB_RECORD_DUMMY_NO_ARGS(void, SBDebugger, DispatchInputInterrupt);
1199baf5664fSJonas Devlieghere 
1200efed6131SCaroline Tice   if (m_opaque_sp)
1201efed6131SCaroline Tice     m_opaque_sp->DispatchInputInterrupt();
1202efed6131SCaroline Tice }
1203efed6131SCaroline Tice 
1204b9c1b51eSKate Stone void SBDebugger::DispatchInputEndOfFile() {
1205baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, DispatchInputEndOfFile);
1206baf5664fSJonas Devlieghere 
1207efed6131SCaroline Tice   if (m_opaque_sp)
1208efed6131SCaroline Tice     m_opaque_sp->DispatchInputEndOfFile();
1209efed6131SCaroline Tice }
12109088b068SCaroline Tice 
1211baf5664fSJonas Devlieghere void SBDebugger::PushInputReader(SBInputReader &reader) {
1212baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, PushInputReader, (lldb::SBInputReader &),
1213baf5664fSJonas Devlieghere                      reader);
1214baf5664fSJonas Devlieghere }
12156611103cSGreg Clayton 
1216b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events,
1217b9c1b51eSKate Stone                                        bool spawn_thread) {
1218baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool),
1219baf5664fSJonas Devlieghere                      auto_handle_events, spawn_thread);
1220baf5664fSJonas Devlieghere 
1221b9c1b51eSKate Stone   if (m_opaque_sp) {
122226c7bf93SJim Ingham     CommandInterpreterRunOptions options;
122332c32246SJonas Devlieghere     options.SetAutoHandleEvents(auto_handle_events);
122432c32246SJonas Devlieghere     options.SetSpawnThread(spawn_thread);
122532c32246SJonas Devlieghere     m_opaque_sp->GetCommandInterpreter().RunCommandInterpreter(options);
122626c7bf93SJim Ingham   }
122726c7bf93SJim Ingham }
122826c7bf93SJim Ingham 
1229b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events,
123026c7bf93SJim Ingham                                        bool spawn_thread,
123126c7bf93SJim Ingham                                        SBCommandInterpreterRunOptions &options,
1232b9c1b51eSKate Stone                                        int &num_errors, bool &quit_requested,
1233ffc9f1deSJim Ingham                                        bool &stopped_for_crash)
123426c7bf93SJim Ingham 
123526c7bf93SJim Ingham {
1236baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter,
1237baf5664fSJonas Devlieghere                      (bool, bool, lldb::SBCommandInterpreterRunOptions &, int &,
1238baf5664fSJonas Devlieghere                       bool &, bool &),
1239baf5664fSJonas Devlieghere                      auto_handle_events, spawn_thread, options, num_errors,
1240baf5664fSJonas Devlieghere                      quit_requested, stopped_for_crash);
1241baf5664fSJonas Devlieghere 
1242b9c1b51eSKate Stone   if (m_opaque_sp) {
124332c32246SJonas Devlieghere     options.SetAutoHandleEvents(auto_handle_events);
124432c32246SJonas Devlieghere     options.SetSpawnThread(spawn_thread);
124526c7bf93SJim Ingham     CommandInterpreter &interp = m_opaque_sp->GetCommandInterpreter();
12461bff0928SJonas Devlieghere     CommandInterpreterRunResult result =
124732c32246SJonas Devlieghere         interp.RunCommandInterpreter(options.ref());
12481bff0928SJonas Devlieghere     num_errors = result.GetNumErrors();
12491bff0928SJonas Devlieghere     quit_requested =
12501bff0928SJonas Devlieghere         result.IsResult(lldb::eCommandInterpreterResultQuitRequested);
12511bff0928SJonas Devlieghere     stopped_for_crash =
12521bff0928SJonas Devlieghere         result.IsResult(lldb::eCommandInterpreterResultInferiorCrash);
125326c7bf93SJim Ingham   }
1254969ed3d1SCaroline Tice }
1255969ed3d1SCaroline Tice 
12564c67b119SJonas Devlieghere SBCommandInterpreterRunResult SBDebugger::RunCommandInterpreter(
12574c67b119SJonas Devlieghere     const SBCommandInterpreterRunOptions &options) {
12584c67b119SJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBCommandInterpreterRunResult, SBDebugger,
12594c67b119SJonas Devlieghere                      RunCommandInterpreter,
12604c67b119SJonas Devlieghere                      (const lldb::SBCommandInterpreterRunOptions &), options);
12614c67b119SJonas Devlieghere 
12624c67b119SJonas Devlieghere   if (!m_opaque_sp)
12634c67b119SJonas Devlieghere     return LLDB_RECORD_RESULT(SBCommandInterpreterRunResult());
12644c67b119SJonas Devlieghere 
12654c67b119SJonas Devlieghere   CommandInterpreter &interp = m_opaque_sp->GetCommandInterpreter();
12664c67b119SJonas Devlieghere   CommandInterpreterRunResult result =
12674c67b119SJonas Devlieghere       interp.RunCommandInterpreter(options.ref());
12684c67b119SJonas Devlieghere 
12694c67b119SJonas Devlieghere   return LLDB_RECORD_RESULT(SBCommandInterpreterRunResult(result));
12704c67b119SJonas Devlieghere }
12714c67b119SJonas Devlieghere 
1272b9c1b51eSKate Stone SBError SBDebugger::RunREPL(lldb::LanguageType language,
1273b9c1b51eSKate Stone                             const char *repl_options) {
1274baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, RunREPL,
1275baf5664fSJonas Devlieghere                      (lldb::LanguageType, const char *), language,
1276baf5664fSJonas Devlieghere                      repl_options);
1277baf5664fSJonas Devlieghere 
12783e7e915dSSean Callanan   SBError error;
12793e7e915dSSean Callanan   if (m_opaque_sp)
12803e7e915dSSean Callanan     error.ref() = m_opaque_sp->RunREPL(language, repl_options);
12813e7e915dSSean Callanan   else
12823e7e915dSSean Callanan     error.SetErrorString("invalid debugger");
1283baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(error);
12843e7e915dSSean Callanan }
12853e7e915dSSean Callanan 
1286b9c1b51eSKate Stone void SBDebugger::reset(const DebuggerSP &debugger_sp) {
12876611103cSGreg Clayton   m_opaque_sp = debugger_sp;
12886611103cSGreg Clayton }
12896611103cSGreg Clayton 
1290b9c1b51eSKate Stone Debugger *SBDebugger::get() const { return m_opaque_sp.get(); }
12916611103cSGreg Clayton 
1292b9c1b51eSKate Stone Debugger &SBDebugger::ref() const {
12936611103cSGreg Clayton   assert(m_opaque_sp.get());
12946611103cSGreg Clayton   return *m_opaque_sp;
12956611103cSGreg Clayton }
12966611103cSGreg Clayton 
1297b9c1b51eSKate Stone const lldb::DebuggerSP &SBDebugger::get_sp() const { return m_opaque_sp; }
12986611103cSGreg Clayton 
1299b9c1b51eSKate Stone SBDebugger SBDebugger::FindDebuggerWithID(int id) {
1300baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, FindDebuggerWithID,
1301baf5664fSJonas Devlieghere                             (int), id);
1302baf5664fSJonas Devlieghere 
1303af67cecdSGreg Clayton   // No need to lock, the debugger list is thread safe
1304ebc1bb27SCaroline Tice   SBDebugger sb_debugger;
1305431ce678SGreg Clayton   DebuggerSP debugger_sp = Debugger::FindDebuggerWithID(id);
1306ebc1bb27SCaroline Tice   if (debugger_sp)
1307ebc1bb27SCaroline Tice     sb_debugger.reset(debugger_sp);
1308baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_debugger);
1309ebc1bb27SCaroline Tice }
1310e40e4218SJim Ingham 
1311b9c1b51eSKate Stone const char *SBDebugger::GetInstanceName() {
1312baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBDebugger, GetInstanceName);
1313baf5664fSJonas Devlieghere 
1314dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetInstanceName().AsCString() : nullptr);
1315dd759857SCaroline Tice }
1316dd759857SCaroline Tice 
1317b9c1b51eSKate Stone SBError SBDebugger::SetInternalVariable(const char *var_name, const char *value,
1318b9c1b51eSKate Stone                                         const char *debugger_instance_name) {
1319baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable,
1320baf5664fSJonas Devlieghere                             (const char *, const char *, const char *),
1321baf5664fSJonas Devlieghere                             var_name, value, debugger_instance_name);
1322baf5664fSJonas Devlieghere 
13236920b52bSGreg Clayton   SBError sb_error;
1324b9c1b51eSKate Stone   DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName(
1325b9c1b51eSKate Stone       ConstString(debugger_instance_name)));
132697206d57SZachary Turner   Status error;
1327b9c1b51eSKate Stone   if (debugger_sp) {
13280f2be195SRaphael Isemann     ExecutionContext exe_ctx(
13290f2be195SRaphael Isemann         debugger_sp->GetCommandInterpreter().GetExecutionContext());
1330b9c1b51eSKate Stone     error = debugger_sp->SetPropertyValue(&exe_ctx, eVarSetOperationAssign,
1331b9c1b51eSKate Stone                                           var_name, value);
1332b9c1b51eSKate Stone   } else {
1333b9c1b51eSKate Stone     error.SetErrorStringWithFormat("invalid debugger instance name '%s'",
1334b9c1b51eSKate Stone                                    debugger_instance_name);
13356920b52bSGreg Clayton   }
13366920b52bSGreg Clayton   if (error.Fail())
13376920b52bSGreg Clayton     sb_error.SetError(error);
1338baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
13393df9a8dfSCaroline Tice }
13403df9a8dfSCaroline Tice 
1341431ce678SGreg Clayton SBStringList
1342b9c1b51eSKate Stone SBDebugger::GetInternalVariableValue(const char *var_name,
1343b9c1b51eSKate Stone                                      const char *debugger_instance_name) {
1344baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(
1345baf5664fSJonas Devlieghere       lldb::SBStringList, SBDebugger, GetInternalVariableValue,
1346baf5664fSJonas Devlieghere       (const char *, const char *), var_name, debugger_instance_name);
1347baf5664fSJonas Devlieghere 
1348b9c1b51eSKate Stone   DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName(
1349b9c1b51eSKate Stone       ConstString(debugger_instance_name)));
135097206d57SZachary Turner   Status error;
1351b9c1b51eSKate Stone   if (debugger_sp) {
13520f2be195SRaphael Isemann     ExecutionContext exe_ctx(
13530f2be195SRaphael Isemann         debugger_sp->GetCommandInterpreter().GetExecutionContext());
1354b9c1b51eSKate Stone     lldb::OptionValueSP value_sp(
1355b9c1b51eSKate Stone         debugger_sp->GetPropertyValue(&exe_ctx, var_name, false, error));
1356b9c1b51eSKate Stone     if (value_sp) {
13576920b52bSGreg Clayton       StreamString value_strm;
13586920b52bSGreg Clayton       value_sp->DumpValue(&exe_ctx, value_strm, OptionValue::eDumpOptionValue);
1359adcd0268SBenjamin Kramer       const std::string &value_str = std::string(value_strm.GetString());
1360b9c1b51eSKate Stone       if (!value_str.empty()) {
13616920b52bSGreg Clayton         StringList string_list;
136244d93782SGreg Clayton         string_list.SplitIntoLines(value_str);
1363baf5664fSJonas Devlieghere         return LLDB_RECORD_RESULT(SBStringList(&string_list));
13646920b52bSGreg Clayton       }
13656920b52bSGreg Clayton     }
13666920b52bSGreg Clayton   }
1367baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBStringList());
13683df9a8dfSCaroline Tice }
13693df9a8dfSCaroline Tice 
1370b9c1b51eSKate Stone uint32_t SBDebugger::GetTerminalWidth() const {
1371baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBDebugger, GetTerminalWidth);
1372baf5664fSJonas Devlieghere 
1373dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetTerminalWidth() : 0);
1374a7015092SGreg Clayton }
1375a7015092SGreg Clayton 
1376b9c1b51eSKate Stone void SBDebugger::SetTerminalWidth(uint32_t term_width) {
1377b328dcbfSJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, SetTerminalWidth, (uint32_t), term_width);
1378baf5664fSJonas Devlieghere 
1379a7015092SGreg Clayton   if (m_opaque_sp)
1380a7015092SGreg Clayton     m_opaque_sp->SetTerminalWidth(term_width);
1381a7015092SGreg Clayton }
1382a7015092SGreg Clayton 
1383b9c1b51eSKate Stone const char *SBDebugger::GetPrompt() const {
1384baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetPrompt);
1385baf5664fSJonas Devlieghere 
13865160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1387ceb6b139SCaroline Tice 
138863e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::GetPrompt () => \"%s\"",
1389324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
1390514d8cd8SZachary Turner             (m_opaque_sp ? m_opaque_sp->GetPrompt().str().c_str() : ""));
1391ceb6b139SCaroline Tice 
1392514d8cd8SZachary Turner   return (m_opaque_sp ? ConstString(m_opaque_sp->GetPrompt()).GetCString()
1393514d8cd8SZachary Turner                       : nullptr);
1394a7015092SGreg Clayton }
1395a7015092SGreg Clayton 
1396b9c1b51eSKate Stone void SBDebugger::SetPrompt(const char *prompt) {
1397baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetPrompt, (const char *), prompt);
1398baf5664fSJonas Devlieghere 
1399a7015092SGreg Clayton   if (m_opaque_sp)
1400bbea3610SRaphael Isemann     m_opaque_sp->SetPrompt(llvm::StringRef(prompt));
1401a7015092SGreg Clayton }
1402a7015092SGreg Clayton 
14039e046f02SJonas Devlieghere const char *SBDebugger::GetReproducerPath() const {
1404baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetReproducerPath);
1405baf5664fSJonas Devlieghere 
14069e046f02SJonas Devlieghere   return (m_opaque_sp
14079e046f02SJonas Devlieghere               ? ConstString(m_opaque_sp->GetReproducerPath()).GetCString()
14089e046f02SJonas Devlieghere               : nullptr);
14099e046f02SJonas Devlieghere }
14109e046f02SJonas Devlieghere 
1411b9c1b51eSKate Stone ScriptLanguage SBDebugger::GetScriptLanguage() const {
1412baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::ScriptLanguage, SBDebugger,
1413baf5664fSJonas Devlieghere                                    GetScriptLanguage);
1414baf5664fSJonas Devlieghere 
1415dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetScriptLanguage() : eScriptLanguageNone);
1416a7015092SGreg Clayton }
1417a7015092SGreg Clayton 
1418b9c1b51eSKate Stone void SBDebugger::SetScriptLanguage(ScriptLanguage script_lang) {
1419baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetScriptLanguage,
1420baf5664fSJonas Devlieghere                      (lldb::ScriptLanguage), script_lang);
1421baf5664fSJonas Devlieghere 
1422b9c1b51eSKate Stone   if (m_opaque_sp) {
1423a7015092SGreg Clayton     m_opaque_sp->SetScriptLanguage(script_lang);
1424a7015092SGreg Clayton   }
1425af67cecdSGreg Clayton }
1426a7015092SGreg Clayton 
1427b9c1b51eSKate Stone bool SBDebugger::SetUseExternalEditor(bool value) {
1428baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool), value);
1429baf5664fSJonas Devlieghere 
1430dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->SetUseExternalEditor(value) : false);
1431e40e4218SJim Ingham }
1432e40e4218SJim Ingham 
1433b9c1b51eSKate Stone bool SBDebugger::GetUseExternalEditor() {
1434baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetUseExternalEditor);
1435baf5664fSJonas Devlieghere 
1436dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetUseExternalEditor() : false);
1437e40e4218SJim Ingham }
1438e40e4218SJim Ingham 
1439b9c1b51eSKate Stone bool SBDebugger::SetUseColor(bool value) {
1440baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseColor, (bool), value);
1441baf5664fSJonas Devlieghere 
1442dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->SetUseColor(value) : false);
1443c3ce7f27SMichael Sartain }
1444c3ce7f27SMichael Sartain 
1445b9c1b51eSKate Stone bool SBDebugger::GetUseColor() const {
1446baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetUseColor);
1447baf5664fSJonas Devlieghere 
1448dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetUseColor() : false);
1449c3ce7f27SMichael Sartain }
1450c3ce7f27SMichael Sartain 
1451acae69d0SEmre Kultursay bool SBDebugger::SetUseSourceCache(bool value) {
1452acae69d0SEmre Kultursay   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseSourceCache, (bool), value);
1453acae69d0SEmre Kultursay 
1454acae69d0SEmre Kultursay   return (m_opaque_sp ? m_opaque_sp->SetUseSourceCache(value) : false);
1455acae69d0SEmre Kultursay }
1456acae69d0SEmre Kultursay 
1457acae69d0SEmre Kultursay bool SBDebugger::GetUseSourceCache() const {
1458acae69d0SEmre Kultursay   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetUseSourceCache);
1459acae69d0SEmre Kultursay 
1460acae69d0SEmre Kultursay   return (m_opaque_sp ? m_opaque_sp->GetUseSourceCache() : false);
1461acae69d0SEmre Kultursay }
1462acae69d0SEmre Kultursay 
1463b9c1b51eSKate Stone bool SBDebugger::GetDescription(SBStream &description) {
1464baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &),
1465baf5664fSJonas Devlieghere                      description);
1466baf5664fSJonas Devlieghere 
1467da7bc7d0SGreg Clayton   Stream &strm = description.ref();
1468da7bc7d0SGreg Clayton 
1469b9c1b51eSKate Stone   if (m_opaque_sp) {
1470dde9cff3SCaroline Tice     const char *name = m_opaque_sp->GetInstanceName().AsCString();
1471431ce678SGreg Clayton     user_id_t id = m_opaque_sp->GetID();
1472d01b2953SDaniel Malea     strm.Printf("Debugger (instance: \"%s\", id: %" PRIu64 ")", name, id);
1473b9c1b51eSKate Stone   } else
1474da7bc7d0SGreg Clayton     strm.PutCString("No value");
1475dde9cff3SCaroline Tice 
1476dde9cff3SCaroline Tice   return true;
1477dde9cff3SCaroline Tice }
1478efed6131SCaroline Tice 
1479b9c1b51eSKate Stone user_id_t SBDebugger::GetID() {
1480baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::user_id_t, SBDebugger, GetID);
1481baf5664fSJonas Devlieghere 
1482dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetID() : LLDB_INVALID_UID);
1483efed6131SCaroline Tice }
14842289fa48SGreg Clayton 
1485b9c1b51eSKate Stone SBError SBDebugger::SetCurrentPlatform(const char *platform_name_cstr) {
1486baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform,
1487baf5664fSJonas Devlieghere                      (const char *), platform_name_cstr);
1488baf5664fSJonas Devlieghere 
14892289fa48SGreg Clayton   SBError sb_error;
1490b9c1b51eSKate Stone   if (m_opaque_sp) {
1491b9c1b51eSKate Stone     if (platform_name_cstr && platform_name_cstr[0]) {
1492615eb7e6SGreg Clayton       ConstString platform_name(platform_name_cstr);
1493615eb7e6SGreg Clayton       PlatformSP platform_sp(Platform::Find(platform_name));
14942289fa48SGreg Clayton 
1495b9c1b51eSKate Stone       if (platform_sp) {
1496615eb7e6SGreg Clayton         // Already have a platform with this name, just select it
1497615eb7e6SGreg Clayton         m_opaque_sp->GetPlatformList().SetSelectedPlatform(platform_sp);
1498b9c1b51eSKate Stone       } else {
1499615eb7e6SGreg Clayton         // We don't have a platform by this name yet, create one
1500615eb7e6SGreg Clayton         platform_sp = Platform::Create(platform_name, sb_error.ref());
1501b9c1b51eSKate Stone         if (platform_sp) {
1502615eb7e6SGreg Clayton           // We created the platform, now append and select it
15032289fa48SGreg Clayton           bool make_selected = true;
15042289fa48SGreg Clayton           m_opaque_sp->GetPlatformList().Append(platform_sp, make_selected);
15052289fa48SGreg Clayton         }
15062289fa48SGreg Clayton       }
1507b9c1b51eSKate Stone     } else {
1508615eb7e6SGreg Clayton       sb_error.ref().SetErrorString("invalid platform name");
1509615eb7e6SGreg Clayton     }
1510b9c1b51eSKate Stone   } else {
1511615eb7e6SGreg Clayton     sb_error.ref().SetErrorString("invalid debugger");
1512615eb7e6SGreg Clayton   }
1513baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
15142289fa48SGreg Clayton }
15152289fa48SGreg Clayton 
1516b9c1b51eSKate Stone bool SBDebugger::SetCurrentPlatformSDKRoot(const char *sysroot) {
1517baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot,
1518baf5664fSJonas Devlieghere                      (const char *), sysroot);
1519baf5664fSJonas Devlieghere 
1520e1cf274bSJason Molenda   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1521b9c1b51eSKate Stone   if (m_opaque_sp) {
1522b9c1b51eSKate Stone     PlatformSP platform_sp(
1523b9c1b51eSKate Stone         m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1524f3dd93c8SGreg Clayton 
1525b9c1b51eSKate Stone     if (platform_sp) {
1526e1cf274bSJason Molenda       if (log && sysroot)
152763e5fb76SJonas Devlieghere         LLDB_LOGF(log, "SBDebugger::SetCurrentPlatformSDKRoot (\"%s\")",
152863e5fb76SJonas Devlieghere                   sysroot);
1529f3dd93c8SGreg Clayton       platform_sp->SetSDKRootDirectory(ConstString(sysroot));
1530f3dd93c8SGreg Clayton       return true;
1531f3dd93c8SGreg Clayton     }
1532f3dd93c8SGreg Clayton   }
1533f3dd93c8SGreg Clayton   return false;
1534f3dd93c8SGreg Clayton }
1535f3dd93c8SGreg Clayton 
1536b9c1b51eSKate Stone bool SBDebugger::GetCloseInputOnEOF() const {
1537baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetCloseInputOnEOF);
1538baf5664fSJonas Devlieghere 
1539dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetCloseInputOnEOF() : false);
1540fc3f027dSGreg Clayton }
1541fc3f027dSGreg Clayton 
1542b9c1b51eSKate Stone void SBDebugger::SetCloseInputOnEOF(bool b) {
1543baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool), b);
1544baf5664fSJonas Devlieghere 
1545fc3f027dSGreg Clayton   if (m_opaque_sp)
1546fc3f027dSGreg Clayton     m_opaque_sp->SetCloseInputOnEOF(b);
1547fc3f027dSGreg Clayton }
1548061858ceSEnrico Granata 
1549b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(const char *category_name) {
1550baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1551baf5664fSJonas Devlieghere                      (const char *), category_name);
1552baf5664fSJonas Devlieghere 
1553061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1554baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1555061858ceSEnrico Granata 
1556061858ceSEnrico Granata   TypeCategoryImplSP category_sp;
1557061858ceSEnrico Granata 
1558b9c1b51eSKate Stone   if (DataVisualization::Categories::GetCategory(ConstString(category_name),
1559baf5664fSJonas Devlieghere                                                  category_sp, false)) {
1560baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1561baf5664fSJonas Devlieghere   } else {
1562baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1563baf5664fSJonas Devlieghere   }
1564061858ceSEnrico Granata }
1565061858ceSEnrico Granata 
1566b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(lldb::LanguageType lang_type) {
1567baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1568baf5664fSJonas Devlieghere                      (lldb::LanguageType), lang_type);
1569baf5664fSJonas Devlieghere 
1570e242624cSEnrico Granata   TypeCategoryImplSP category_sp;
1571baf5664fSJonas Devlieghere   if (DataVisualization::Categories::GetCategory(lang_type, category_sp)) {
1572baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1573baf5664fSJonas Devlieghere   } else {
1574baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1575baf5664fSJonas Devlieghere   }
1576e242624cSEnrico Granata }
1577e242624cSEnrico Granata 
1578b9c1b51eSKate Stone SBTypeCategory SBDebugger::CreateCategory(const char *category_name) {
1579baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory,
1580baf5664fSJonas Devlieghere                      (const char *), category_name);
1581baf5664fSJonas Devlieghere 
1582061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1583baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1584061858ceSEnrico Granata 
1585061858ceSEnrico Granata   TypeCategoryImplSP category_sp;
1586061858ceSEnrico Granata 
1587b9c1b51eSKate Stone   if (DataVisualization::Categories::GetCategory(ConstString(category_name),
1588baf5664fSJonas Devlieghere                                                  category_sp, true)) {
1589baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1590baf5664fSJonas Devlieghere   } else {
1591baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1592baf5664fSJonas Devlieghere   }
1593061858ceSEnrico Granata }
1594061858ceSEnrico Granata 
1595b9c1b51eSKate Stone bool SBDebugger::DeleteCategory(const char *category_name) {
1596baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, DeleteCategory, (const char *),
1597baf5664fSJonas Devlieghere                      category_name);
1598baf5664fSJonas Devlieghere 
1599061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1600061858ceSEnrico Granata     return false;
1601061858ceSEnrico Granata 
1602061858ceSEnrico Granata   return DataVisualization::Categories::Delete(ConstString(category_name));
1603061858ceSEnrico Granata }
1604061858ceSEnrico Granata 
1605b9c1b51eSKate Stone uint32_t SBDebugger::GetNumCategories() {
1606baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumCategories);
1607baf5664fSJonas Devlieghere 
1608061858ceSEnrico Granata   return DataVisualization::Categories::GetCount();
1609061858ceSEnrico Granata }
1610061858ceSEnrico Granata 
1611b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategoryAtIndex(uint32_t index) {
1612baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex,
1613baf5664fSJonas Devlieghere                      (uint32_t), index);
1614baf5664fSJonas Devlieghere 
1615baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1616baf5664fSJonas Devlieghere       SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index)));
1617061858ceSEnrico Granata }
1618061858ceSEnrico Granata 
1619b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetDefaultCategory() {
1620baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTypeCategory, SBDebugger,
1621baf5664fSJonas Devlieghere                              GetDefaultCategory);
1622baf5664fSJonas Devlieghere 
1623baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(GetCategory("default"));
1624061858ceSEnrico Granata }
1625061858ceSEnrico Granata 
1626b9c1b51eSKate Stone SBTypeFormat SBDebugger::GetFormatForType(SBTypeNameSpecifier type_name) {
1627baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType,
1628baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1629baf5664fSJonas Devlieghere 
1630061858ceSEnrico Granata   SBTypeCategory default_category_sb = GetDefaultCategory();
1631061858ceSEnrico Granata   if (default_category_sb.GetEnabled())
1632baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(default_category_sb.GetFormatForType(type_name));
1633baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBTypeFormat());
1634061858ceSEnrico Granata }
1635061858ceSEnrico Granata 
1636b9c1b51eSKate Stone SBTypeSummary SBDebugger::GetSummaryForType(SBTypeNameSpecifier type_name) {
1637baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType,
1638baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1639baf5664fSJonas Devlieghere 
1640dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1641baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeSummary());
1642baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1643baf5664fSJonas Devlieghere       SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP())));
1644061858ceSEnrico Granata }
1645061858ceSEnrico Granata 
1646b9c1b51eSKate Stone SBTypeFilter SBDebugger::GetFilterForType(SBTypeNameSpecifier type_name) {
1647baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType,
1648baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1649baf5664fSJonas Devlieghere 
1650dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1651baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeFilter());
1652baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1653baf5664fSJonas Devlieghere       SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP())));
1654061858ceSEnrico Granata }
1655061858ceSEnrico Granata 
1656b9c1b51eSKate Stone SBTypeSynthetic SBDebugger::GetSyntheticForType(SBTypeNameSpecifier type_name) {
1657baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType,
1658baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1659baf5664fSJonas Devlieghere 
1660dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1661baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeSynthetic());
1662baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBTypeSynthetic(
1663baf5664fSJonas Devlieghere       DataVisualization::GetSyntheticForType(type_name.GetSP())));
1664061858ceSEnrico Granata }
1665061858ceSEnrico Granata 
16665e336903SPavel Labath static llvm::ArrayRef<const char *> GetCategoryArray(const char **categories) {
16675e336903SPavel Labath   if (categories == nullptr)
16685e336903SPavel Labath     return {};
16695e336903SPavel Labath   size_t len = 0;
16705e336903SPavel Labath   while (categories[len] != nullptr)
16715e336903SPavel Labath     ++len;
16725e336903SPavel Labath   return llvm::makeArrayRef(categories, len);
16735e336903SPavel Labath }
16745e336903SPavel Labath 
1675b9c1b51eSKate Stone bool SBDebugger::EnableLog(const char *channel, const char **categories) {
1676baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, EnableLog, (const char *, const char **),
1677baf5664fSJonas Devlieghere                      channel, categories);
1678baf5664fSJonas Devlieghere 
1679b9c1b51eSKate Stone   if (m_opaque_sp) {
1680b9c1b51eSKate Stone     uint32_t log_options =
1681b9c1b51eSKate Stone         LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
1682775588c0SPavel Labath     std::string error;
1683775588c0SPavel Labath     llvm::raw_string_ostream error_stream(error);
16845e336903SPavel Labath     return m_opaque_sp->EnableLog(channel, GetCategoryArray(categories), "",
1685775588c0SPavel Labath                                   log_options, error_stream);
1686b9c1b51eSKate Stone   } else
1687228063cdSJim Ingham     return false;
1688228063cdSJim Ingham }
16894f02b22dSJim Ingham 
1690b9c1b51eSKate Stone void SBDebugger::SetLoggingCallback(lldb::LogOutputCallback log_callback,
1691b9c1b51eSKate Stone                                     void *baton) {
16927bc83564SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, SetLoggingCallback,
16937bc83564SJonas Devlieghere                     (lldb::LogOutputCallback, void *), log_callback, baton);
16940d7b0c96SJonas Devlieghere 
1695b9c1b51eSKate Stone   if (m_opaque_sp) {
16964f02b22dSJim Ingham     return m_opaque_sp->SetLoggingCallback(log_callback, baton);
16974f02b22dSJim Ingham   }
16984f02b22dSJim Ingham }
1699ae211eceSMichal Gorny 
1700ae211eceSMichal Gorny namespace lldb_private {
1701ae211eceSMichal Gorny namespace repro {
1702ae211eceSMichal Gorny 
1703d9aec34bSJonas Devlieghere template <> void RegisterMethods<SBInputReader>(Registry &R) {
1704ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBInputReader, SetIsDone, (bool));
1705ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBInputReader, IsActive, ());
1706ae211eceSMichal Gorny }
1707ae211eceSMichal Gorny 
1708ae211eceSMichal Gorny static void SetFileHandleRedirect(SBDebugger *, FILE *, bool) {
1709ae211eceSMichal Gorny   // Do nothing.
1710ae211eceSMichal Gorny }
1711ae211eceSMichal Gorny 
171296898eb6SLawrence D'Anna static SBError SetFileRedirect(SBDebugger *, SBFile file) { return SBError(); }
171396898eb6SLawrence D'Anna 
1714c040b30fSLawrence D'Anna static SBError SetFileRedirect(SBDebugger *, FileSP file) { return SBError(); }
1715c040b30fSLawrence D'Anna 
1716d9aec34bSJonas Devlieghere template <> void RegisterMethods<SBDebugger>(Registry &R) {
1717ae211eceSMichal Gorny   // Custom implementation.
1718950a8aa1SJonas Devlieghere   R.Register(&invoke<void (SBDebugger::*)(FILE *, bool)>::method<
1719950a8aa1SJonas Devlieghere                  &SBDebugger::SetErrorFileHandle>::record,
1720ae211eceSMichal Gorny              &SetFileHandleRedirect);
1721950a8aa1SJonas Devlieghere   R.Register(&invoke<void (SBDebugger::*)(FILE *, bool)>::method<
1722950a8aa1SJonas Devlieghere                  &SBDebugger::SetOutputFileHandle>::record,
1723ae211eceSMichal Gorny              &SetFileHandleRedirect);
1724ae211eceSMichal Gorny 
172596898eb6SLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1726950a8aa1SJonas Devlieghere                  SBFile)>::method<&SBDebugger::SetInputFile>::record,
172796898eb6SLawrence D'Anna              &SetFileRedirect);
172896898eb6SLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1729950a8aa1SJonas Devlieghere                  SBFile)>::method<&SBDebugger::SetOutputFile>::record,
173096898eb6SLawrence D'Anna              &SetFileRedirect);
173196898eb6SLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1732950a8aa1SJonas Devlieghere                  SBFile)>::method<&SBDebugger::SetErrorFile>::record,
173396898eb6SLawrence D'Anna              &SetFileRedirect);
173496898eb6SLawrence D'Anna 
1735c040b30fSLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1736950a8aa1SJonas Devlieghere                  FileSP)>::method<&SBDebugger::SetInputFile>::record,
1737c040b30fSLawrence D'Anna              &SetFileRedirect);
1738c040b30fSLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1739950a8aa1SJonas Devlieghere                  FileSP)>::method<&SBDebugger::SetOutputFile>::record,
1740c040b30fSLawrence D'Anna              &SetFileRedirect);
1741c040b30fSLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1742950a8aa1SJonas Devlieghere                  FileSP)>::method<&SBDebugger::SetErrorFile>::record,
1743c040b30fSLawrence D'Anna              &SetFileRedirect);
1744c040b30fSLawrence D'Anna 
1745e687aa82SJonas Devlieghere   LLDB_REGISTER_CHAR_PTR_METHOD_STATIC(bool, SBDebugger,
17462f025bb8SJonas Devlieghere                                        GetDefaultArchitecture);
17472f025bb8SJonas Devlieghere 
1748ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, ());
1749ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &));
1750ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &));
1751ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBDebugger &,
1752ae211eceSMichal Gorny                        SBDebugger, operator=,(const lldb::SBDebugger &));
1753ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Initialize, ());
1754ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger,
1755ae211eceSMichal Gorny                               InitializeWithErrorHandling, ());
1756ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Terminate, ());
1757ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, Clear, ());
1758ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, ());
1759ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool));
1760e122877fSGreg Clayton   LLDB_REGISTER_STATIC_METHOD(
1761e122877fSGreg Clayton       const char *, SBDebugger, GetProgressFromEvent,
1762e122877fSGreg Clayton       (const lldb::SBEvent &, uint64_t &, uint64_t &, uint64_t &, bool &));
1763e122877fSGreg Clayton   LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, GetBroadcasterClass,
1764e122877fSGreg Clayton                               ());
1765e122877fSGreg Clayton   LLDB_REGISTER_METHOD(SBBroadcaster, SBDebugger, GetBroadcaster, ());
1766d9aec34bSJonas Devlieghere   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Destroy, (lldb::SBDebugger &));
1767ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, MemoryPressureDetected, ());
1768ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, IsValid, ());
1769ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, operator bool,());
1770ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetAsync, (bool));
1771ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetAsync, ());
1772ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool));
1773ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SkipAppInitFiles, (bool));
1774ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool));
1775ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetInputFileHandle, ());
1776ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetOutputFileHandle, ());
1777ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetErrorFileHandle, ());
177896898eb6SLawrence D'Anna   LLDB_REGISTER_METHOD(SBFile, SBDebugger, GetInputFile, ());
177996898eb6SLawrence D'Anna   LLDB_REGISTER_METHOD(SBFile, SBDebugger, GetOutputFile, ());
178096898eb6SLawrence D'Anna   LLDB_REGISTER_METHOD(SBFile, SBDebugger, GetErrorFile, ());
1781ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SaveInputTerminalState, ());
1782ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RestoreInputTerminalState, ());
1783ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBCommandInterpreter, SBDebugger,
1784ae211eceSMichal Gorny                        GetCommandInterpreter, ());
1785ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, HandleCommand, (const char *));
1786ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBListener, SBDebugger, GetListener, ());
1787ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
1788ae211eceSMichal Gorny       void, SBDebugger, HandleProcessEvent,
1789ae211eceSMichal Gorny       (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *));
1790322f12afSLawrence D'Anna   LLDB_REGISTER_METHOD(
1791322f12afSLawrence D'Anna       void, SBDebugger, HandleProcessEvent,
1792322f12afSLawrence D'Anna       (const lldb::SBProcess &, const lldb::SBEvent &, SBFile, SBFile));
1793322f12afSLawrence D'Anna   LLDB_REGISTER_METHOD(
1794322f12afSLawrence D'Anna       void, SBDebugger, HandleProcessEvent,
1795322f12afSLawrence D'Anna       (const lldb::SBProcess &, const lldb::SBEvent &, FileSP, FileSP));
1796d9aec34bSJonas Devlieghere   LLDB_REGISTER_METHOD(lldb::SBSourceManager, SBDebugger, GetSourceManager, ());
1797ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture,
1798ae211eceSMichal Gorny                               (const char *));
1799ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage,
1800ae211eceSMichal Gorny                        (const char *));
1801*bbef51ebSLawrence D'Anna   LLDB_REGISTER_METHOD(SBStructuredData, SBDebugger, GetScriptInterpreterInfo,
1802*bbef51ebSLawrence D'Anna                        (lldb::ScriptLanguage));
1803ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, GetVersionString, ());
1804ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, StateAsCString,
1805ae211eceSMichal Gorny                               (lldb::StateType));
1806ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBStructuredData, SBDebugger,
1807ae211eceSMichal Gorny                               GetBuildConfiguration, ());
1808ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsRunningState,
1809ae211eceSMichal Gorny                               (lldb::StateType));
1810ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState,
1811ae211eceSMichal Gorny                               (lldb::StateType));
1812ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
1813ae211eceSMichal Gorny       lldb::SBTarget, SBDebugger, CreateTarget,
1814ae211eceSMichal Gorny       (const char *, const char *, const char *, bool, lldb::SBError &));
1815ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger,
1816ae211eceSMichal Gorny                        CreateTargetWithFileAndTargetTriple,
1817ae211eceSMichal Gorny                        (const char *, const char *));
1818d9aec34bSJonas Devlieghere   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, CreateTargetWithFileAndArch,
1819ae211eceSMichal Gorny                        (const char *, const char *));
1820ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, CreateTarget,
1821ae211eceSMichal Gorny                        (const char *));
1822ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetDummyTarget, ());
1823ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &));
1824ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex,
1825ae211eceSMichal Gorny                        (uint32_t));
1826ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetIndexOfTarget,
1827ae211eceSMichal Gorny                        (lldb::SBTarget));
1828ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID,
1829ae211eceSMichal Gorny                        (lldb::pid_t));
1830ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch,
1831ae211eceSMichal Gorny                        (const char *, const char *));
1832ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumTargets, ());
1833ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetSelectedTarget, ());
1834d9aec34bSJonas Devlieghere   LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedTarget, (lldb::SBTarget &));
1835ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetSelectedPlatform, ());
1836ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedPlatform,
1837ae211eceSMichal Gorny                        (lldb::SBPlatform &));
1838ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumPlatforms, ());
1839ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex,
1840ae211eceSMichal Gorny                        (uint32_t));
1841ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumAvailablePlatforms, ());
1842ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBStructuredData, SBDebugger,
1843ae211eceSMichal Gorny                        GetAvailablePlatformInfoAtIndex, (uint32_t));
1844ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputInterrupt, ());
1845ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputEndOfFile, ());
1846ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, PushInputReader,
1847ae211eceSMichal Gorny                        (lldb::SBInputReader &));
1848ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool));
1849ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter,
1850ae211eceSMichal Gorny                        (bool, bool, lldb::SBCommandInterpreterRunOptions &,
1851ae211eceSMichal Gorny                         int &, bool &, bool &));
1852ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, RunREPL,
1853ae211eceSMichal Gorny                        (lldb::LanguageType, const char *));
1854d9aec34bSJonas Devlieghere   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, FindDebuggerWithID,
1855d9aec34bSJonas Devlieghere                               (int));
1856ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBDebugger, GetInstanceName, ());
1857ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable,
1858ae211eceSMichal Gorny                               (const char *, const char *, const char *));
1859ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBStringList, SBDebugger,
1860ae211eceSMichal Gorny                               GetInternalVariableValue,
1861ae211eceSMichal Gorny                               (const char *, const char *));
1862ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBDebugger, GetTerminalWidth, ());
1863ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetTerminalWidth, (uint32_t));
1864ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetPrompt, ());
1865ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetPrompt, (const char *));
1866ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetReproducerPath, ());
1867ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::ScriptLanguage, SBDebugger,
1868ae211eceSMichal Gorny                              GetScriptLanguage, ());
1869ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetScriptLanguage,
1870ae211eceSMichal Gorny                        (lldb::ScriptLanguage));
1871ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool));
1872ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetUseExternalEditor, ());
1873ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseColor, (bool));
1874ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetUseColor, ());
1875ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &));
1876ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::user_id_t, SBDebugger, GetID, ());
1877ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform,
1878ae211eceSMichal Gorny                        (const char *));
1879ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot,
1880ae211eceSMichal Gorny                        (const char *));
1881ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetCloseInputOnEOF, ());
1882ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool));
1883ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1884ae211eceSMichal Gorny                        (const char *));
1885ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1886ae211eceSMichal Gorny                        (lldb::LanguageType));
1887ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory,
1888ae211eceSMichal Gorny                        (const char *));
1889ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteCategory, (const char *));
1890ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumCategories, ());
1891ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex,
1892ae211eceSMichal Gorny                        (uint32_t));
1893ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetDefaultCategory,
1894ae211eceSMichal Gorny                        ());
1895ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType,
1896ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1897ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType,
1898ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1899ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType,
1900ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1901ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType,
1902ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1903ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, EnableLog,
1904ae211eceSMichal Gorny                        (const char *, const char **));
19054c67b119SJonas Devlieghere   LLDB_REGISTER_METHOD(lldb::SBCommandInterpreterRunResult, SBDebugger,
19064c67b119SJonas Devlieghere                        RunCommandInterpreter,
19074c67b119SJonas Devlieghere                        (const lldb::SBCommandInterpreterRunOptions &));
1908ae211eceSMichal Gorny }
1909ae211eceSMichal Gorny 
1910d9aec34bSJonas Devlieghere } // namespace repro
1911d9aec34bSJonas Devlieghere } // namespace lldb_private
1912