130fdc8d8SChris Lattner //===-- SBDebugger.cpp ------------------------------------------*- C++ -*-===//
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"
18ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h"
192289fa48SGreg Clayton #include "lldb/API/SBError.h"
20ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h"
21ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h"
22b9c1b51eSKate Stone #include "lldb/API/SBListener.h"
233df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h"
243df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h"
25dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
263df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h"
27c10e34d0SVadim Macagon #include "lldb/API/SBStructuredData.h"
283df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h"
293df9a8dfSCaroline Tice #include "lldb/API/SBThread.h"
30061858ceSEnrico Granata #include "lldb/API/SBTypeCategory.h"
31061858ceSEnrico Granata #include "lldb/API/SBTypeFilter.h"
32b9c1b51eSKate Stone #include "lldb/API/SBTypeFormat.h"
33061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h"
34061858ceSEnrico Granata #include "lldb/API/SBTypeSummary.h"
35061858ceSEnrico Granata #include "lldb/API/SBTypeSynthetic.h"
36061858ceSEnrico Granata 
376eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h"
38c10e34d0SVadim Macagon #include "lldb/Core/PluginManager.h"
3944d93782SGreg Clayton #include "lldb/Core/StreamFile.h"
40c10e34d0SVadim Macagon #include "lldb/Core/StructuredDataImpl.h"
415548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h"
42f1389e92SPavel Labath #include "lldb/Host/XML.h"
43e6e2bb38SZachary Turner #include "lldb/Initialization/SystemLifetimeManager.h"
446eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h"
4547cbf4a0SPavel Labath #include "lldb/Interpreter/OptionArgParser.h"
46cac9c5f9SGreg Clayton #include "lldb/Interpreter/OptionGroupPlatform.h"
476eee5aa0SGreg Clayton #include "lldb/Target/Process.h"
486eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h"
49145d95c9SPavel Labath #include "lldb/Utility/Args.h"
50d821c997SPavel Labath #include "lldb/Utility/State.h"
5130fdc8d8SChris Lattner 
52d717cc9fSEnrico Granata #include "llvm/ADT/STLExtras.h"
537b2e5a36SZachary Turner #include "llvm/ADT/StringRef.h"
5458a559c0SZachary Turner #include "llvm/Support/DynamicLibrary.h"
55b9c1b51eSKate Stone #include "llvm/Support/ManagedStatic.h"
5658a559c0SZachary Turner 
5730fdc8d8SChris Lattner using namespace lldb;
5830fdc8d8SChris Lattner using namespace lldb_private;
5930fdc8d8SChris Lattner 
60b9c1b51eSKate Stone static llvm::sys::DynamicLibrary LoadPlugin(const lldb::DebuggerSP &debugger_sp,
61b9c1b51eSKate Stone                                             const FileSpec &spec,
6297206d57SZachary Turner                                             Status &error) {
63b9c1b51eSKate Stone   llvm::sys::DynamicLibrary dynlib =
64b9c1b51eSKate Stone       llvm::sys::DynamicLibrary::getPermanentLibrary(spec.GetPath().c_str());
65b9c1b51eSKate Stone   if (dynlib.isValid()) {
665fb8f797SGreg Clayton     typedef bool (*LLDBCommandPluginInit)(lldb::SBDebugger & debugger);
675fb8f797SGreg Clayton 
685fb8f797SGreg Clayton     lldb::SBDebugger debugger_sb(debugger_sp);
69b9c1b51eSKate Stone     // This calls the bool lldb::PluginInitialize(lldb::SBDebugger debugger)
70b9c1b51eSKate Stone     // function.
71b9c1b51eSKate Stone     // TODO: mangle this differently for your system - on OSX, the first
72b9c1b51eSKate Stone     // underscore needs to be removed and the second one stays
73b9c1b51eSKate Stone     LLDBCommandPluginInit init_func =
7422701b2fSStephane Sezer         (LLDBCommandPluginInit)(uintptr_t)dynlib.getAddressOfSymbol(
75b9c1b51eSKate Stone             "_ZN4lldb16PluginInitializeENS_10SBDebuggerE");
76b9c1b51eSKate Stone     if (init_func) {
775fb8f797SGreg Clayton       if (init_func(debugger_sb))
7858a559c0SZachary Turner         return dynlib;
795fb8f797SGreg Clayton       else
80b9c1b51eSKate Stone         error.SetErrorString("plug-in refused to load "
81b9c1b51eSKate Stone                              "(lldb::PluginInitialize(lldb::SBDebugger) "
82b9c1b51eSKate Stone                              "returned false)");
83b9c1b51eSKate Stone     } else {
84b9c1b51eSKate Stone       error.SetErrorString("plug-in is missing the required initialization: "
85b9c1b51eSKate Stone                            "lldb::PluginInitialize(lldb::SBDebugger)");
865fb8f797SGreg Clayton     }
87b9c1b51eSKate Stone   } else {
88dbd7fabaSJonas Devlieghere     if (FileSystem::Instance().Exists(spec))
895fb8f797SGreg Clayton       error.SetErrorString("this file does not represent a loadable dylib");
905fb8f797SGreg Clayton     else
915fb8f797SGreg Clayton       error.SetErrorString("no such file");
925fb8f797SGreg Clayton   }
9358a559c0SZachary Turner   return llvm::sys::DynamicLibrary();
945fb8f797SGreg Clayton }
955fb8f797SGreg Clayton 
96e6e2bb38SZachary Turner static llvm::ManagedStatic<SystemLifetimeManager> g_debugger_lifetime;
97e6e2bb38SZachary Turner 
98b9c1b51eSKate Stone SBError SBInputReader::Initialize(
99b9c1b51eSKate Stone     lldb::SBDebugger &sb_debugger,
1000d7b0c96SJonas Devlieghere     unsigned long (*callback)(void *, lldb::SBInputReader *,
1010d7b0c96SJonas Devlieghere                               lldb::InputReaderAction, char const *,
1020d7b0c96SJonas Devlieghere                               unsigned long),
1030d7b0c96SJonas Devlieghere     void *a, lldb::InputReaderGranularity b, char const *c, char const *d,
1040d7b0c96SJonas Devlieghere     bool e) {
1057bc83564SJonas Devlieghere   LLDB_RECORD_DUMMY(
1067bc83564SJonas Devlieghere       lldb::SBError, SBInputReader, Initialize,
1077bc83564SJonas Devlieghere       (lldb::SBDebugger &,
1087bc83564SJonas Devlieghere        unsigned long (*)(void *, lldb::SBInputReader *, lldb::InputReaderAction,
1097bc83564SJonas Devlieghere                          const char *, unsigned long),
1107bc83564SJonas Devlieghere        void *, lldb::InputReaderGranularity, const char *, const char *, bool),
1110d7b0c96SJonas Devlieghere       sb_debugger, callback, a, b, c, d, e);
1120d7b0c96SJonas Devlieghere 
113e6e2bb38SZachary Turner   return SBError();
114e6e2bb38SZachary Turner }
115e6e2bb38SZachary Turner 
116baf5664fSJonas Devlieghere void SBInputReader::SetIsDone(bool b) {
117baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBInputReader, SetIsDone, (bool), b);
118baf5664fSJonas Devlieghere }
119dbb0abbfSEugene Zelenko 
120baf5664fSJonas Devlieghere bool SBInputReader::IsActive() const {
121baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBInputReader, IsActive);
122e6e2bb38SZachary Turner 
123baf5664fSJonas Devlieghere   return false;
124baf5664fSJonas Devlieghere }
125baf5664fSJonas Devlieghere 
126baf5664fSJonas Devlieghere SBDebugger::SBDebugger() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBDebugger); }
127dbb0abbfSEugene Zelenko 
128b9c1b51eSKate Stone SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp)
129baf5664fSJonas Devlieghere     : m_opaque_sp(debugger_sp) {
130baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &), debugger_sp);
131baf5664fSJonas Devlieghere }
132dbb0abbfSEugene Zelenko 
133baf5664fSJonas Devlieghere SBDebugger::SBDebugger(const SBDebugger &rhs) : m_opaque_sp(rhs.m_opaque_sp) {
134baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &), rhs);
135baf5664fSJonas Devlieghere }
136dbb0abbfSEugene Zelenko 
137dbb0abbfSEugene Zelenko SBDebugger::~SBDebugger() = default;
138dbb0abbfSEugene Zelenko 
139b9c1b51eSKate Stone SBDebugger &SBDebugger::operator=(const SBDebugger &rhs) {
140baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBDebugger &,
141baf5664fSJonas Devlieghere                      SBDebugger, operator=,(const lldb::SBDebugger &), rhs);
142baf5664fSJonas Devlieghere 
143b9c1b51eSKate Stone   if (this != &rhs) {
144dbb0abbfSEugene Zelenko     m_opaque_sp = rhs.m_opaque_sp;
145dbb0abbfSEugene Zelenko   }
146306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
147dbb0abbfSEugene Zelenko }
148dbb0abbfSEugene Zelenko 
149b9c1b51eSKate Stone void SBDebugger::Initialize() {
150baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Initialize);
151936c6242SJonas Devlieghere   SBError ignored = SBDebugger::InitializeWithErrorHandling();
15215eacd74SJonas Devlieghere }
15315eacd74SJonas Devlieghere 
154936c6242SJonas Devlieghere lldb::SBError SBDebugger::InitializeWithErrorHandling() {
155baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBError, SBDebugger,
156baf5664fSJonas Devlieghere                                     InitializeWithErrorHandling);
157baf5664fSJonas Devlieghere 
15815eacd74SJonas Devlieghere   SBError error;
15915eacd74SJonas Devlieghere   if (auto e = g_debugger_lifetime->Initialize(
160a8f3ae7cSJonas Devlieghere           std::make_unique<SystemInitializerFull>(), LoadPlugin)) {
16115eacd74SJonas Devlieghere     error.SetError(Status(std::move(e)));
16215eacd74SJonas Devlieghere   }
163baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(error);
16430fdc8d8SChris Lattner }
16530fdc8d8SChris Lattner 
166baf5664fSJonas Devlieghere void SBDebugger::Terminate() {
167baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Terminate);
168baf5664fSJonas Devlieghere 
169baf5664fSJonas Devlieghere   g_debugger_lifetime->Terminate();
170baf5664fSJonas Devlieghere }
17130fdc8d8SChris Lattner 
172b9c1b51eSKate Stone void SBDebugger::Clear() {
173baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, Clear);
174baf5664fSJonas Devlieghere 
1753d6086f6SCaroline Tice   if (m_opaque_sp)
17644d93782SGreg Clayton     m_opaque_sp->ClearIOHandlers();
177ceb6b139SCaroline Tice 
17848e42549SGreg Clayton   m_opaque_sp.reset();
17948e42549SGreg Clayton }
18048e42549SGreg Clayton 
181b9c1b51eSKate Stone SBDebugger SBDebugger::Create() {
182baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBDebugger, SBDebugger, Create);
183baf5664fSJonas Devlieghere 
184baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBDebugger::Create(false, nullptr, nullptr));
18506942690SJim Ingham }
18606942690SJim Ingham 
187b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files) {
188baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool),
189baf5664fSJonas Devlieghere                             source_init_files);
190baf5664fSJonas Devlieghere 
191baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
192baf5664fSJonas Devlieghere       SBDebugger::Create(source_init_files, nullptr, nullptr));
193228063cdSJim Ingham }
194228063cdSJim Ingham 
195b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files,
196b9c1b51eSKate Stone                               lldb::LogOutputCallback callback, void *baton)
197228063cdSJim Ingham 
198228063cdSJim Ingham {
1990d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(lldb::SBDebugger, SBDebugger, Create,
2007bc83564SJonas Devlieghere                     (bool, lldb::LogOutputCallback, void *), source_init_files,
2017bc83564SJonas Devlieghere                     callback, baton);
202ceb6b139SCaroline Tice 
2036611103cSGreg Clayton   SBDebugger debugger;
204cb172b10SGreg Clayton 
205b9c1b51eSKate Stone   // Currently we have issues if this function is called simultaneously on two
20605097246SAdrian Prantl   // different threads. The issues mainly revolve around the fact that the
20705097246SAdrian Prantl   // lldb_private::FormatManager uses global collections and having two threads
20805097246SAdrian Prantl   // parsing the .lldbinit files can cause mayhem. So to get around this for
20905097246SAdrian Prantl   // now we need to use a mutex to prevent bad things from happening.
21016ff8604SSaleem Abdulrasool   static std::recursive_mutex g_mutex;
21116ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(g_mutex);
212cb172b10SGreg Clayton 
213228063cdSJim Ingham   debugger.reset(Debugger::CreateInstance(callback, baton));
214ceb6b139SCaroline Tice 
21506942690SJim Ingham   SBCommandInterpreter interp = debugger.GetCommandInterpreter();
216b9c1b51eSKate Stone   if (source_init_files) {
21706942690SJim Ingham     interp.get()->SkipLLDBInitFiles(false);
21806942690SJim Ingham     interp.get()->SkipAppInitFiles(false);
21906942690SJim Ingham     SBCommandReturnObject result;
22006942690SJim Ingham     interp.SourceInitFileInHomeDirectory(result);
221b9c1b51eSKate Stone   } else {
22206942690SJim Ingham     interp.get()->SkipLLDBInitFiles(true);
22306942690SJim Ingham     interp.get()->SkipAppInitFiles(true);
22406942690SJim Ingham   }
2256611103cSGreg Clayton   return debugger;
2266611103cSGreg Clayton }
2276611103cSGreg Clayton 
228b9c1b51eSKate Stone void SBDebugger::Destroy(SBDebugger &debugger) {
229baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(void, SBDebugger, Destroy, (lldb::SBDebugger &),
230baf5664fSJonas Devlieghere                             debugger);
231baf5664fSJonas Devlieghere 
232e02657b1SCaroline Tice   Debugger::Destroy(debugger.m_opaque_sp);
233e02657b1SCaroline Tice 
234dbb0abbfSEugene Zelenko   if (debugger.m_opaque_sp.get() != nullptr)
235e02657b1SCaroline Tice     debugger.m_opaque_sp.reset();
236e02657b1SCaroline Tice }
237e02657b1SCaroline Tice 
238b9c1b51eSKate Stone void SBDebugger::MemoryPressureDetected() {
239baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, MemoryPressureDetected);
240baf5664fSJonas Devlieghere 
24105097246SAdrian Prantl   // Since this function can be call asynchronously, we allow it to be non-
24205097246SAdrian Prantl   // mandatory. We have seen deadlocks with this function when called so we
24305097246SAdrian Prantl   // need to safeguard against this until we can determine what is causing the
24405097246SAdrian Prantl   // deadlocks.
245aebdf1beSJim Ingham 
2460cd70866SGreg Clayton   const bool mandatory = false;
247aebdf1beSJim Ingham 
2480cd70866SGreg Clayton   ModuleList::RemoveOrphanSharedModules(mandatory);
249f9322415SGreg Clayton }
250f9322415SGreg Clayton 
251baf5664fSJonas Devlieghere bool SBDebugger::IsValid() const {
252baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, IsValid);
2537f5237bcSPavel Labath   return this->operator bool();
2547f5237bcSPavel Labath }
2557f5237bcSPavel Labath SBDebugger::operator bool() const {
2567f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, operator bool);
257baf5664fSJonas Devlieghere 
258baf5664fSJonas Devlieghere   return m_opaque_sp.get() != nullptr;
259baf5664fSJonas Devlieghere }
2606611103cSGreg Clayton 
261b9c1b51eSKate Stone void SBDebugger::SetAsync(bool b) {
262baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetAsync, (bool), b);
263baf5664fSJonas Devlieghere 
2646611103cSGreg Clayton   if (m_opaque_sp)
2656611103cSGreg Clayton     m_opaque_sp->SetAsyncExecution(b);
26630fdc8d8SChris Lattner }
26730fdc8d8SChris Lattner 
268b9c1b51eSKate Stone bool SBDebugger::GetAsync() {
269baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetAsync);
270baf5664fSJonas Devlieghere 
271dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetAsyncExecution() : false);
272e64f0dc7SJim Ingham }
273e64f0dc7SJim Ingham 
274b9c1b51eSKate Stone void SBDebugger::SkipLLDBInitFiles(bool b) {
275baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool), b);
276baf5664fSJonas Devlieghere 
2776eee5aa0SGreg Clayton   if (m_opaque_sp)
2786eee5aa0SGreg Clayton     m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles(b);
2796eee5aa0SGreg Clayton }
2806eee5aa0SGreg Clayton 
281b9c1b51eSKate Stone void SBDebugger::SkipAppInitFiles(bool b) {
282baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SkipAppInitFiles, (bool), b);
283baf5664fSJonas Devlieghere 
28416e0c686SJim Ingham   if (m_opaque_sp)
28516e0c686SJim Ingham     m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles(b);
28616e0c686SJim Ingham }
28716e0c686SJim Ingham 
28805097246SAdrian Prantl // Shouldn't really be settable after initialization as this could cause lots
28905097246SAdrian Prantl // of problems; don't want users trying to switch modes in the middle of a
29005097246SAdrian Prantl // debugging session.
291b9c1b51eSKate Stone void SBDebugger::SetInputFileHandle(FILE *fh, bool transfer_ownership) {
292baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool), fh,
293baf5664fSJonas Devlieghere                      transfer_ownership);
294baf5664fSJonas Devlieghere 
295d77c2e09SJonas Devlieghere   if (!m_opaque_sp)
296d77c2e09SJonas Devlieghere     return;
297d77c2e09SJonas Devlieghere 
298d77c2e09SJonas Devlieghere   repro::DataRecorder *recorder = nullptr;
299d77c2e09SJonas Devlieghere   if (repro::Generator *g = repro::Reproducer::Instance().GetGenerator())
300d77c2e09SJonas Devlieghere     recorder = g->GetOrCreate<repro::CommandProvider>().GetNewDataRecorder();
301d77c2e09SJonas Devlieghere 
302*4a491ec4SJonas Devlieghere   static std::unique_ptr<repro::CommandLoader> loader =
303*4a491ec4SJonas Devlieghere       repro::CommandLoader::Create(repro::Reproducer::Instance().GetLoader());
304*4a491ec4SJonas Devlieghere   if (loader) {
305*4a491ec4SJonas Devlieghere     llvm::Optional<std::string> file = loader->GetNextFile();
306*4a491ec4SJonas Devlieghere     fh = file ? FileSystem::Instance().Fopen(file->c_str(), "r") : nullptr;
307*4a491ec4SJonas Devlieghere   }
308d77c2e09SJonas Devlieghere 
309d77c2e09SJonas Devlieghere   m_opaque_sp->SetInputFileHandle(fh, transfer_ownership, recorder);
31030fdc8d8SChris Lattner }
31130fdc8d8SChris Lattner 
312b9c1b51eSKate Stone void SBDebugger::SetOutputFileHandle(FILE *fh, bool transfer_ownership) {
313baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetOutputFileHandle, (FILE *, bool), fh,
314baf5664fSJonas Devlieghere                      transfer_ownership);
315baf5664fSJonas Devlieghere 
3166611103cSGreg Clayton   if (m_opaque_sp)
3176611103cSGreg Clayton     m_opaque_sp->SetOutputFileHandle(fh, transfer_ownership);
31830fdc8d8SChris Lattner }
31930fdc8d8SChris Lattner 
320b9c1b51eSKate Stone void SBDebugger::SetErrorFileHandle(FILE *fh, bool transfer_ownership) {
321baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetErrorFileHandle, (FILE *, bool), fh,
322baf5664fSJonas Devlieghere                      transfer_ownership);
323baf5664fSJonas Devlieghere 
3246611103cSGreg Clayton   if (m_opaque_sp)
3256611103cSGreg Clayton     m_opaque_sp->SetErrorFileHandle(fh, transfer_ownership);
32630fdc8d8SChris Lattner }
32730fdc8d8SChris Lattner 
328b9c1b51eSKate Stone FILE *SBDebugger::GetInputFileHandle() {
329baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetInputFileHandle);
330baf5664fSJonas Devlieghere 
331b9c1b51eSKate Stone   if (m_opaque_sp) {
33244d93782SGreg Clayton     StreamFileSP stream_file_sp(m_opaque_sp->GetInputFile());
33344d93782SGreg Clayton     if (stream_file_sp)
334306809f2SJonas Devlieghere       return LLDB_RECORD_RESULT(stream_file_sp->GetFile().GetStream());
33544d93782SGreg Clayton   }
336dbb0abbfSEugene Zelenko   return nullptr;
33730fdc8d8SChris Lattner }
33830fdc8d8SChris Lattner 
339b9c1b51eSKate Stone FILE *SBDebugger::GetOutputFileHandle() {
340baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetOutputFileHandle);
341baf5664fSJonas Devlieghere 
342b9c1b51eSKate Stone   if (m_opaque_sp) {
34344d93782SGreg Clayton     StreamFileSP stream_file_sp(m_opaque_sp->GetOutputFile());
34444d93782SGreg Clayton     if (stream_file_sp)
345306809f2SJonas Devlieghere       return LLDB_RECORD_RESULT(stream_file_sp->GetFile().GetStream());
34644d93782SGreg Clayton   }
347dbb0abbfSEugene Zelenko   return nullptr;
34830fdc8d8SChris Lattner }
34930fdc8d8SChris Lattner 
350b9c1b51eSKate Stone FILE *SBDebugger::GetErrorFileHandle() {
351baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetErrorFileHandle);
352baf5664fSJonas Devlieghere 
353b9c1b51eSKate Stone   if (m_opaque_sp) {
35444d93782SGreg Clayton     StreamFileSP stream_file_sp(m_opaque_sp->GetErrorFile());
35544d93782SGreg Clayton     if (stream_file_sp)
356306809f2SJonas Devlieghere       return LLDB_RECORD_RESULT(stream_file_sp->GetFile().GetStream());
35744d93782SGreg Clayton   }
358dbb0abbfSEugene Zelenko   return nullptr;
35930fdc8d8SChris Lattner }
36030fdc8d8SChris Lattner 
361b9c1b51eSKate Stone void SBDebugger::SaveInputTerminalState() {
362baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, SaveInputTerminalState);
363baf5664fSJonas Devlieghere 
364c5917d9aSJim Ingham   if (m_opaque_sp)
365c5917d9aSJim Ingham     m_opaque_sp->SaveInputTerminalState();
366c5917d9aSJim Ingham }
367c5917d9aSJim Ingham 
368b9c1b51eSKate Stone void SBDebugger::RestoreInputTerminalState() {
369baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, RestoreInputTerminalState);
370baf5664fSJonas Devlieghere 
371c5917d9aSJim Ingham   if (m_opaque_sp)
372c5917d9aSJim Ingham     m_opaque_sp->RestoreInputTerminalState();
373c5917d9aSJim Ingham }
374b9c1b51eSKate Stone SBCommandInterpreter SBDebugger::GetCommandInterpreter() {
375baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBCommandInterpreter, SBDebugger,
376baf5664fSJonas Devlieghere                              GetCommandInterpreter);
377baf5664fSJonas Devlieghere 
3786611103cSGreg Clayton   SBCommandInterpreter sb_interpreter;
3796611103cSGreg Clayton   if (m_opaque_sp)
3806611103cSGreg Clayton     sb_interpreter.reset(&m_opaque_sp->GetCommandInterpreter());
381ceb6b139SCaroline Tice 
382baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_interpreter);
38330fdc8d8SChris Lattner }
38430fdc8d8SChris Lattner 
385b9c1b51eSKate Stone void SBDebugger::HandleCommand(const char *command) {
386baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, HandleCommand, (const char *), command);
387baf5664fSJonas Devlieghere 
388b9c1b51eSKate Stone   if (m_opaque_sp) {
389af67cecdSGreg Clayton     TargetSP target_sp(m_opaque_sp->GetSelectedTarget());
390bb19a13cSSaleem Abdulrasool     std::unique_lock<std::recursive_mutex> lock;
391af67cecdSGreg Clayton     if (target_sp)
392bb19a13cSSaleem Abdulrasool       lock = std::unique_lock<std::recursive_mutex>(target_sp->GetAPIMutex());
393af67cecdSGreg Clayton 
3946611103cSGreg Clayton     SBCommandInterpreter sb_interpreter(GetCommandInterpreter());
39530fdc8d8SChris Lattner     SBCommandReturnObject result;
39630fdc8d8SChris Lattner 
39730fdc8d8SChris Lattner     sb_interpreter.HandleCommand(command, result, false);
39830fdc8d8SChris Lattner 
399dbb0abbfSEugene Zelenko     if (GetErrorFileHandle() != nullptr)
40030fdc8d8SChris Lattner       result.PutError(GetErrorFileHandle());
401dbb0abbfSEugene Zelenko     if (GetOutputFileHandle() != nullptr)
40230fdc8d8SChris Lattner       result.PutOutput(GetOutputFileHandle());
40330fdc8d8SChris Lattner 
404b9c1b51eSKate Stone     if (!m_opaque_sp->GetAsyncExecution()) {
4056611103cSGreg Clayton       SBProcess process(GetCommandInterpreter().GetProcess());
406b9556accSGreg Clayton       ProcessSP process_sp(process.GetSP());
407b9c1b51eSKate Stone       if (process_sp) {
40830fdc8d8SChris Lattner         EventSP event_sp;
409583bbb1dSJim Ingham         ListenerSP lldb_listener_sp = m_opaque_sp->GetListener();
410d35031e1SPavel Labath         while (lldb_listener_sp->GetEventForBroadcaster(
411d35031e1SPavel Labath             process_sp.get(), event_sp, std::chrono::seconds(0))) {
41230fdc8d8SChris Lattner           SBEvent event(event_sp);
413b9c1b51eSKate Stone           HandleProcessEvent(process, event, GetOutputFileHandle(),
414b9c1b51eSKate Stone                              GetErrorFileHandle());
41530fdc8d8SChris Lattner         }
41630fdc8d8SChris Lattner       }
41730fdc8d8SChris Lattner     }
41830fdc8d8SChris Lattner   }
4196611103cSGreg Clayton }
42030fdc8d8SChris Lattner 
421b9c1b51eSKate Stone SBListener SBDebugger::GetListener() {
422baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBListener, SBDebugger, GetListener);
423baf5664fSJonas Devlieghere 
4246611103cSGreg Clayton   SBListener sb_listener;
4256611103cSGreg Clayton   if (m_opaque_sp)
426583bbb1dSJim Ingham     sb_listener.reset(m_opaque_sp->GetListener());
427ceb6b139SCaroline Tice 
428baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_listener);
42930fdc8d8SChris Lattner }
43030fdc8d8SChris Lattner 
431b9c1b51eSKate Stone void SBDebugger::HandleProcessEvent(const SBProcess &process,
432b9c1b51eSKate Stone                                     const SBEvent &event, FILE *out,
433b9c1b51eSKate Stone                                     FILE *err) {
434baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
435baf5664fSJonas Devlieghere       void, SBDebugger, HandleProcessEvent,
436baf5664fSJonas Devlieghere       (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *), process,
437baf5664fSJonas Devlieghere       event, out, err);
438baf5664fSJonas Devlieghere 
439af67cecdSGreg Clayton   if (!process.IsValid())
440af67cecdSGreg Clayton     return;
441af67cecdSGreg Clayton 
442b9556accSGreg Clayton   TargetSP target_sp(process.GetTarget().GetSP());
443b9556accSGreg Clayton   if (!target_sp)
444b9556accSGreg Clayton     return;
445b9556accSGreg Clayton 
44630fdc8d8SChris Lattner   const uint32_t event_type = event.GetType();
44730fdc8d8SChris Lattner   char stdio_buffer[1024];
44830fdc8d8SChris Lattner   size_t len;
44930fdc8d8SChris Lattner 
450bb19a13cSSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(target_sp->GetAPIMutex());
451af67cecdSGreg Clayton 
452b9c1b51eSKate Stone   if (event_type &
453b9c1b51eSKate Stone       (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) {
454af67cecdSGreg Clayton     // Drain stdout when we stop just in case we have any bytes
45530fdc8d8SChris Lattner     while ((len = process.GetSTDOUT(stdio_buffer, sizeof(stdio_buffer))) > 0)
456dbb0abbfSEugene Zelenko       if (out != nullptr)
45730fdc8d8SChris Lattner         ::fwrite(stdio_buffer, 1, len, out);
45830fdc8d8SChris Lattner   }
459af67cecdSGreg Clayton 
460b9c1b51eSKate Stone   if (event_type &
461b9c1b51eSKate Stone       (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) {
462af67cecdSGreg Clayton     // Drain stderr when we stop just in case we have any bytes
46330fdc8d8SChris Lattner     while ((len = process.GetSTDERR(stdio_buffer, sizeof(stdio_buffer))) > 0)
464dbb0abbfSEugene Zelenko       if (err != nullptr)
465af67cecdSGreg Clayton         ::fwrite(stdio_buffer, 1, len, err);
46630fdc8d8SChris Lattner   }
467af67cecdSGreg Clayton 
468b9c1b51eSKate Stone   if (event_type & Process::eBroadcastBitStateChanged) {
46930fdc8d8SChris Lattner     StateType event_state = SBProcess::GetStateFromEvent(event);
47030fdc8d8SChris Lattner 
47130fdc8d8SChris Lattner     if (event_state == eStateInvalid)
47230fdc8d8SChris Lattner       return;
47330fdc8d8SChris Lattner 
47430fdc8d8SChris Lattner     bool is_stopped = StateIsStoppedState(event_state);
47530fdc8d8SChris Lattner     if (!is_stopped)
4762976d00aSJim Ingham       process.ReportEventState(event, out);
47730fdc8d8SChris Lattner   }
47830fdc8d8SChris Lattner }
47930fdc8d8SChris Lattner 
480b9c1b51eSKate Stone SBSourceManager SBDebugger::GetSourceManager() {
481baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBSourceManager, SBDebugger,
482baf5664fSJonas Devlieghere                              GetSourceManager);
483baf5664fSJonas Devlieghere 
484e37d605eSJim Ingham   SBSourceManager sb_source_manager(*this);
485baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_source_manager);
48630fdc8d8SChris Lattner }
48730fdc8d8SChris Lattner 
488b9c1b51eSKate Stone bool SBDebugger::GetDefaultArchitecture(char *arch_name, size_t arch_name_len) {
489baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, GetDefaultArchitecture,
490baf5664fSJonas Devlieghere                             (char *, size_t), "", arch_name_len);
491baf5664fSJonas Devlieghere 
492b9c1b51eSKate Stone   if (arch_name && arch_name_len) {
493431ce678SGreg Clayton     ArchSpec default_arch = Target::GetDefaultArchitecture();
494daccaa9eSCaroline Tice 
495b9c1b51eSKate Stone     if (default_arch.IsValid()) {
496431ce678SGreg Clayton       const std::string &triple_str = default_arch.GetTriple().str();
497431ce678SGreg Clayton       if (!triple_str.empty())
498431ce678SGreg Clayton         ::snprintf(arch_name, arch_name_len, "%s", triple_str.c_str());
499431ce678SGreg Clayton       else
500b9c1b51eSKate Stone         ::snprintf(arch_name, arch_name_len, "%s",
501b9c1b51eSKate Stone                    default_arch.GetArchitectureName());
50230fdc8d8SChris Lattner       return true;
50330fdc8d8SChris Lattner     }
50430fdc8d8SChris Lattner   }
50530fdc8d8SChris Lattner   if (arch_name && arch_name_len)
50630fdc8d8SChris Lattner     arch_name[0] = '\0';
50730fdc8d8SChris Lattner   return false;
50830fdc8d8SChris Lattner }
50930fdc8d8SChris Lattner 
510b9c1b51eSKate Stone bool SBDebugger::SetDefaultArchitecture(const char *arch_name) {
511baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture,
512baf5664fSJonas Devlieghere                             (const char *), arch_name);
513baf5664fSJonas Devlieghere 
514b9c1b51eSKate Stone   if (arch_name) {
51570512317SGreg Clayton     ArchSpec arch(arch_name);
516b9c1b51eSKate Stone     if (arch.IsValid()) {
517431ce678SGreg Clayton       Target::SetDefaultArchitecture(arch);
51830fdc8d8SChris Lattner       return true;
51930fdc8d8SChris Lattner     }
52030fdc8d8SChris Lattner   }
52130fdc8d8SChris Lattner   return false;
52230fdc8d8SChris Lattner }
52330fdc8d8SChris Lattner 
52430fdc8d8SChris Lattner ScriptLanguage
525b9c1b51eSKate Stone SBDebugger::GetScriptingLanguage(const char *script_language_name) {
526baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage,
527baf5664fSJonas Devlieghere                      (const char *), script_language_name);
528baf5664fSJonas Devlieghere 
529d9aec34bSJonas Devlieghere   if (!script_language_name)
530d9aec34bSJonas Devlieghere     return eScriptLanguageDefault;
53147cbf4a0SPavel Labath   return OptionArgParser::ToScriptLanguage(
53247cbf4a0SPavel Labath       llvm::StringRef(script_language_name), eScriptLanguageDefault, nullptr);
53330fdc8d8SChris Lattner }
53430fdc8d8SChris Lattner 
535b9c1b51eSKate Stone const char *SBDebugger::GetVersionString() {
536baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(const char *, SBDebugger, GetVersionString);
537baf5664fSJonas Devlieghere 
538b2f1fb29SVirgile Bello   return lldb_private::GetVersion();
53930fdc8d8SChris Lattner }
54030fdc8d8SChris Lattner 
541b9c1b51eSKate Stone const char *SBDebugger::StateAsCString(StateType state) {
542baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(const char *, SBDebugger, StateAsCString,
543baf5664fSJonas Devlieghere                             (lldb::StateType), state);
544baf5664fSJonas Devlieghere 
545c2bbb49aSCaroline Tice   return lldb_private::StateAsCString(state);
54630fdc8d8SChris Lattner }
54730fdc8d8SChris Lattner 
548f1389e92SPavel Labath static void AddBoolConfigEntry(StructuredData::Dictionary &dict,
549f1389e92SPavel Labath                                llvm::StringRef name, bool value,
550f1389e92SPavel Labath                                llvm::StringRef description) {
551a8f3ae7cSJonas Devlieghere   auto entry_up = std::make_unique<StructuredData::Dictionary>();
552f1389e92SPavel Labath   entry_up->AddBooleanItem("value", value);
553f1389e92SPavel Labath   entry_up->AddStringItem("description", description);
554f1389e92SPavel Labath   dict.AddItem(name, std::move(entry_up));
555f1389e92SPavel Labath }
556f1389e92SPavel Labath 
557abc0c6adSPavel Labath static void AddLLVMTargets(StructuredData::Dictionary &dict) {
558a8f3ae7cSJonas Devlieghere   auto array_up = std::make_unique<StructuredData::Array>();
559abc0c6adSPavel Labath #define LLVM_TARGET(target)                                                    \
560a8f3ae7cSJonas Devlieghere   array_up->AddItem(std::make_unique<StructuredData::String>(#target));
561abc0c6adSPavel Labath #include "llvm/Config/Targets.def"
562a8f3ae7cSJonas Devlieghere   auto entry_up = std::make_unique<StructuredData::Dictionary>();
563abc0c6adSPavel Labath   entry_up->AddItem("value", std::move(array_up));
564abc0c6adSPavel Labath   entry_up->AddStringItem("description", "A list of configured LLVM targets.");
565abc0c6adSPavel Labath   dict.AddItem("targets", std::move(entry_up));
566abc0c6adSPavel Labath }
567abc0c6adSPavel Labath 
568f1389e92SPavel Labath SBStructuredData SBDebugger::GetBuildConfiguration() {
569baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBStructuredData, SBDebugger,
570baf5664fSJonas Devlieghere                                     GetBuildConfiguration);
571baf5664fSJonas Devlieghere 
572a8f3ae7cSJonas Devlieghere   auto config_up = std::make_unique<StructuredData::Dictionary>();
573f1389e92SPavel Labath   AddBoolConfigEntry(
574f1389e92SPavel Labath       *config_up, "xml", XMLDocument::XMLEnabled(),
575f1389e92SPavel Labath       "A boolean value that indicates if XML support is enabled in LLDB");
576eafede2aSPavel Labath   bool have_curses = true;
577eafede2aSPavel Labath #ifdef LLDB_DISABLE_CURSES
578eafede2aSPavel Labath   have_curses = false;
579eafede2aSPavel Labath #endif
580eafede2aSPavel Labath   AddBoolConfigEntry(
581eafede2aSPavel Labath       *config_up, "curses", have_curses,
582eafede2aSPavel Labath       "A boolean value that indicates if curses support is enabled in LLDB");
583abc0c6adSPavel Labath   AddLLVMTargets(*config_up);
584f1389e92SPavel Labath 
585f1389e92SPavel Labath   SBStructuredData data;
586f1389e92SPavel Labath   data.m_impl_up->SetObjectSP(std::move(config_up));
587baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(data);
588f1389e92SPavel Labath }
589f1389e92SPavel Labath 
590b9c1b51eSKate Stone bool SBDebugger::StateIsRunningState(StateType state) {
591baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsRunningState,
592baf5664fSJonas Devlieghere                             (lldb::StateType), state);
593baf5664fSJonas Devlieghere 
594c2bbb49aSCaroline Tice   const bool result = lldb_private::StateIsRunningState(state);
5954838131bSGreg Clayton 
5964838131bSGreg Clayton   return result;
59730fdc8d8SChris Lattner }
59830fdc8d8SChris Lattner 
599b9c1b51eSKate Stone bool SBDebugger::StateIsStoppedState(StateType state) {
600baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState,
601baf5664fSJonas Devlieghere                             (lldb::StateType), state);
602baf5664fSJonas Devlieghere 
6032637f825SGreg Clayton   const bool result = lldb_private::StateIsStoppedState(state, false);
604ceb6b139SCaroline Tice 
6054838131bSGreg Clayton   return result;
60630fdc8d8SChris Lattner }
60730fdc8d8SChris Lattner 
608b9c1b51eSKate Stone lldb::SBTarget SBDebugger::CreateTarget(const char *filename,
609cac9c5f9SGreg Clayton                                         const char *target_triple,
610cac9c5f9SGreg Clayton                                         const char *platform_name,
611cac9c5f9SGreg Clayton                                         bool add_dependent_modules,
612b9c1b51eSKate Stone                                         lldb::SBError &sb_error) {
613baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
614baf5664fSJonas Devlieghere       lldb::SBTarget, SBDebugger, CreateTarget,
615baf5664fSJonas Devlieghere       (const char *, const char *, const char *, bool, lldb::SBError &),
616baf5664fSJonas Devlieghere       filename, target_triple, platform_name, add_dependent_modules, sb_error);
617baf5664fSJonas Devlieghere 
618cac9c5f9SGreg Clayton   SBTarget sb_target;
619b9556accSGreg Clayton   TargetSP target_sp;
620b9c1b51eSKate Stone   if (m_opaque_sp) {
621cac9c5f9SGreg Clayton     sb_error.Clear();
622cac9c5f9SGreg Clayton     OptionGroupPlatform platform_options(false);
623cac9c5f9SGreg Clayton     platform_options.SetPlatformName(platform_name);
624cac9c5f9SGreg Clayton 
625b9c1b51eSKate Stone     sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget(
626f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, target_triple,
627f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo,
628b9c1b51eSKate Stone         &platform_options, target_sp);
629cac9c5f9SGreg Clayton 
630cac9c5f9SGreg Clayton     if (sb_error.Success())
631b9556accSGreg Clayton       sb_target.SetSP(target_sp);
632b9c1b51eSKate Stone   } else {
6339f521f22SJim Ingham     sb_error.SetErrorString("invalid debugger");
634cac9c5f9SGreg Clayton   }
635cac9c5f9SGreg Clayton 
6365160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
63763e5fb76SJonas Devlieghere   LLDB_LOGF(log,
63863e5fb76SJonas Devlieghere             "SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, "
639b9c1b51eSKate Stone             "platform_name=%s, add_dependent_modules=%u, error=%s) => "
640b9c1b51eSKate Stone             "SBTarget(%p)",
641b9c1b51eSKate Stone             static_cast<void *>(m_opaque_sp.get()), filename, target_triple,
642b9c1b51eSKate Stone             platform_name, add_dependent_modules, sb_error.GetCString(),
643b9c1b51eSKate Stone             static_cast<void *>(target_sp.get()));
644cac9c5f9SGreg Clayton 
645baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
646cac9c5f9SGreg Clayton }
64730fdc8d8SChris Lattner 
64830fdc8d8SChris Lattner SBTarget
64930fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple(const char *filename,
650b9c1b51eSKate Stone                                                 const char *target_triple) {
651baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger,
652baf5664fSJonas Devlieghere                      CreateTargetWithFileAndTargetTriple,
653baf5664fSJonas Devlieghere                      (const char *, const char *), filename, target_triple);
654baf5664fSJonas Devlieghere 
655b9556accSGreg Clayton   SBTarget sb_target;
656b9556accSGreg Clayton   TargetSP target_sp;
657b9c1b51eSKate Stone   if (m_opaque_sp) {
658cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
65997206d57SZachary Turner     Status error(m_opaque_sp->GetTargetList().CreateTarget(
660f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, target_triple,
661f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
662cac9c5f9SGreg Clayton         target_sp));
663b9556accSGreg Clayton     sb_target.SetSP(target_sp);
6646611103cSGreg Clayton   }
6654838131bSGreg Clayton 
6665160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
66763e5fb76SJonas Devlieghere   LLDB_LOGF(log,
66863e5fb76SJonas Devlieghere             "SBDebugger(%p)::CreateTargetWithFileAndTargetTriple "
669b9c1b51eSKate Stone             "(filename=\"%s\", triple=%s) => SBTarget(%p)",
670b9c1b51eSKate Stone             static_cast<void *>(m_opaque_sp.get()), filename, target_triple,
671b9c1b51eSKate Stone             static_cast<void *>(target_sp.get()));
6724838131bSGreg Clayton 
673baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
67430fdc8d8SChris Lattner }
67530fdc8d8SChris Lattner 
676b9c1b51eSKate Stone SBTarget SBDebugger::CreateTargetWithFileAndArch(const char *filename,
677b9c1b51eSKate Stone                                                  const char *arch_cstr) {
678baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTargetWithFileAndArch,
679baf5664fSJonas Devlieghere                      (const char *, const char *), filename, arch_cstr);
680baf5664fSJonas Devlieghere 
6815160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
682ceb6b139SCaroline Tice 
683b9556accSGreg Clayton   SBTarget sb_target;
684b9556accSGreg Clayton   TargetSP target_sp;
685b9c1b51eSKate Stone   if (m_opaque_sp) {
68697206d57SZachary Turner     Status error;
687cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
68830fdc8d8SChris Lattner 
689b9c1b51eSKate Stone     error = m_opaque_sp->GetTargetList().CreateTarget(
690f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, arch_cstr,
691f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
692cac9c5f9SGreg Clayton         target_sp);
69330fdc8d8SChris Lattner 
694b9c1b51eSKate Stone     if (error.Success()) {
6952976d00aSJim Ingham       m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
696b9556accSGreg Clayton       sb_target.SetSP(target_sp);
6976611103cSGreg Clayton     }
6986611103cSGreg Clayton   }
699ceb6b139SCaroline Tice 
70063e5fb76SJonas Devlieghere   LLDB_LOGF(log,
70163e5fb76SJonas Devlieghere             "SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", "
702b9c1b51eSKate Stone             "arch=%s) => SBTarget(%p)",
703324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()), filename, arch_cstr,
704324a1036SSaleem Abdulrasool             static_cast<void *>(target_sp.get()));
705ceb6b139SCaroline Tice 
706baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
70730fdc8d8SChris Lattner }
70830fdc8d8SChris Lattner 
709b9c1b51eSKate Stone SBTarget SBDebugger::CreateTarget(const char *filename) {
710baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTarget, (const char *),
711baf5664fSJonas Devlieghere                      filename);
712baf5664fSJonas Devlieghere 
713b9556accSGreg Clayton   SBTarget sb_target;
714b9556accSGreg Clayton   TargetSP target_sp;
715b9c1b51eSKate Stone   if (m_opaque_sp) {
71697206d57SZachary Turner     Status error;
717cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
718b9c1b51eSKate Stone     error = m_opaque_sp->GetTargetList().CreateTarget(
719f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, "",
720f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
721f9a07e9fSJonas Devlieghere         target_sp);
72230fdc8d8SChris Lattner 
723b9c1b51eSKate Stone     if (error.Success()) {
7242976d00aSJim Ingham       m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
725b9556accSGreg Clayton       sb_target.SetSP(target_sp);
7266611103cSGreg Clayton     }
7276611103cSGreg Clayton   }
7285160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
72963e5fb76SJonas Devlieghere   LLDB_LOGF(log,
730b9c1b51eSKate Stone             "SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
731324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()), filename,
732324a1036SSaleem Abdulrasool             static_cast<void *>(target_sp.get()));
733baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
73430fdc8d8SChris Lattner }
73530fdc8d8SChris Lattner 
736b842f2ecSJim Ingham SBTarget SBDebugger::GetDummyTarget() {
737baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetDummyTarget);
738baf5664fSJonas Devlieghere 
739b842f2ecSJim Ingham   SBTarget sb_target;
740b842f2ecSJim Ingham   if (m_opaque_sp) {
741b842f2ecSJim Ingham     sb_target.SetSP(m_opaque_sp->GetDummyTarget()->shared_from_this());
742b842f2ecSJim Ingham   }
743b842f2ecSJim Ingham   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
74463e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::GetDummyTarget() => SBTarget(%p)",
745b842f2ecSJim Ingham             static_cast<void *>(m_opaque_sp.get()),
746b842f2ecSJim Ingham             static_cast<void *>(sb_target.GetSP().get()));
747baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
748b842f2ecSJim Ingham }
749b842f2ecSJim Ingham 
750b9c1b51eSKate Stone bool SBDebugger::DeleteTarget(lldb::SBTarget &target) {
751baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &),
752baf5664fSJonas Devlieghere                      target);
753baf5664fSJonas Devlieghere 
7543794ad95SJohnny Chen   bool result = false;
755b9c1b51eSKate Stone   if (m_opaque_sp) {
756b9556accSGreg Clayton     TargetSP target_sp(target.GetSP());
757b9c1b51eSKate Stone     if (target_sp) {
7583794ad95SJohnny Chen       // No need to lock, the target list is thread safe
759b9556accSGreg Clayton       result = m_opaque_sp->GetTargetList().DeleteTarget(target_sp);
760b9556accSGreg Clayton       target_sp->Destroy();
76175340622SGreg Clayton       target.Clear();
7620cd70866SGreg Clayton       const bool mandatory = true;
7630cd70866SGreg Clayton       ModuleList::RemoveOrphanSharedModules(mandatory);
7643794ad95SJohnny Chen     }
765b9556accSGreg Clayton   }
7663794ad95SJohnny Chen 
7675160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
76863e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i",
769324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
770324a1036SSaleem Abdulrasool             static_cast<void *>(target.m_opaque_sp.get()), result);
7713794ad95SJohnny Chen 
7723794ad95SJohnny Chen   return result;
7733794ad95SJohnny Chen }
774dbb0abbfSEugene Zelenko 
775b9c1b51eSKate Stone SBTarget SBDebugger::GetTargetAtIndex(uint32_t idx) {
776baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex, (uint32_t),
777baf5664fSJonas Devlieghere                      idx);
778baf5664fSJonas Devlieghere 
7796611103cSGreg Clayton   SBTarget sb_target;
780b9c1b51eSKate Stone   if (m_opaque_sp) {
781af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
782b9556accSGreg Clayton     sb_target.SetSP(m_opaque_sp->GetTargetList().GetTargetAtIndex(idx));
783af67cecdSGreg Clayton   }
784baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
78530fdc8d8SChris Lattner }
78630fdc8d8SChris Lattner 
787b9c1b51eSKate Stone uint32_t SBDebugger::GetIndexOfTarget(lldb::SBTarget target) {
788baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBDebugger, GetIndexOfTarget, (lldb::SBTarget),
789baf5664fSJonas Devlieghere                      target);
7908499e1a4SJim Ingham 
7918499e1a4SJim Ingham   lldb::TargetSP target_sp = target.GetSP();
7928499e1a4SJim Ingham   if (!target_sp)
7938499e1a4SJim Ingham     return UINT32_MAX;
7948499e1a4SJim Ingham 
7958499e1a4SJim Ingham   if (!m_opaque_sp)
7968499e1a4SJim Ingham     return UINT32_MAX;
7978499e1a4SJim Ingham 
7988499e1a4SJim Ingham   return m_opaque_sp->GetTargetList().GetIndexOfTarget(target.GetSP());
7998499e1a4SJim Ingham }
8008499e1a4SJim Ingham 
801b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithProcessID(lldb::pid_t pid) {
802baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID,
803baf5664fSJonas Devlieghere                      (lldb::pid_t), pid);
804baf5664fSJonas Devlieghere 
8056611103cSGreg Clayton   SBTarget sb_target;
806b9c1b51eSKate Stone   if (m_opaque_sp) {
807af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
808b9556accSGreg Clayton     sb_target.SetSP(m_opaque_sp->GetTargetList().FindTargetWithProcessID(pid));
809af67cecdSGreg Clayton   }
810baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
81130fdc8d8SChris Lattner }
81230fdc8d8SChris Lattner 
813b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithFileAndArch(const char *filename,
814b9c1b51eSKate Stone                                                const char *arch_name) {
815baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch,
816baf5664fSJonas Devlieghere                      (const char *, const char *), filename, arch_name);
817baf5664fSJonas Devlieghere 
8186611103cSGreg Clayton   SBTarget sb_target;
819b9c1b51eSKate Stone   if (m_opaque_sp && filename && filename[0]) {
820af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
8217263f1bdSPavel Labath     ArchSpec arch = Platform::GetAugmentedArchSpec(
8227263f1bdSPavel Labath         m_opaque_sp->GetPlatformList().GetSelectedPlatform().get(), arch_name);
823b9c1b51eSKate Stone     TargetSP target_sp(
824b9c1b51eSKate Stone         m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture(
8258f3be7a3SJonas Devlieghere             FileSpec(filename), arch_name ? &arch : nullptr));
826b9556accSGreg Clayton     sb_target.SetSP(target_sp);
8276611103cSGreg Clayton   }
828baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
82930fdc8d8SChris Lattner }
83030fdc8d8SChris Lattner 
831b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithLLDBProcess(const ProcessSP &process_sp) {
8326611103cSGreg Clayton   SBTarget sb_target;
833b9c1b51eSKate Stone   if (m_opaque_sp) {
834af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
835b9c1b51eSKate Stone     sb_target.SetSP(
836b9c1b51eSKate Stone         m_opaque_sp->GetTargetList().FindTargetWithProcess(process_sp.get()));
837af67cecdSGreg Clayton   }
83830fdc8d8SChris Lattner   return sb_target;
83930fdc8d8SChris Lattner }
84030fdc8d8SChris Lattner 
841b9c1b51eSKate Stone uint32_t SBDebugger::GetNumTargets() {
842baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumTargets);
843baf5664fSJonas Devlieghere 
844b9c1b51eSKate Stone   if (m_opaque_sp) {
845af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
8466611103cSGreg Clayton     return m_opaque_sp->GetTargetList().GetNumTargets();
847af67cecdSGreg Clayton   }
8486611103cSGreg Clayton   return 0;
8496611103cSGreg Clayton }
85030fdc8d8SChris Lattner 
851b9c1b51eSKate Stone SBTarget SBDebugger::GetSelectedTarget() {
852baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetSelectedTarget);
853baf5664fSJonas Devlieghere 
8545160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
855ceb6b139SCaroline Tice 
8566611103cSGreg Clayton   SBTarget sb_target;
857b9556accSGreg Clayton   TargetSP target_sp;
858b9c1b51eSKate Stone   if (m_opaque_sp) {
859af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
860b9556accSGreg Clayton     target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget();
861b9556accSGreg Clayton     sb_target.SetSP(target_sp);
862af67cecdSGreg Clayton   }
863ceb6b139SCaroline Tice 
864b9c1b51eSKate Stone   if (log) {
865ceb6b139SCaroline Tice     SBStream sstr;
866431ce678SGreg Clayton     sb_target.GetDescription(sstr, eDescriptionLevelBrief);
86763e5fb76SJonas Devlieghere     LLDB_LOGF(log, "SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s",
868324a1036SSaleem Abdulrasool               static_cast<void *>(m_opaque_sp.get()),
869324a1036SSaleem Abdulrasool               static_cast<void *>(target_sp.get()), sstr.GetData());
870ceb6b139SCaroline Tice   }
871ceb6b139SCaroline Tice 
872baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
87330fdc8d8SChris Lattner }
87430fdc8d8SChris Lattner 
875b9c1b51eSKate Stone void SBDebugger::SetSelectedTarget(SBTarget &sb_target) {
876baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedTarget, (lldb::SBTarget &),
877baf5664fSJonas Devlieghere                      sb_target);
878baf5664fSJonas Devlieghere 
8795160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
880e64f0dc7SJim Ingham 
881b9556accSGreg Clayton   TargetSP target_sp(sb_target.GetSP());
882b9c1b51eSKate Stone   if (m_opaque_sp) {
883b9556accSGreg Clayton     m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
884e64f0dc7SJim Ingham   }
885b9c1b51eSKate Stone   if (log) {
886e64f0dc7SJim Ingham     SBStream sstr;
887e64f0dc7SJim Ingham     sb_target.GetDescription(sstr, eDescriptionLevelBrief);
88863e5fb76SJonas Devlieghere     LLDB_LOGF(log, "SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s",
889324a1036SSaleem Abdulrasool               static_cast<void *>(m_opaque_sp.get()),
890324a1036SSaleem Abdulrasool               static_cast<void *>(target_sp.get()), sstr.GetData());
891e64f0dc7SJim Ingham   }
892e64f0dc7SJim Ingham }
893e64f0dc7SJim Ingham 
894b9c1b51eSKate Stone SBPlatform SBDebugger::GetSelectedPlatform() {
895baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBPlatform, SBDebugger, GetSelectedPlatform);
896baf5664fSJonas Devlieghere 
897fbb76349SGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
898fbb76349SGreg Clayton 
899fbb76349SGreg Clayton   SBPlatform sb_platform;
900fbb76349SGreg Clayton   DebuggerSP debugger_sp(m_opaque_sp);
901b9c1b51eSKate Stone   if (debugger_sp) {
902fbb76349SGreg Clayton     sb_platform.SetSP(debugger_sp->GetPlatformList().GetSelectedPlatform());
903fbb76349SGreg Clayton   }
90463e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::GetSelectedPlatform () => SBPlatform(%p): %s",
905324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
906324a1036SSaleem Abdulrasool             static_cast<void *>(sb_platform.GetSP().get()),
907324a1036SSaleem Abdulrasool             sb_platform.GetName());
908baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_platform);
909fbb76349SGreg Clayton }
910fbb76349SGreg Clayton 
911b9c1b51eSKate Stone void SBDebugger::SetSelectedPlatform(SBPlatform &sb_platform) {
912baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedPlatform,
913baf5664fSJonas Devlieghere                      (lldb::SBPlatform &), sb_platform);
914baf5664fSJonas Devlieghere 
915fbb76349SGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
916fbb76349SGreg Clayton 
917fbb76349SGreg Clayton   DebuggerSP debugger_sp(m_opaque_sp);
918b9c1b51eSKate Stone   if (debugger_sp) {
919fbb76349SGreg Clayton     debugger_sp->GetPlatformList().SetSelectedPlatform(sb_platform.GetSP());
920fbb76349SGreg Clayton   }
921324a1036SSaleem Abdulrasool 
92263e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::SetSelectedPlatform (SBPlatform(%p) %s)",
923324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
924324a1036SSaleem Abdulrasool             static_cast<void *>(sb_platform.GetSP().get()),
925324a1036SSaleem Abdulrasool             sb_platform.GetName());
926fbb76349SGreg Clayton }
927fbb76349SGreg Clayton 
928c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumPlatforms() {
929baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumPlatforms);
930baf5664fSJonas Devlieghere 
931c10e34d0SVadim Macagon   if (m_opaque_sp) {
932c10e34d0SVadim Macagon     // No need to lock, the platform list is thread safe
933c10e34d0SVadim Macagon     return m_opaque_sp->GetPlatformList().GetSize();
934c10e34d0SVadim Macagon   }
935c10e34d0SVadim Macagon   return 0;
936c10e34d0SVadim Macagon }
937c10e34d0SVadim Macagon 
938c10e34d0SVadim Macagon SBPlatform SBDebugger::GetPlatformAtIndex(uint32_t idx) {
939baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex,
940baf5664fSJonas Devlieghere                      (uint32_t), idx);
941baf5664fSJonas Devlieghere 
942c10e34d0SVadim Macagon   SBPlatform sb_platform;
943c10e34d0SVadim Macagon   if (m_opaque_sp) {
944c10e34d0SVadim Macagon     // No need to lock, the platform list is thread safe
945c10e34d0SVadim Macagon     sb_platform.SetSP(m_opaque_sp->GetPlatformList().GetAtIndex(idx));
946c10e34d0SVadim Macagon   }
947baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_platform);
948c10e34d0SVadim Macagon }
949c10e34d0SVadim Macagon 
950c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumAvailablePlatforms() {
951baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumAvailablePlatforms);
952baf5664fSJonas Devlieghere 
953c10e34d0SVadim Macagon   uint32_t idx = 0;
954c10e34d0SVadim Macagon   while (true) {
955c10e34d0SVadim Macagon     if (!PluginManager::GetPlatformPluginNameAtIndex(idx)) {
956c10e34d0SVadim Macagon       break;
957c10e34d0SVadim Macagon     }
958c10e34d0SVadim Macagon     ++idx;
959c10e34d0SVadim Macagon   }
960c10e34d0SVadim Macagon   // +1 for the host platform, which should always appear first in the list.
961c10e34d0SVadim Macagon   return idx + 1;
962c10e34d0SVadim Macagon }
963c10e34d0SVadim Macagon 
964c10e34d0SVadim Macagon SBStructuredData SBDebugger::GetAvailablePlatformInfoAtIndex(uint32_t idx) {
965baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBStructuredData, SBDebugger,
966baf5664fSJonas Devlieghere                      GetAvailablePlatformInfoAtIndex, (uint32_t), idx);
967baf5664fSJonas Devlieghere 
968c10e34d0SVadim Macagon   SBStructuredData data;
969a8f3ae7cSJonas Devlieghere   auto platform_dict = std::make_unique<StructuredData::Dictionary>();
970c10e34d0SVadim Macagon   llvm::StringRef name_str("name"), desc_str("description");
971c10e34d0SVadim Macagon 
972c10e34d0SVadim Macagon   if (idx == 0) {
973c10e34d0SVadim Macagon     PlatformSP host_platform_sp(Platform::GetHostPlatform());
974c10e34d0SVadim Macagon     platform_dict->AddStringItem(
975c10e34d0SVadim Macagon         name_str, host_platform_sp->GetPluginName().GetStringRef());
976c10e34d0SVadim Macagon     platform_dict->AddStringItem(
977c10e34d0SVadim Macagon         desc_str, llvm::StringRef(host_platform_sp->GetDescription()));
978c10e34d0SVadim Macagon   } else if (idx > 0) {
979c10e34d0SVadim Macagon     const char *plugin_name =
980c10e34d0SVadim Macagon         PluginManager::GetPlatformPluginNameAtIndex(idx - 1);
981c10e34d0SVadim Macagon     if (!plugin_name) {
982baf5664fSJonas Devlieghere       return LLDB_RECORD_RESULT(data);
983c10e34d0SVadim Macagon     }
984c10e34d0SVadim Macagon     platform_dict->AddStringItem(name_str, llvm::StringRef(plugin_name));
985c10e34d0SVadim Macagon 
986c10e34d0SVadim Macagon     const char *plugin_desc =
987c10e34d0SVadim Macagon         PluginManager::GetPlatformPluginDescriptionAtIndex(idx - 1);
988c10e34d0SVadim Macagon     if (!plugin_desc) {
989baf5664fSJonas Devlieghere       return LLDB_RECORD_RESULT(data);
990c10e34d0SVadim Macagon     }
991c10e34d0SVadim Macagon     platform_dict->AddStringItem(desc_str, llvm::StringRef(plugin_desc));
992c10e34d0SVadim Macagon   }
993c10e34d0SVadim Macagon 
994c10e34d0SVadim Macagon   data.m_impl_up->SetObjectSP(
995c10e34d0SVadim Macagon       StructuredData::ObjectSP(platform_dict.release()));
996baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(data);
997c10e34d0SVadim Macagon }
998c10e34d0SVadim Macagon 
999b9c1b51eSKate Stone void SBDebugger::DispatchInput(void *baton, const void *data, size_t data_len) {
10000d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput,
10010d7b0c96SJonas Devlieghere                     (void *, const void *, size_t), baton, data, data_len);
10020d7b0c96SJonas Devlieghere 
10036b09d423SEnrico Granata   DispatchInput(data, data_len);
10046b09d423SEnrico Granata }
10056b09d423SEnrico Granata 
1006b9c1b51eSKate Stone void SBDebugger::DispatchInput(const void *data, size_t data_len) {
10070d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput, (const void *, size_t),
10080d7b0c96SJonas Devlieghere                     data, data_len);
10090d7b0c96SJonas Devlieghere 
101044d93782SGreg Clayton   //    Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
101144d93782SGreg Clayton   //
101244d93782SGreg Clayton   //    if (log)
101363e5fb76SJonas Devlieghere   //        LLDB_LOGF(log, "SBDebugger(%p)::DispatchInput (data=\"%.*s\",
1014b9c1b51eSKate Stone   //        size_t=%" PRIu64 ")",
101544d93782SGreg Clayton   //                     m_opaque_sp.get(),
101644d93782SGreg Clayton   //                     (int) data_len,
101744d93782SGreg Clayton   //                     (const char *) data,
101844d93782SGreg Clayton   //                     (uint64_t)data_len);
101944d93782SGreg Clayton   //
102044d93782SGreg Clayton   //    if (m_opaque_sp)
102144d93782SGreg Clayton   //        m_opaque_sp->DispatchInput ((const char *) data, data_len);
102230fdc8d8SChris Lattner }
102330fdc8d8SChris Lattner 
1024b9c1b51eSKate Stone void SBDebugger::DispatchInputInterrupt() {
1025baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, DispatchInputInterrupt);
1026baf5664fSJonas Devlieghere 
1027efed6131SCaroline Tice   if (m_opaque_sp)
1028efed6131SCaroline Tice     m_opaque_sp->DispatchInputInterrupt();
1029efed6131SCaroline Tice }
1030efed6131SCaroline Tice 
1031b9c1b51eSKate Stone void SBDebugger::DispatchInputEndOfFile() {
1032baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, DispatchInputEndOfFile);
1033baf5664fSJonas Devlieghere 
1034efed6131SCaroline Tice   if (m_opaque_sp)
1035efed6131SCaroline Tice     m_opaque_sp->DispatchInputEndOfFile();
1036efed6131SCaroline Tice }
10379088b068SCaroline Tice 
1038baf5664fSJonas Devlieghere void SBDebugger::PushInputReader(SBInputReader &reader) {
1039baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, PushInputReader, (lldb::SBInputReader &),
1040baf5664fSJonas Devlieghere                      reader);
1041baf5664fSJonas Devlieghere }
10426611103cSGreg Clayton 
1043b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events,
1044b9c1b51eSKate Stone                                        bool spawn_thread) {
1045baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool),
1046baf5664fSJonas Devlieghere                      auto_handle_events, spawn_thread);
1047baf5664fSJonas Devlieghere 
1048b9c1b51eSKate Stone   if (m_opaque_sp) {
104926c7bf93SJim Ingham     CommandInterpreterRunOptions options;
105026c7bf93SJim Ingham 
1051b9c1b51eSKate Stone     m_opaque_sp->GetCommandInterpreter().RunCommandInterpreter(
1052b9c1b51eSKate Stone         auto_handle_events, spawn_thread, options);
105326c7bf93SJim Ingham   }
105426c7bf93SJim Ingham }
105526c7bf93SJim Ingham 
1056b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events,
105726c7bf93SJim Ingham                                        bool spawn_thread,
105826c7bf93SJim Ingham                                        SBCommandInterpreterRunOptions &options,
1059b9c1b51eSKate Stone                                        int &num_errors, bool &quit_requested,
1060ffc9f1deSJim Ingham                                        bool &stopped_for_crash)
106126c7bf93SJim Ingham 
106226c7bf93SJim Ingham {
1063baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter,
1064baf5664fSJonas Devlieghere                      (bool, bool, lldb::SBCommandInterpreterRunOptions &, int &,
1065baf5664fSJonas Devlieghere                       bool &, bool &),
1066baf5664fSJonas Devlieghere                      auto_handle_events, spawn_thread, options, num_errors,
1067baf5664fSJonas Devlieghere                      quit_requested, stopped_for_crash);
1068baf5664fSJonas Devlieghere 
1069b9c1b51eSKate Stone   if (m_opaque_sp) {
107026c7bf93SJim Ingham     CommandInterpreter &interp = m_opaque_sp->GetCommandInterpreter();
1071b9c1b51eSKate Stone     interp.RunCommandInterpreter(auto_handle_events, spawn_thread,
1072b9c1b51eSKate Stone                                  options.ref());
107326c7bf93SJim Ingham     num_errors = interp.GetNumErrors();
107426c7bf93SJim Ingham     quit_requested = interp.GetQuitRequested();
1075ffc9f1deSJim Ingham     stopped_for_crash = interp.GetStoppedForCrash();
107626c7bf93SJim Ingham   }
1077969ed3d1SCaroline Tice }
1078969ed3d1SCaroline Tice 
1079b9c1b51eSKate Stone SBError SBDebugger::RunREPL(lldb::LanguageType language,
1080b9c1b51eSKate Stone                             const char *repl_options) {
1081baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, RunREPL,
1082baf5664fSJonas Devlieghere                      (lldb::LanguageType, const char *), language,
1083baf5664fSJonas Devlieghere                      repl_options);
1084baf5664fSJonas Devlieghere 
10853e7e915dSSean Callanan   SBError error;
10863e7e915dSSean Callanan   if (m_opaque_sp)
10873e7e915dSSean Callanan     error.ref() = m_opaque_sp->RunREPL(language, repl_options);
10883e7e915dSSean Callanan   else
10893e7e915dSSean Callanan     error.SetErrorString("invalid debugger");
1090baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(error);
10913e7e915dSSean Callanan }
10923e7e915dSSean Callanan 
1093b9c1b51eSKate Stone void SBDebugger::reset(const DebuggerSP &debugger_sp) {
10946611103cSGreg Clayton   m_opaque_sp = debugger_sp;
10956611103cSGreg Clayton }
10966611103cSGreg Clayton 
1097b9c1b51eSKate Stone Debugger *SBDebugger::get() const { return m_opaque_sp.get(); }
10986611103cSGreg Clayton 
1099b9c1b51eSKate Stone Debugger &SBDebugger::ref() const {
11006611103cSGreg Clayton   assert(m_opaque_sp.get());
11016611103cSGreg Clayton   return *m_opaque_sp;
11026611103cSGreg Clayton }
11036611103cSGreg Clayton 
1104b9c1b51eSKate Stone const lldb::DebuggerSP &SBDebugger::get_sp() const { return m_opaque_sp; }
11056611103cSGreg Clayton 
1106b9c1b51eSKate Stone SBDebugger SBDebugger::FindDebuggerWithID(int id) {
1107baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, FindDebuggerWithID,
1108baf5664fSJonas Devlieghere                             (int), id);
1109baf5664fSJonas Devlieghere 
1110af67cecdSGreg Clayton   // No need to lock, the debugger list is thread safe
1111ebc1bb27SCaroline Tice   SBDebugger sb_debugger;
1112431ce678SGreg Clayton   DebuggerSP debugger_sp = Debugger::FindDebuggerWithID(id);
1113ebc1bb27SCaroline Tice   if (debugger_sp)
1114ebc1bb27SCaroline Tice     sb_debugger.reset(debugger_sp);
1115baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_debugger);
1116ebc1bb27SCaroline Tice }
1117e40e4218SJim Ingham 
1118b9c1b51eSKate Stone const char *SBDebugger::GetInstanceName() {
1119baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBDebugger, GetInstanceName);
1120baf5664fSJonas Devlieghere 
1121dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetInstanceName().AsCString() : nullptr);
1122dd759857SCaroline Tice }
1123dd759857SCaroline Tice 
1124b9c1b51eSKate Stone SBError SBDebugger::SetInternalVariable(const char *var_name, const char *value,
1125b9c1b51eSKate Stone                                         const char *debugger_instance_name) {
1126baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable,
1127baf5664fSJonas Devlieghere                             (const char *, const char *, const char *),
1128baf5664fSJonas Devlieghere                             var_name, value, debugger_instance_name);
1129baf5664fSJonas Devlieghere 
11306920b52bSGreg Clayton   SBError sb_error;
1131b9c1b51eSKate Stone   DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName(
1132b9c1b51eSKate Stone       ConstString(debugger_instance_name)));
113397206d57SZachary Turner   Status error;
1134b9c1b51eSKate Stone   if (debugger_sp) {
1135b9c1b51eSKate Stone     ExecutionContext exe_ctx(
1136b9c1b51eSKate Stone         debugger_sp->GetCommandInterpreter().GetExecutionContext());
1137b9c1b51eSKate Stone     error = debugger_sp->SetPropertyValue(&exe_ctx, eVarSetOperationAssign,
1138b9c1b51eSKate Stone                                           var_name, value);
1139b9c1b51eSKate Stone   } else {
1140b9c1b51eSKate Stone     error.SetErrorStringWithFormat("invalid debugger instance name '%s'",
1141b9c1b51eSKate Stone                                    debugger_instance_name);
11426920b52bSGreg Clayton   }
11436920b52bSGreg Clayton   if (error.Fail())
11446920b52bSGreg Clayton     sb_error.SetError(error);
1145baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
11463df9a8dfSCaroline Tice }
11473df9a8dfSCaroline Tice 
1148431ce678SGreg Clayton SBStringList
1149b9c1b51eSKate Stone SBDebugger::GetInternalVariableValue(const char *var_name,
1150b9c1b51eSKate Stone                                      const char *debugger_instance_name) {
1151baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(
1152baf5664fSJonas Devlieghere       lldb::SBStringList, SBDebugger, GetInternalVariableValue,
1153baf5664fSJonas Devlieghere       (const char *, const char *), var_name, debugger_instance_name);
1154baf5664fSJonas Devlieghere 
11553df9a8dfSCaroline Tice   SBStringList ret_value;
1156b9c1b51eSKate Stone   DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName(
1157b9c1b51eSKate Stone       ConstString(debugger_instance_name)));
115897206d57SZachary Turner   Status error;
1159b9c1b51eSKate Stone   if (debugger_sp) {
1160b9c1b51eSKate Stone     ExecutionContext exe_ctx(
1161b9c1b51eSKate Stone         debugger_sp->GetCommandInterpreter().GetExecutionContext());
1162b9c1b51eSKate Stone     lldb::OptionValueSP value_sp(
1163b9c1b51eSKate Stone         debugger_sp->GetPropertyValue(&exe_ctx, var_name, false, error));
1164b9c1b51eSKate Stone     if (value_sp) {
11656920b52bSGreg Clayton       StreamString value_strm;
11666920b52bSGreg Clayton       value_sp->DumpValue(&exe_ctx, value_strm, OptionValue::eDumpOptionValue);
11676920b52bSGreg Clayton       const std::string &value_str = value_strm.GetString();
1168b9c1b51eSKate Stone       if (!value_str.empty()) {
11696920b52bSGreg Clayton         StringList string_list;
117044d93782SGreg Clayton         string_list.SplitIntoLines(value_str);
1171baf5664fSJonas Devlieghere         return LLDB_RECORD_RESULT(SBStringList(&string_list));
11726920b52bSGreg Clayton       }
11736920b52bSGreg Clayton     }
11746920b52bSGreg Clayton   }
1175baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBStringList());
11763df9a8dfSCaroline Tice }
11773df9a8dfSCaroline Tice 
1178b9c1b51eSKate Stone uint32_t SBDebugger::GetTerminalWidth() const {
1179baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBDebugger, GetTerminalWidth);
1180baf5664fSJonas Devlieghere 
1181dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetTerminalWidth() : 0);
1182a7015092SGreg Clayton }
1183a7015092SGreg Clayton 
1184b9c1b51eSKate Stone void SBDebugger::SetTerminalWidth(uint32_t term_width) {
1185baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetTerminalWidth, (uint32_t),
1186baf5664fSJonas Devlieghere                      term_width);
1187baf5664fSJonas Devlieghere 
1188a7015092SGreg Clayton   if (m_opaque_sp)
1189a7015092SGreg Clayton     m_opaque_sp->SetTerminalWidth(term_width);
1190a7015092SGreg Clayton }
1191a7015092SGreg Clayton 
1192b9c1b51eSKate Stone const char *SBDebugger::GetPrompt() const {
1193baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetPrompt);
1194baf5664fSJonas Devlieghere 
11955160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1196ceb6b139SCaroline Tice 
119763e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::GetPrompt () => \"%s\"",
1198324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
1199514d8cd8SZachary Turner             (m_opaque_sp ? m_opaque_sp->GetPrompt().str().c_str() : ""));
1200ceb6b139SCaroline Tice 
1201514d8cd8SZachary Turner   return (m_opaque_sp ? ConstString(m_opaque_sp->GetPrompt()).GetCString()
1202514d8cd8SZachary Turner                       : nullptr);
1203a7015092SGreg Clayton }
1204a7015092SGreg Clayton 
1205b9c1b51eSKate Stone void SBDebugger::SetPrompt(const char *prompt) {
1206baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetPrompt, (const char *), prompt);
1207baf5664fSJonas Devlieghere 
1208a7015092SGreg Clayton   if (m_opaque_sp)
1209514d8cd8SZachary Turner     m_opaque_sp->SetPrompt(llvm::StringRef::withNullAsEmpty(prompt));
1210a7015092SGreg Clayton }
1211a7015092SGreg Clayton 
12129e046f02SJonas Devlieghere const char *SBDebugger::GetReproducerPath() const {
1213baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetReproducerPath);
1214baf5664fSJonas Devlieghere 
12159e046f02SJonas Devlieghere   return (m_opaque_sp
12169e046f02SJonas Devlieghere               ? ConstString(m_opaque_sp->GetReproducerPath()).GetCString()
12179e046f02SJonas Devlieghere               : nullptr);
12189e046f02SJonas Devlieghere }
12199e046f02SJonas Devlieghere 
1220b9c1b51eSKate Stone ScriptLanguage SBDebugger::GetScriptLanguage() const {
1221baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::ScriptLanguage, SBDebugger,
1222baf5664fSJonas Devlieghere                                    GetScriptLanguage);
1223baf5664fSJonas Devlieghere 
1224dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetScriptLanguage() : eScriptLanguageNone);
1225a7015092SGreg Clayton }
1226a7015092SGreg Clayton 
1227b9c1b51eSKate Stone void SBDebugger::SetScriptLanguage(ScriptLanguage script_lang) {
1228baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetScriptLanguage,
1229baf5664fSJonas Devlieghere                      (lldb::ScriptLanguage), script_lang);
1230baf5664fSJonas Devlieghere 
1231b9c1b51eSKate Stone   if (m_opaque_sp) {
1232a7015092SGreg Clayton     m_opaque_sp->SetScriptLanguage(script_lang);
1233a7015092SGreg Clayton   }
1234af67cecdSGreg Clayton }
1235a7015092SGreg Clayton 
1236b9c1b51eSKate Stone bool SBDebugger::SetUseExternalEditor(bool value) {
1237baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool), value);
1238baf5664fSJonas Devlieghere 
1239dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->SetUseExternalEditor(value) : false);
1240e40e4218SJim Ingham }
1241e40e4218SJim Ingham 
1242b9c1b51eSKate Stone bool SBDebugger::GetUseExternalEditor() {
1243baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetUseExternalEditor);
1244baf5664fSJonas Devlieghere 
1245dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetUseExternalEditor() : false);
1246e40e4218SJim Ingham }
1247e40e4218SJim Ingham 
1248b9c1b51eSKate Stone bool SBDebugger::SetUseColor(bool value) {
1249baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseColor, (bool), value);
1250baf5664fSJonas Devlieghere 
1251dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->SetUseColor(value) : false);
1252c3ce7f27SMichael Sartain }
1253c3ce7f27SMichael Sartain 
1254b9c1b51eSKate Stone bool SBDebugger::GetUseColor() const {
1255baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetUseColor);
1256baf5664fSJonas Devlieghere 
1257dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetUseColor() : false);
1258c3ce7f27SMichael Sartain }
1259c3ce7f27SMichael Sartain 
1260b9c1b51eSKate Stone bool SBDebugger::GetDescription(SBStream &description) {
1261baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &),
1262baf5664fSJonas Devlieghere                      description);
1263baf5664fSJonas Devlieghere 
1264da7bc7d0SGreg Clayton   Stream &strm = description.ref();
1265da7bc7d0SGreg Clayton 
1266b9c1b51eSKate Stone   if (m_opaque_sp) {
1267dde9cff3SCaroline Tice     const char *name = m_opaque_sp->GetInstanceName().AsCString();
1268431ce678SGreg Clayton     user_id_t id = m_opaque_sp->GetID();
1269d01b2953SDaniel Malea     strm.Printf("Debugger (instance: \"%s\", id: %" PRIu64 ")", name, id);
1270b9c1b51eSKate Stone   } else
1271da7bc7d0SGreg Clayton     strm.PutCString("No value");
1272dde9cff3SCaroline Tice 
1273dde9cff3SCaroline Tice   return true;
1274dde9cff3SCaroline Tice }
1275efed6131SCaroline Tice 
1276b9c1b51eSKate Stone user_id_t SBDebugger::GetID() {
1277baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::user_id_t, SBDebugger, GetID);
1278baf5664fSJonas Devlieghere 
1279dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetID() : LLDB_INVALID_UID);
1280efed6131SCaroline Tice }
12812289fa48SGreg Clayton 
1282b9c1b51eSKate Stone SBError SBDebugger::SetCurrentPlatform(const char *platform_name_cstr) {
1283baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform,
1284baf5664fSJonas Devlieghere                      (const char *), platform_name_cstr);
1285baf5664fSJonas Devlieghere 
12862289fa48SGreg Clayton   SBError sb_error;
1287b9c1b51eSKate Stone   if (m_opaque_sp) {
1288b9c1b51eSKate Stone     if (platform_name_cstr && platform_name_cstr[0]) {
1289615eb7e6SGreg Clayton       ConstString platform_name(platform_name_cstr);
1290615eb7e6SGreg Clayton       PlatformSP platform_sp(Platform::Find(platform_name));
12912289fa48SGreg Clayton 
1292b9c1b51eSKate Stone       if (platform_sp) {
1293615eb7e6SGreg Clayton         // Already have a platform with this name, just select it
1294615eb7e6SGreg Clayton         m_opaque_sp->GetPlatformList().SetSelectedPlatform(platform_sp);
1295b9c1b51eSKate Stone       } else {
1296615eb7e6SGreg Clayton         // We don't have a platform by this name yet, create one
1297615eb7e6SGreg Clayton         platform_sp = Platform::Create(platform_name, sb_error.ref());
1298b9c1b51eSKate Stone         if (platform_sp) {
1299615eb7e6SGreg Clayton           // We created the platform, now append and select it
13002289fa48SGreg Clayton           bool make_selected = true;
13012289fa48SGreg Clayton           m_opaque_sp->GetPlatformList().Append(platform_sp, make_selected);
13022289fa48SGreg Clayton         }
13032289fa48SGreg Clayton       }
1304b9c1b51eSKate Stone     } else {
1305615eb7e6SGreg Clayton       sb_error.ref().SetErrorString("invalid platform name");
1306615eb7e6SGreg Clayton     }
1307b9c1b51eSKate Stone   } else {
1308615eb7e6SGreg Clayton     sb_error.ref().SetErrorString("invalid debugger");
1309615eb7e6SGreg Clayton   }
1310baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
13112289fa48SGreg Clayton }
13122289fa48SGreg Clayton 
1313b9c1b51eSKate Stone bool SBDebugger::SetCurrentPlatformSDKRoot(const char *sysroot) {
1314baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot,
1315baf5664fSJonas Devlieghere                      (const char *), sysroot);
1316baf5664fSJonas Devlieghere 
1317e1cf274bSJason Molenda   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1318b9c1b51eSKate Stone   if (m_opaque_sp) {
1319b9c1b51eSKate Stone     PlatformSP platform_sp(
1320b9c1b51eSKate Stone         m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1321f3dd93c8SGreg Clayton 
1322b9c1b51eSKate Stone     if (platform_sp) {
1323e1cf274bSJason Molenda       if (log && sysroot)
132463e5fb76SJonas Devlieghere         LLDB_LOGF(log, "SBDebugger::SetCurrentPlatformSDKRoot (\"%s\")",
132563e5fb76SJonas Devlieghere                   sysroot);
1326f3dd93c8SGreg Clayton       platform_sp->SetSDKRootDirectory(ConstString(sysroot));
1327f3dd93c8SGreg Clayton       return true;
1328f3dd93c8SGreg Clayton     }
1329f3dd93c8SGreg Clayton   }
1330f3dd93c8SGreg Clayton   return false;
1331f3dd93c8SGreg Clayton }
1332f3dd93c8SGreg Clayton 
1333b9c1b51eSKate Stone bool SBDebugger::GetCloseInputOnEOF() const {
1334baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetCloseInputOnEOF);
1335baf5664fSJonas Devlieghere 
1336dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetCloseInputOnEOF() : false);
1337fc3f027dSGreg Clayton }
1338fc3f027dSGreg Clayton 
1339b9c1b51eSKate Stone void SBDebugger::SetCloseInputOnEOF(bool b) {
1340baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool), b);
1341baf5664fSJonas Devlieghere 
1342fc3f027dSGreg Clayton   if (m_opaque_sp)
1343fc3f027dSGreg Clayton     m_opaque_sp->SetCloseInputOnEOF(b);
1344fc3f027dSGreg Clayton }
1345061858ceSEnrico Granata 
1346b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(const char *category_name) {
1347baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1348baf5664fSJonas Devlieghere                      (const char *), category_name);
1349baf5664fSJonas Devlieghere 
1350061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1351baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1352061858ceSEnrico Granata 
1353061858ceSEnrico Granata   TypeCategoryImplSP category_sp;
1354061858ceSEnrico Granata 
1355b9c1b51eSKate Stone   if (DataVisualization::Categories::GetCategory(ConstString(category_name),
1356baf5664fSJonas Devlieghere                                                  category_sp, false)) {
1357baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1358baf5664fSJonas Devlieghere   } else {
1359baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1360baf5664fSJonas Devlieghere   }
1361061858ceSEnrico Granata }
1362061858ceSEnrico Granata 
1363b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(lldb::LanguageType lang_type) {
1364baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1365baf5664fSJonas Devlieghere                      (lldb::LanguageType), lang_type);
1366baf5664fSJonas Devlieghere 
1367e242624cSEnrico Granata   TypeCategoryImplSP category_sp;
1368baf5664fSJonas Devlieghere   if (DataVisualization::Categories::GetCategory(lang_type, category_sp)) {
1369baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1370baf5664fSJonas Devlieghere   } else {
1371baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1372baf5664fSJonas Devlieghere   }
1373e242624cSEnrico Granata }
1374e242624cSEnrico Granata 
1375b9c1b51eSKate Stone SBTypeCategory SBDebugger::CreateCategory(const char *category_name) {
1376baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory,
1377baf5664fSJonas Devlieghere                      (const char *), category_name);
1378baf5664fSJonas Devlieghere 
1379061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1380baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1381061858ceSEnrico Granata 
1382061858ceSEnrico Granata   TypeCategoryImplSP category_sp;
1383061858ceSEnrico Granata 
1384b9c1b51eSKate Stone   if (DataVisualization::Categories::GetCategory(ConstString(category_name),
1385baf5664fSJonas Devlieghere                                                  category_sp, true)) {
1386baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1387baf5664fSJonas Devlieghere   } else {
1388baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1389baf5664fSJonas Devlieghere   }
1390061858ceSEnrico Granata }
1391061858ceSEnrico Granata 
1392b9c1b51eSKate Stone bool SBDebugger::DeleteCategory(const char *category_name) {
1393baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, DeleteCategory, (const char *),
1394baf5664fSJonas Devlieghere                      category_name);
1395baf5664fSJonas Devlieghere 
1396061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1397061858ceSEnrico Granata     return false;
1398061858ceSEnrico Granata 
1399061858ceSEnrico Granata   return DataVisualization::Categories::Delete(ConstString(category_name));
1400061858ceSEnrico Granata }
1401061858ceSEnrico Granata 
1402b9c1b51eSKate Stone uint32_t SBDebugger::GetNumCategories() {
1403baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumCategories);
1404baf5664fSJonas Devlieghere 
1405061858ceSEnrico Granata   return DataVisualization::Categories::GetCount();
1406061858ceSEnrico Granata }
1407061858ceSEnrico Granata 
1408b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategoryAtIndex(uint32_t index) {
1409baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex,
1410baf5664fSJonas Devlieghere                      (uint32_t), index);
1411baf5664fSJonas Devlieghere 
1412baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1413baf5664fSJonas Devlieghere       SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index)));
1414061858ceSEnrico Granata }
1415061858ceSEnrico Granata 
1416b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetDefaultCategory() {
1417baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTypeCategory, SBDebugger,
1418baf5664fSJonas Devlieghere                              GetDefaultCategory);
1419baf5664fSJonas Devlieghere 
1420baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(GetCategory("default"));
1421061858ceSEnrico Granata }
1422061858ceSEnrico Granata 
1423b9c1b51eSKate Stone SBTypeFormat SBDebugger::GetFormatForType(SBTypeNameSpecifier type_name) {
1424baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType,
1425baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1426baf5664fSJonas Devlieghere 
1427061858ceSEnrico Granata   SBTypeCategory default_category_sb = GetDefaultCategory();
1428061858ceSEnrico Granata   if (default_category_sb.GetEnabled())
1429baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(default_category_sb.GetFormatForType(type_name));
1430baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBTypeFormat());
1431061858ceSEnrico Granata }
1432061858ceSEnrico Granata 
1433b9c1b51eSKate Stone SBTypeSummary SBDebugger::GetSummaryForType(SBTypeNameSpecifier type_name) {
1434baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType,
1435baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1436baf5664fSJonas Devlieghere 
1437dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1438baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeSummary());
1439baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1440baf5664fSJonas Devlieghere       SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP())));
1441061858ceSEnrico Granata }
1442061858ceSEnrico Granata 
1443b9c1b51eSKate Stone SBTypeFilter SBDebugger::GetFilterForType(SBTypeNameSpecifier type_name) {
1444baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType,
1445baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1446baf5664fSJonas Devlieghere 
1447dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1448baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeFilter());
1449baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1450baf5664fSJonas Devlieghere       SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP())));
1451061858ceSEnrico Granata }
1452061858ceSEnrico Granata 
1453b9c1b51eSKate Stone SBTypeSynthetic SBDebugger::GetSyntheticForType(SBTypeNameSpecifier type_name) {
1454baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType,
1455baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1456baf5664fSJonas Devlieghere 
1457dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1458baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeSynthetic());
1459baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBTypeSynthetic(
1460baf5664fSJonas Devlieghere       DataVisualization::GetSyntheticForType(type_name.GetSP())));
1461061858ceSEnrico Granata }
1462061858ceSEnrico Granata 
14635e336903SPavel Labath static llvm::ArrayRef<const char *> GetCategoryArray(const char **categories) {
14645e336903SPavel Labath   if (categories == nullptr)
14655e336903SPavel Labath     return {};
14665e336903SPavel Labath   size_t len = 0;
14675e336903SPavel Labath   while (categories[len] != nullptr)
14685e336903SPavel Labath     ++len;
14695e336903SPavel Labath   return llvm::makeArrayRef(categories, len);
14705e336903SPavel Labath }
14715e336903SPavel Labath 
1472b9c1b51eSKate Stone bool SBDebugger::EnableLog(const char *channel, const char **categories) {
1473baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, EnableLog, (const char *, const char **),
1474baf5664fSJonas Devlieghere                      channel, categories);
1475baf5664fSJonas Devlieghere 
1476b9c1b51eSKate Stone   if (m_opaque_sp) {
1477b9c1b51eSKate Stone     uint32_t log_options =
1478b9c1b51eSKate Stone         LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
1479775588c0SPavel Labath     std::string error;
1480775588c0SPavel Labath     llvm::raw_string_ostream error_stream(error);
14815e336903SPavel Labath     return m_opaque_sp->EnableLog(channel, GetCategoryArray(categories), "",
1482775588c0SPavel Labath                                   log_options, error_stream);
1483b9c1b51eSKate Stone   } else
1484228063cdSJim Ingham     return false;
1485228063cdSJim Ingham }
14864f02b22dSJim Ingham 
1487b9c1b51eSKate Stone void SBDebugger::SetLoggingCallback(lldb::LogOutputCallback log_callback,
1488b9c1b51eSKate Stone                                     void *baton) {
14897bc83564SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, SetLoggingCallback,
14907bc83564SJonas Devlieghere                     (lldb::LogOutputCallback, void *), log_callback, baton);
14910d7b0c96SJonas Devlieghere 
1492b9c1b51eSKate Stone   if (m_opaque_sp) {
14934f02b22dSJim Ingham     return m_opaque_sp->SetLoggingCallback(log_callback, baton);
14944f02b22dSJim Ingham   }
14954f02b22dSJim Ingham }
1496ae211eceSMichal Gorny 
1497ae211eceSMichal Gorny namespace lldb_private {
1498ae211eceSMichal Gorny namespace repro {
1499ae211eceSMichal Gorny 
1500d9aec34bSJonas Devlieghere template <> void RegisterMethods<SBInputReader>(Registry &R) {
1501ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBInputReader, SetIsDone, (bool));
1502ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBInputReader, IsActive, ());
1503ae211eceSMichal Gorny }
1504ae211eceSMichal Gorny 
1505ae211eceSMichal Gorny static void SetFileHandleRedirect(SBDebugger *, FILE *, bool) {
1506ae211eceSMichal Gorny   // Do nothing.
1507ae211eceSMichal Gorny }
1508ae211eceSMichal Gorny 
1509ae211eceSMichal Gorny static bool GetDefaultArchitectureRedirect(char *arch_name,
1510ae211eceSMichal Gorny                                            size_t arch_name_len) {
1511ae211eceSMichal Gorny   // The function is writing to its argument. Without the redirect it would
1512ae211eceSMichal Gorny   // write into the replay buffer.
1513ae211eceSMichal Gorny   char buffer[1024];
1514ae211eceSMichal Gorny   return SBDebugger::GetDefaultArchitecture(buffer, arch_name_len);
1515ae211eceSMichal Gorny }
1516ae211eceSMichal Gorny 
1517d9aec34bSJonas Devlieghere template <> void RegisterMethods<SBDebugger>(Registry &R) {
1518ae211eceSMichal Gorny   // Custom implementation.
1519ae211eceSMichal Gorny   R.Register(&invoke<void (SBDebugger::*)(
1520ae211eceSMichal Gorny                  FILE *, bool)>::method<&SBDebugger::SetErrorFileHandle>::doit,
1521ae211eceSMichal Gorny              &SetFileHandleRedirect);
1522ae211eceSMichal Gorny   R.Register(&invoke<void (SBDebugger::*)(
1523ae211eceSMichal Gorny                  FILE *, bool)>::method<&SBDebugger::SetOutputFileHandle>::doit,
1524ae211eceSMichal Gorny              &SetFileHandleRedirect);
1525ae211eceSMichal Gorny   R.Register<bool(char *, size_t)>(static_cast<bool (*)(char *, size_t)>(
1526ae211eceSMichal Gorny                                        &SBDebugger::GetDefaultArchitecture),
1527ae211eceSMichal Gorny                                    &GetDefaultArchitectureRedirect);
1528ae211eceSMichal Gorny 
1529ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, ());
1530ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &));
1531ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &));
1532ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBDebugger &,
1533ae211eceSMichal Gorny                        SBDebugger, operator=,(const lldb::SBDebugger &));
1534ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Initialize, ());
1535ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger,
1536ae211eceSMichal Gorny                               InitializeWithErrorHandling, ());
1537ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Terminate, ());
1538ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, Clear, ());
1539ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, ());
1540ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool));
1541d9aec34bSJonas Devlieghere   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Destroy, (lldb::SBDebugger &));
1542ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, MemoryPressureDetected, ());
1543ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, IsValid, ());
1544ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, operator bool,());
1545ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetAsync, (bool));
1546ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetAsync, ());
1547ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool));
1548ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SkipAppInitFiles, (bool));
1549ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool));
1550ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetInputFileHandle, ());
1551ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetOutputFileHandle, ());
1552ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetErrorFileHandle, ());
1553ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SaveInputTerminalState, ());
1554ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RestoreInputTerminalState, ());
1555ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBCommandInterpreter, SBDebugger,
1556ae211eceSMichal Gorny                        GetCommandInterpreter, ());
1557ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, HandleCommand, (const char *));
1558ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBListener, SBDebugger, GetListener, ());
1559ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
1560ae211eceSMichal Gorny       void, SBDebugger, HandleProcessEvent,
1561ae211eceSMichal Gorny       (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *));
1562d9aec34bSJonas Devlieghere   LLDB_REGISTER_METHOD(lldb::SBSourceManager, SBDebugger, GetSourceManager, ());
1563ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture,
1564ae211eceSMichal Gorny                               (const char *));
1565ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage,
1566ae211eceSMichal Gorny                        (const char *));
1567ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, GetVersionString, ());
1568ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, StateAsCString,
1569ae211eceSMichal Gorny                               (lldb::StateType));
1570ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBStructuredData, SBDebugger,
1571ae211eceSMichal Gorny                               GetBuildConfiguration, ());
1572ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsRunningState,
1573ae211eceSMichal Gorny                               (lldb::StateType));
1574ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState,
1575ae211eceSMichal Gorny                               (lldb::StateType));
1576ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
1577ae211eceSMichal Gorny       lldb::SBTarget, SBDebugger, CreateTarget,
1578ae211eceSMichal Gorny       (const char *, const char *, const char *, bool, lldb::SBError &));
1579ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger,
1580ae211eceSMichal Gorny                        CreateTargetWithFileAndTargetTriple,
1581ae211eceSMichal Gorny                        (const char *, const char *));
1582d9aec34bSJonas Devlieghere   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, CreateTargetWithFileAndArch,
1583ae211eceSMichal Gorny                        (const char *, const char *));
1584ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, CreateTarget,
1585ae211eceSMichal Gorny                        (const char *));
1586ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetDummyTarget, ());
1587ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &));
1588ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex,
1589ae211eceSMichal Gorny                        (uint32_t));
1590ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetIndexOfTarget,
1591ae211eceSMichal Gorny                        (lldb::SBTarget));
1592ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID,
1593ae211eceSMichal Gorny                        (lldb::pid_t));
1594ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch,
1595ae211eceSMichal Gorny                        (const char *, const char *));
1596ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumTargets, ());
1597ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetSelectedTarget, ());
1598d9aec34bSJonas Devlieghere   LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedTarget, (lldb::SBTarget &));
1599ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetSelectedPlatform, ());
1600ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedPlatform,
1601ae211eceSMichal Gorny                        (lldb::SBPlatform &));
1602ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumPlatforms, ());
1603ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex,
1604ae211eceSMichal Gorny                        (uint32_t));
1605ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumAvailablePlatforms, ());
1606ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBStructuredData, SBDebugger,
1607ae211eceSMichal Gorny                        GetAvailablePlatformInfoAtIndex, (uint32_t));
1608ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputInterrupt, ());
1609ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputEndOfFile, ());
1610ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, PushInputReader,
1611ae211eceSMichal Gorny                        (lldb::SBInputReader &));
1612ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool));
1613ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter,
1614ae211eceSMichal Gorny                        (bool, bool, lldb::SBCommandInterpreterRunOptions &,
1615ae211eceSMichal Gorny                         int &, bool &, bool &));
1616ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, RunREPL,
1617ae211eceSMichal Gorny                        (lldb::LanguageType, const char *));
1618d9aec34bSJonas Devlieghere   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, FindDebuggerWithID,
1619d9aec34bSJonas Devlieghere                               (int));
1620ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBDebugger, GetInstanceName, ());
1621ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable,
1622ae211eceSMichal Gorny                               (const char *, const char *, const char *));
1623ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBStringList, SBDebugger,
1624ae211eceSMichal Gorny                               GetInternalVariableValue,
1625ae211eceSMichal Gorny                               (const char *, const char *));
1626ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBDebugger, GetTerminalWidth, ());
1627ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetTerminalWidth, (uint32_t));
1628ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetPrompt, ());
1629ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetPrompt, (const char *));
1630ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetReproducerPath, ());
1631ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::ScriptLanguage, SBDebugger,
1632ae211eceSMichal Gorny                              GetScriptLanguage, ());
1633ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetScriptLanguage,
1634ae211eceSMichal Gorny                        (lldb::ScriptLanguage));
1635ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool));
1636ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetUseExternalEditor, ());
1637ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseColor, (bool));
1638ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetUseColor, ());
1639ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &));
1640ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::user_id_t, SBDebugger, GetID, ());
1641ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform,
1642ae211eceSMichal Gorny                        (const char *));
1643ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot,
1644ae211eceSMichal Gorny                        (const char *));
1645ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetCloseInputOnEOF, ());
1646ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool));
1647ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1648ae211eceSMichal Gorny                        (const char *));
1649ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1650ae211eceSMichal Gorny                        (lldb::LanguageType));
1651ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory,
1652ae211eceSMichal Gorny                        (const char *));
1653ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteCategory, (const char *));
1654ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumCategories, ());
1655ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex,
1656ae211eceSMichal Gorny                        (uint32_t));
1657ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetDefaultCategory,
1658ae211eceSMichal Gorny                        ());
1659ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType,
1660ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1661ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType,
1662ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1663ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType,
1664ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1665ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType,
1666ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1667ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, EnableLog,
1668ae211eceSMichal Gorny                        (const char *, const char **));
1669ae211eceSMichal Gorny }
1670ae211eceSMichal Gorny 
1671d9aec34bSJonas Devlieghere } // namespace repro
1672d9aec34bSJonas Devlieghere } // namespace lldb_private
1673