180814287SRaphael Isemann //===-- SBDebugger.cpp ----------------------------------------------------===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
9baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
10d17cd902SAlex Langford #include "SystemInitializerFull.h"
11d17cd902SAlex Langford 
12ca93cc1dSEli Friedman #include "lldb/API/SBDebugger.h"
1330fdc8d8SChris Lattner 
14e0d378b3SGreg Clayton #include "lldb/lldb-private.h"
1530fdc8d8SChris Lattner 
16ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h"
17ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h"
184b354039SJonas Devlieghere #include "lldb/API/SBCommandInterpreterRunOptions.h"
19ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h"
202289fa48SGreg Clayton #include "lldb/API/SBError.h"
21ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h"
2296898eb6SLawrence D'Anna #include "lldb/API/SBFile.h"
23ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h"
24b9c1b51eSKate Stone #include "lldb/API/SBListener.h"
253df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h"
263df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h"
27dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
283df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h"
29c10e34d0SVadim Macagon #include "lldb/API/SBStructuredData.h"
303df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h"
313df9a8dfSCaroline Tice #include "lldb/API/SBThread.h"
32061858ceSEnrico Granata #include "lldb/API/SBTypeCategory.h"
33061858ceSEnrico Granata #include "lldb/API/SBTypeFilter.h"
34b9c1b51eSKate Stone #include "lldb/API/SBTypeFormat.h"
35061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h"
36061858ceSEnrico Granata #include "lldb/API/SBTypeSummary.h"
37061858ceSEnrico Granata #include "lldb/API/SBTypeSynthetic.h"
38061858ceSEnrico Granata 
396eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h"
40c10e34d0SVadim Macagon #include "lldb/Core/PluginManager.h"
4144d93782SGreg Clayton #include "lldb/Core/StreamFile.h"
42c10e34d0SVadim Macagon #include "lldb/Core/StructuredDataImpl.h"
435548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h"
4459998b7bSJonas Devlieghere #include "lldb/Host/Config.h"
45f1389e92SPavel Labath #include "lldb/Host/XML.h"
46e6e2bb38SZachary Turner #include "lldb/Initialization/SystemLifetimeManager.h"
476eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h"
4847cbf4a0SPavel Labath #include "lldb/Interpreter/OptionArgParser.h"
49cac9c5f9SGreg Clayton #include "lldb/Interpreter/OptionGroupPlatform.h"
506eee5aa0SGreg Clayton #include "lldb/Target/Process.h"
516eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h"
52145d95c9SPavel Labath #include "lldb/Utility/Args.h"
53d821c997SPavel Labath #include "lldb/Utility/State.h"
5430fdc8d8SChris Lattner 
55d717cc9fSEnrico Granata #include "llvm/ADT/STLExtras.h"
567b2e5a36SZachary Turner #include "llvm/ADT/StringRef.h"
5758a559c0SZachary Turner #include "llvm/Support/DynamicLibrary.h"
58b9c1b51eSKate Stone #include "llvm/Support/ManagedStatic.h"
5958a559c0SZachary Turner 
6030fdc8d8SChris Lattner using namespace lldb;
6130fdc8d8SChris Lattner using namespace lldb_private;
6230fdc8d8SChris Lattner 
63b9c1b51eSKate Stone static llvm::sys::DynamicLibrary LoadPlugin(const lldb::DebuggerSP &debugger_sp,
64b9c1b51eSKate Stone                                             const FileSpec &spec,
6597206d57SZachary Turner                                             Status &error) {
66b9c1b51eSKate Stone   llvm::sys::DynamicLibrary dynlib =
67b9c1b51eSKate Stone       llvm::sys::DynamicLibrary::getPermanentLibrary(spec.GetPath().c_str());
68b9c1b51eSKate Stone   if (dynlib.isValid()) {
695fb8f797SGreg Clayton     typedef bool (*LLDBCommandPluginInit)(lldb::SBDebugger & debugger);
705fb8f797SGreg Clayton 
715fb8f797SGreg Clayton     lldb::SBDebugger debugger_sb(debugger_sp);
72b9c1b51eSKate Stone     // This calls the bool lldb::PluginInitialize(lldb::SBDebugger debugger)
73b9c1b51eSKate Stone     // function.
74b9c1b51eSKate Stone     // TODO: mangle this differently for your system - on OSX, the first
75b9c1b51eSKate Stone     // underscore needs to be removed and the second one stays
76b9c1b51eSKate Stone     LLDBCommandPluginInit init_func =
7722701b2fSStephane Sezer         (LLDBCommandPluginInit)(uintptr_t)dynlib.getAddressOfSymbol(
78b9c1b51eSKate Stone             "_ZN4lldb16PluginInitializeENS_10SBDebuggerE");
79b9c1b51eSKate Stone     if (init_func) {
805fb8f797SGreg Clayton       if (init_func(debugger_sb))
8158a559c0SZachary Turner         return dynlib;
825fb8f797SGreg Clayton       else
83b9c1b51eSKate Stone         error.SetErrorString("plug-in refused to load "
84b9c1b51eSKate Stone                              "(lldb::PluginInitialize(lldb::SBDebugger) "
85b9c1b51eSKate Stone                              "returned false)");
86b9c1b51eSKate Stone     } else {
87b9c1b51eSKate Stone       error.SetErrorString("plug-in is missing the required initialization: "
88b9c1b51eSKate Stone                            "lldb::PluginInitialize(lldb::SBDebugger)");
895fb8f797SGreg Clayton     }
90b9c1b51eSKate Stone   } else {
91dbd7fabaSJonas Devlieghere     if (FileSystem::Instance().Exists(spec))
925fb8f797SGreg Clayton       error.SetErrorString("this file does not represent a loadable dylib");
935fb8f797SGreg Clayton     else
945fb8f797SGreg Clayton       error.SetErrorString("no such file");
955fb8f797SGreg Clayton   }
9658a559c0SZachary Turner   return llvm::sys::DynamicLibrary();
975fb8f797SGreg Clayton }
985fb8f797SGreg Clayton 
99e6e2bb38SZachary Turner static llvm::ManagedStatic<SystemLifetimeManager> g_debugger_lifetime;
100e6e2bb38SZachary Turner 
101b9c1b51eSKate Stone SBError SBInputReader::Initialize(
102b9c1b51eSKate Stone     lldb::SBDebugger &sb_debugger,
1030d7b0c96SJonas Devlieghere     unsigned long (*callback)(void *, lldb::SBInputReader *,
1040d7b0c96SJonas Devlieghere                               lldb::InputReaderAction, char const *,
1050d7b0c96SJonas Devlieghere                               unsigned long),
1060d7b0c96SJonas Devlieghere     void *a, lldb::InputReaderGranularity b, char const *c, char const *d,
1070d7b0c96SJonas Devlieghere     bool e) {
1087bc83564SJonas Devlieghere   LLDB_RECORD_DUMMY(
1097bc83564SJonas Devlieghere       lldb::SBError, SBInputReader, Initialize,
1107bc83564SJonas Devlieghere       (lldb::SBDebugger &,
1117bc83564SJonas Devlieghere        unsigned long (*)(void *, lldb::SBInputReader *, lldb::InputReaderAction,
1127bc83564SJonas Devlieghere                          const char *, unsigned long),
1137bc83564SJonas Devlieghere        void *, lldb::InputReaderGranularity, const char *, const char *, bool),
1140d7b0c96SJonas Devlieghere       sb_debugger, callback, a, b, c, d, e);
1150d7b0c96SJonas Devlieghere 
116e6e2bb38SZachary Turner   return SBError();
117e6e2bb38SZachary Turner }
118e6e2bb38SZachary Turner 
119baf5664fSJonas Devlieghere void SBInputReader::SetIsDone(bool b) {
120baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBInputReader, SetIsDone, (bool), b);
121baf5664fSJonas Devlieghere }
122dbb0abbfSEugene Zelenko 
123baf5664fSJonas Devlieghere bool SBInputReader::IsActive() const {
124baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBInputReader, IsActive);
125e6e2bb38SZachary Turner 
126baf5664fSJonas Devlieghere   return false;
127baf5664fSJonas Devlieghere }
128baf5664fSJonas Devlieghere 
129baf5664fSJonas Devlieghere SBDebugger::SBDebugger() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBDebugger); }
130dbb0abbfSEugene Zelenko 
131b9c1b51eSKate Stone SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp)
132baf5664fSJonas Devlieghere     : m_opaque_sp(debugger_sp) {
133baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &), debugger_sp);
134baf5664fSJonas Devlieghere }
135dbb0abbfSEugene Zelenko 
136baf5664fSJonas Devlieghere SBDebugger::SBDebugger(const SBDebugger &rhs) : m_opaque_sp(rhs.m_opaque_sp) {
137baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &), rhs);
138baf5664fSJonas Devlieghere }
139dbb0abbfSEugene Zelenko 
140dbb0abbfSEugene Zelenko SBDebugger::~SBDebugger() = default;
141dbb0abbfSEugene Zelenko 
142b9c1b51eSKate Stone SBDebugger &SBDebugger::operator=(const SBDebugger &rhs) {
143baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBDebugger &,
144baf5664fSJonas Devlieghere                      SBDebugger, operator=,(const lldb::SBDebugger &), rhs);
145baf5664fSJonas Devlieghere 
146b9c1b51eSKate Stone   if (this != &rhs) {
147dbb0abbfSEugene Zelenko     m_opaque_sp = rhs.m_opaque_sp;
148dbb0abbfSEugene Zelenko   }
149306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
150dbb0abbfSEugene Zelenko }
151dbb0abbfSEugene Zelenko 
152b9c1b51eSKate Stone void SBDebugger::Initialize() {
153baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Initialize);
154936c6242SJonas Devlieghere   SBError ignored = SBDebugger::InitializeWithErrorHandling();
15515eacd74SJonas Devlieghere }
15615eacd74SJonas Devlieghere 
157936c6242SJonas Devlieghere lldb::SBError SBDebugger::InitializeWithErrorHandling() {
158baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBError, SBDebugger,
159baf5664fSJonas Devlieghere                                     InitializeWithErrorHandling);
160baf5664fSJonas Devlieghere 
16115eacd74SJonas Devlieghere   SBError error;
16215eacd74SJonas Devlieghere   if (auto e = g_debugger_lifetime->Initialize(
163a8f3ae7cSJonas Devlieghere           std::make_unique<SystemInitializerFull>(), LoadPlugin)) {
16415eacd74SJonas Devlieghere     error.SetError(Status(std::move(e)));
16515eacd74SJonas Devlieghere   }
166baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(error);
16730fdc8d8SChris Lattner }
16830fdc8d8SChris Lattner 
169baf5664fSJonas Devlieghere void SBDebugger::Terminate() {
170baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Terminate);
171baf5664fSJonas Devlieghere 
172baf5664fSJonas Devlieghere   g_debugger_lifetime->Terminate();
173baf5664fSJonas Devlieghere }
17430fdc8d8SChris Lattner 
175b9c1b51eSKate Stone void SBDebugger::Clear() {
176baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, Clear);
177baf5664fSJonas Devlieghere 
1783d6086f6SCaroline Tice   if (m_opaque_sp)
17944d93782SGreg Clayton     m_opaque_sp->ClearIOHandlers();
180ceb6b139SCaroline Tice 
18148e42549SGreg Clayton   m_opaque_sp.reset();
18248e42549SGreg Clayton }
18348e42549SGreg Clayton 
184b9c1b51eSKate Stone SBDebugger SBDebugger::Create() {
185baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBDebugger, SBDebugger, Create);
186baf5664fSJonas Devlieghere 
187baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBDebugger::Create(false, nullptr, nullptr));
18806942690SJim Ingham }
18906942690SJim Ingham 
190b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files) {
191baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool),
192baf5664fSJonas Devlieghere                             source_init_files);
193baf5664fSJonas Devlieghere 
194baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
195baf5664fSJonas Devlieghere       SBDebugger::Create(source_init_files, nullptr, nullptr));
196228063cdSJim Ingham }
197228063cdSJim Ingham 
198b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files,
199b9c1b51eSKate Stone                               lldb::LogOutputCallback callback, void *baton)
200228063cdSJim Ingham 
201228063cdSJim Ingham {
2020d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(lldb::SBDebugger, SBDebugger, Create,
2037bc83564SJonas Devlieghere                     (bool, lldb::LogOutputCallback, void *), source_init_files,
2047bc83564SJonas Devlieghere                     callback, baton);
205ceb6b139SCaroline Tice 
2066611103cSGreg Clayton   SBDebugger debugger;
207cb172b10SGreg Clayton 
208b9c1b51eSKate Stone   // Currently we have issues if this function is called simultaneously on two
20905097246SAdrian Prantl   // different threads. The issues mainly revolve around the fact that the
21005097246SAdrian Prantl   // lldb_private::FormatManager uses global collections and having two threads
21105097246SAdrian Prantl   // parsing the .lldbinit files can cause mayhem. So to get around this for
21205097246SAdrian Prantl   // now we need to use a mutex to prevent bad things from happening.
21316ff8604SSaleem Abdulrasool   static std::recursive_mutex g_mutex;
21416ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(g_mutex);
215cb172b10SGreg Clayton 
216228063cdSJim Ingham   debugger.reset(Debugger::CreateInstance(callback, baton));
217ceb6b139SCaroline Tice 
21806942690SJim Ingham   SBCommandInterpreter interp = debugger.GetCommandInterpreter();
219b9c1b51eSKate Stone   if (source_init_files) {
22006942690SJim Ingham     interp.get()->SkipLLDBInitFiles(false);
22106942690SJim Ingham     interp.get()->SkipAppInitFiles(false);
22206942690SJim Ingham     SBCommandReturnObject result;
22306942690SJim Ingham     interp.SourceInitFileInHomeDirectory(result);
224b9c1b51eSKate Stone   } else {
22506942690SJim Ingham     interp.get()->SkipLLDBInitFiles(true);
22606942690SJim Ingham     interp.get()->SkipAppInitFiles(true);
22706942690SJim Ingham   }
2286611103cSGreg Clayton   return debugger;
2296611103cSGreg Clayton }
2306611103cSGreg Clayton 
231b9c1b51eSKate Stone void SBDebugger::Destroy(SBDebugger &debugger) {
232baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(void, SBDebugger, Destroy, (lldb::SBDebugger &),
233baf5664fSJonas Devlieghere                             debugger);
234baf5664fSJonas Devlieghere 
235e02657b1SCaroline Tice   Debugger::Destroy(debugger.m_opaque_sp);
236e02657b1SCaroline Tice 
237dbb0abbfSEugene Zelenko   if (debugger.m_opaque_sp.get() != nullptr)
238e02657b1SCaroline Tice     debugger.m_opaque_sp.reset();
239e02657b1SCaroline Tice }
240e02657b1SCaroline Tice 
241b9c1b51eSKate Stone void SBDebugger::MemoryPressureDetected() {
242baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, MemoryPressureDetected);
243baf5664fSJonas Devlieghere 
24405097246SAdrian Prantl   // Since this function can be call asynchronously, we allow it to be non-
24505097246SAdrian Prantl   // mandatory. We have seen deadlocks with this function when called so we
24605097246SAdrian Prantl   // need to safeguard against this until we can determine what is causing the
24705097246SAdrian Prantl   // deadlocks.
248aebdf1beSJim Ingham 
2490cd70866SGreg Clayton   const bool mandatory = false;
250aebdf1beSJim Ingham 
2510cd70866SGreg Clayton   ModuleList::RemoveOrphanSharedModules(mandatory);
252f9322415SGreg Clayton }
253f9322415SGreg Clayton 
254baf5664fSJonas Devlieghere bool SBDebugger::IsValid() const {
255baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, IsValid);
2567f5237bcSPavel Labath   return this->operator bool();
2577f5237bcSPavel Labath }
2587f5237bcSPavel Labath SBDebugger::operator bool() const {
2597f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, operator bool);
260baf5664fSJonas Devlieghere 
261baf5664fSJonas Devlieghere   return m_opaque_sp.get() != nullptr;
262baf5664fSJonas Devlieghere }
2636611103cSGreg Clayton 
264b9c1b51eSKate Stone void SBDebugger::SetAsync(bool b) {
265baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetAsync, (bool), b);
266baf5664fSJonas Devlieghere 
2676611103cSGreg Clayton   if (m_opaque_sp)
2686611103cSGreg Clayton     m_opaque_sp->SetAsyncExecution(b);
26930fdc8d8SChris Lattner }
27030fdc8d8SChris Lattner 
271b9c1b51eSKate Stone bool SBDebugger::GetAsync() {
272baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetAsync);
273baf5664fSJonas Devlieghere 
274dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetAsyncExecution() : false);
275e64f0dc7SJim Ingham }
276e64f0dc7SJim Ingham 
277b9c1b51eSKate Stone void SBDebugger::SkipLLDBInitFiles(bool b) {
278baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool), b);
279baf5664fSJonas Devlieghere 
2806eee5aa0SGreg Clayton   if (m_opaque_sp)
2816eee5aa0SGreg Clayton     m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles(b);
2826eee5aa0SGreg Clayton }
2836eee5aa0SGreg Clayton 
284b9c1b51eSKate Stone void SBDebugger::SkipAppInitFiles(bool b) {
285baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SkipAppInitFiles, (bool), b);
286baf5664fSJonas Devlieghere 
28716e0c686SJim Ingham   if (m_opaque_sp)
28816e0c686SJim Ingham     m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles(b);
28916e0c686SJim Ingham }
29016e0c686SJim Ingham 
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);
294f913fd6eSLawrence D'Anna   SetInputFile((FileSP)std::make_shared<NativeFile>(fh, transfer_ownership));
29596898eb6SLawrence D'Anna }
296baf5664fSJonas Devlieghere 
297c040b30fSLawrence D'Anna SBError SBDebugger::SetInputFile(FileSP file_sp) {
298c040b30fSLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetInputFile, (FileSP), file_sp);
299fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(SetInputFile(SBFile(file_sp)));
300c040b30fSLawrence D'Anna }
301c040b30fSLawrence D'Anna 
30296898eb6SLawrence D'Anna // Shouldn't really be settable after initialization as this could cause lots
30396898eb6SLawrence D'Anna // of problems; don't want users trying to switch modes in the middle of a
30496898eb6SLawrence D'Anna // debugging session.
30596898eb6SLawrence D'Anna SBError SBDebugger::SetInputFile(SBFile file) {
30696898eb6SLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetInputFile, (SBFile), file);
30796898eb6SLawrence D'Anna 
30896898eb6SLawrence D'Anna   SBError error;
30996898eb6SLawrence D'Anna   if (!m_opaque_sp) {
31096898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid debugger");
311fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
31296898eb6SLawrence D'Anna   }
313d77c2e09SJonas Devlieghere 
314d77c2e09SJonas Devlieghere   repro::DataRecorder *recorder = nullptr;
315d77c2e09SJonas Devlieghere   if (repro::Generator *g = repro::Reproducer::Instance().GetGenerator())
316*169c8320SJonas Devlieghere     recorder = g->GetOrCreate<repro::CommandProvider>().GetNewRecorder();
317d77c2e09SJonas Devlieghere 
31896898eb6SLawrence D'Anna   FileSP file_sp = file.m_opaque_sp;
31996898eb6SLawrence D'Anna 
3201d41d1bcSEric Christopher   static std::unique_ptr<repro::MultiLoader<repro::CommandProvider>> loader =
3211d41d1bcSEric Christopher       repro::MultiLoader<repro::CommandProvider>::Create(
3221d41d1bcSEric Christopher           repro::Reproducer::Instance().GetLoader());
3234a491ec4SJonas Devlieghere   if (loader) {
32496898eb6SLawrence D'Anna     llvm::Optional<std::string> nextfile = loader->GetNextFile();
32596898eb6SLawrence D'Anna     FILE *fh = nextfile ? FileSystem::Instance().Fopen(nextfile->c_str(), "r")
32696898eb6SLawrence D'Anna                         : nullptr;
32796898eb6SLawrence D'Anna     // FIXME Jonas Devlieghere: shouldn't this error be propagated out to the
32896898eb6SLawrence D'Anna     // reproducer somehow if fh is NULL?
32996898eb6SLawrence D'Anna     if (fh) {
330f913fd6eSLawrence D'Anna       file_sp = std::make_shared<NativeFile>(fh, true);
33196898eb6SLawrence D'Anna     }
3324a491ec4SJonas Devlieghere   }
333d77c2e09SJonas Devlieghere 
33496898eb6SLawrence D'Anna   if (!file_sp || !file_sp->IsValid()) {
33596898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid file");
336fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
33796898eb6SLawrence D'Anna   }
33896898eb6SLawrence D'Anna 
33996898eb6SLawrence D'Anna   m_opaque_sp->SetInputFile(file_sp, recorder);
340fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(error);
34130fdc8d8SChris Lattner }
34230fdc8d8SChris Lattner 
343c040b30fSLawrence D'Anna SBError SBDebugger::SetOutputFile(FileSP file_sp) {
344c040b30fSLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetOutputFile, (FileSP), file_sp);
345fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(SetOutputFile(SBFile(file_sp)));
346c040b30fSLawrence D'Anna }
347c040b30fSLawrence D'Anna 
348b9c1b51eSKate Stone void SBDebugger::SetOutputFileHandle(FILE *fh, bool transfer_ownership) {
349baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetOutputFileHandle, (FILE *, bool), fh,
350baf5664fSJonas Devlieghere                      transfer_ownership);
351f913fd6eSLawrence D'Anna   SetOutputFile((FileSP)std::make_shared<NativeFile>(fh, transfer_ownership));
35296898eb6SLawrence D'Anna }
353baf5664fSJonas Devlieghere 
35496898eb6SLawrence D'Anna SBError SBDebugger::SetOutputFile(SBFile file) {
35596898eb6SLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetOutputFile, (SBFile file), file);
35696898eb6SLawrence D'Anna   SBError error;
35796898eb6SLawrence D'Anna   if (!m_opaque_sp) {
35896898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid debugger");
359fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
36096898eb6SLawrence D'Anna   }
36196898eb6SLawrence D'Anna   if (!file) {
36296898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid file");
363fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
36496898eb6SLawrence D'Anna   }
36596898eb6SLawrence D'Anna   m_opaque_sp->SetOutputFile(file.m_opaque_sp);
366fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(error);
36730fdc8d8SChris Lattner }
36830fdc8d8SChris Lattner 
369b9c1b51eSKate Stone void SBDebugger::SetErrorFileHandle(FILE *fh, bool transfer_ownership) {
370baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetErrorFileHandle, (FILE *, bool), fh,
371baf5664fSJonas Devlieghere                      transfer_ownership);
372f913fd6eSLawrence D'Anna   SetErrorFile((FileSP)std::make_shared<NativeFile>(fh, transfer_ownership));
37396898eb6SLawrence D'Anna }
374baf5664fSJonas Devlieghere 
375c040b30fSLawrence D'Anna SBError SBDebugger::SetErrorFile(FileSP file_sp) {
376c040b30fSLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetErrorFile, (FileSP), file_sp);
377fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(SetErrorFile(SBFile(file_sp)));
378c040b30fSLawrence D'Anna }
379c040b30fSLawrence D'Anna 
38096898eb6SLawrence D'Anna SBError SBDebugger::SetErrorFile(SBFile file) {
38196898eb6SLawrence D'Anna   LLDB_RECORD_METHOD(SBError, SBDebugger, SetErrorFile, (SBFile file), file);
38296898eb6SLawrence D'Anna   SBError error;
38396898eb6SLawrence D'Anna   if (!m_opaque_sp) {
38496898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid debugger");
385fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
38696898eb6SLawrence D'Anna   }
38796898eb6SLawrence D'Anna   if (!file) {
38896898eb6SLawrence D'Anna     error.ref().SetErrorString("invalid file");
389fe5ab6d2SJonas Devlieghere     return LLDB_RECORD_RESULT(error);
39096898eb6SLawrence D'Anna   }
39196898eb6SLawrence D'Anna   m_opaque_sp->SetErrorFile(file.m_opaque_sp);
392fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(error);
39330fdc8d8SChris Lattner }
39430fdc8d8SChris Lattner 
395b9c1b51eSKate Stone FILE *SBDebugger::GetInputFileHandle() {
396baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetInputFileHandle);
397b9c1b51eSKate Stone   if (m_opaque_sp) {
3987ca15ba7SLawrence D'Anna     File &file_sp = m_opaque_sp->GetInputFile();
3997ca15ba7SLawrence D'Anna     return LLDB_RECORD_RESULT(file_sp.GetStream());
40044d93782SGreg Clayton   }
401fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(nullptr);
40230fdc8d8SChris Lattner }
40330fdc8d8SChris Lattner 
40496898eb6SLawrence D'Anna SBFile SBDebugger::GetInputFile() {
40596898eb6SLawrence D'Anna   LLDB_RECORD_METHOD_NO_ARGS(SBFile, SBDebugger, GetInputFile);
40696898eb6SLawrence D'Anna   if (m_opaque_sp) {
40796898eb6SLawrence D'Anna     return LLDB_RECORD_RESULT(SBFile(m_opaque_sp->GetInputFileSP()));
40896898eb6SLawrence D'Anna   }
40996898eb6SLawrence D'Anna   return LLDB_RECORD_RESULT(SBFile());
41096898eb6SLawrence D'Anna }
41196898eb6SLawrence D'Anna 
412b9c1b51eSKate Stone FILE *SBDebugger::GetOutputFileHandle() {
413baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetOutputFileHandle);
414b9c1b51eSKate Stone   if (m_opaque_sp) {
4157ca15ba7SLawrence D'Anna     StreamFile &stream_file = m_opaque_sp->GetOutputStream();
4167ca15ba7SLawrence D'Anna     return LLDB_RECORD_RESULT(stream_file.GetFile().GetStream());
41744d93782SGreg Clayton   }
418fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(nullptr);
41930fdc8d8SChris Lattner }
42030fdc8d8SChris Lattner 
42196898eb6SLawrence D'Anna SBFile SBDebugger::GetOutputFile() {
42296898eb6SLawrence D'Anna   LLDB_RECORD_METHOD_NO_ARGS(SBFile, SBDebugger, GetOutputFile);
42396898eb6SLawrence D'Anna   if (m_opaque_sp) {
42496898eb6SLawrence D'Anna     SBFile file(m_opaque_sp->GetOutputStream().GetFileSP());
42596898eb6SLawrence D'Anna     return LLDB_RECORD_RESULT(file);
42696898eb6SLawrence D'Anna   }
42796898eb6SLawrence D'Anna   return LLDB_RECORD_RESULT(SBFile());
42896898eb6SLawrence D'Anna }
42996898eb6SLawrence D'Anna 
430b9c1b51eSKate Stone FILE *SBDebugger::GetErrorFileHandle() {
431baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetErrorFileHandle);
432baf5664fSJonas Devlieghere 
433b9c1b51eSKate Stone   if (m_opaque_sp) {
4347ca15ba7SLawrence D'Anna     StreamFile &stream_file = m_opaque_sp->GetErrorStream();
4357ca15ba7SLawrence D'Anna     return LLDB_RECORD_RESULT(stream_file.GetFile().GetStream());
43644d93782SGreg Clayton   }
437fe5ab6d2SJonas Devlieghere   return LLDB_RECORD_RESULT(nullptr);
43830fdc8d8SChris Lattner }
43930fdc8d8SChris Lattner 
44096898eb6SLawrence D'Anna SBFile SBDebugger::GetErrorFile() {
44196898eb6SLawrence D'Anna   LLDB_RECORD_METHOD_NO_ARGS(SBFile, SBDebugger, GetErrorFile);
44296898eb6SLawrence D'Anna   SBFile file;
44396898eb6SLawrence D'Anna   if (m_opaque_sp) {
44496898eb6SLawrence D'Anna     SBFile file(m_opaque_sp->GetErrorStream().GetFileSP());
44596898eb6SLawrence D'Anna     return LLDB_RECORD_RESULT(file);
44696898eb6SLawrence D'Anna   }
44796898eb6SLawrence D'Anna   return LLDB_RECORD_RESULT(SBFile());
44896898eb6SLawrence D'Anna }
44996898eb6SLawrence D'Anna 
450b9c1b51eSKate Stone void SBDebugger::SaveInputTerminalState() {
451b328dcbfSJonas Devlieghere   LLDB_RECORD_DUMMY_NO_ARGS(void, SBDebugger, SaveInputTerminalState);
452baf5664fSJonas Devlieghere 
453c5917d9aSJim Ingham   if (m_opaque_sp)
454c5917d9aSJim Ingham     m_opaque_sp->SaveInputTerminalState();
455c5917d9aSJim Ingham }
456c5917d9aSJim Ingham 
457b9c1b51eSKate Stone void SBDebugger::RestoreInputTerminalState() {
458b328dcbfSJonas Devlieghere   LLDB_RECORD_DUMMY_NO_ARGS(void, SBDebugger, RestoreInputTerminalState);
459baf5664fSJonas Devlieghere 
460c5917d9aSJim Ingham   if (m_opaque_sp)
461c5917d9aSJim Ingham     m_opaque_sp->RestoreInputTerminalState();
462c5917d9aSJim Ingham }
463b9c1b51eSKate Stone SBCommandInterpreter SBDebugger::GetCommandInterpreter() {
464baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBCommandInterpreter, SBDebugger,
465baf5664fSJonas Devlieghere                              GetCommandInterpreter);
466baf5664fSJonas Devlieghere 
4676611103cSGreg Clayton   SBCommandInterpreter sb_interpreter;
4686611103cSGreg Clayton   if (m_opaque_sp)
4696611103cSGreg Clayton     sb_interpreter.reset(&m_opaque_sp->GetCommandInterpreter());
470ceb6b139SCaroline Tice 
471baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_interpreter);
47230fdc8d8SChris Lattner }
47330fdc8d8SChris Lattner 
474b9c1b51eSKate Stone void SBDebugger::HandleCommand(const char *command) {
475baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, HandleCommand, (const char *), command);
476baf5664fSJonas Devlieghere 
477b9c1b51eSKate Stone   if (m_opaque_sp) {
478af67cecdSGreg Clayton     TargetSP target_sp(m_opaque_sp->GetSelectedTarget());
479bb19a13cSSaleem Abdulrasool     std::unique_lock<std::recursive_mutex> lock;
480af67cecdSGreg Clayton     if (target_sp)
481bb19a13cSSaleem Abdulrasool       lock = std::unique_lock<std::recursive_mutex>(target_sp->GetAPIMutex());
482af67cecdSGreg Clayton 
4836611103cSGreg Clayton     SBCommandInterpreter sb_interpreter(GetCommandInterpreter());
48430fdc8d8SChris Lattner     SBCommandReturnObject result;
48530fdc8d8SChris Lattner 
48630fdc8d8SChris Lattner     sb_interpreter.HandleCommand(command, result, false);
48730fdc8d8SChris Lattner 
4885da2bc22SLawrence D'Anna     result.PutError(m_opaque_sp->GetErrorStream().GetFileSP());
4895da2bc22SLawrence D'Anna     result.PutOutput(m_opaque_sp->GetOutputStream().GetFileSP());
49030fdc8d8SChris Lattner 
491b9c1b51eSKate Stone     if (!m_opaque_sp->GetAsyncExecution()) {
4926611103cSGreg Clayton       SBProcess process(GetCommandInterpreter().GetProcess());
493b9556accSGreg Clayton       ProcessSP process_sp(process.GetSP());
494b9c1b51eSKate Stone       if (process_sp) {
49530fdc8d8SChris Lattner         EventSP event_sp;
496583bbb1dSJim Ingham         ListenerSP lldb_listener_sp = m_opaque_sp->GetListener();
497d35031e1SPavel Labath         while (lldb_listener_sp->GetEventForBroadcaster(
498d35031e1SPavel Labath             process_sp.get(), event_sp, std::chrono::seconds(0))) {
49930fdc8d8SChris Lattner           SBEvent event(event_sp);
500322f12afSLawrence D'Anna           HandleProcessEvent(process, event, GetOutputFile(), GetErrorFile());
50130fdc8d8SChris Lattner         }
50230fdc8d8SChris Lattner       }
50330fdc8d8SChris Lattner     }
50430fdc8d8SChris Lattner   }
5056611103cSGreg Clayton }
50630fdc8d8SChris Lattner 
507b9c1b51eSKate Stone SBListener SBDebugger::GetListener() {
508baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBListener, SBDebugger, GetListener);
509baf5664fSJonas Devlieghere 
5106611103cSGreg Clayton   SBListener sb_listener;
5116611103cSGreg Clayton   if (m_opaque_sp)
512583bbb1dSJim Ingham     sb_listener.reset(m_opaque_sp->GetListener());
513ceb6b139SCaroline Tice 
514baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_listener);
51530fdc8d8SChris Lattner }
51630fdc8d8SChris Lattner 
517b9c1b51eSKate Stone void SBDebugger::HandleProcessEvent(const SBProcess &process,
518322f12afSLawrence D'Anna                                     const SBEvent &event, SBFile out,
519322f12afSLawrence D'Anna                                     SBFile err) {
520322f12afSLawrence D'Anna   LLDB_RECORD_METHOD(
521322f12afSLawrence D'Anna       void, SBDebugger, HandleProcessEvent,
522322f12afSLawrence D'Anna       (const lldb::SBProcess &, const lldb::SBEvent &, SBFile, SBFile), process,
523322f12afSLawrence D'Anna       event, out, err);
524322f12afSLawrence D'Anna 
525322f12afSLawrence D'Anna   return HandleProcessEvent(process, event, out.m_opaque_sp, err.m_opaque_sp);
526322f12afSLawrence D'Anna }
527322f12afSLawrence D'Anna 
528322f12afSLawrence D'Anna void SBDebugger::HandleProcessEvent(const SBProcess &process,
529b9c1b51eSKate Stone                                     const SBEvent &event, FILE *out,
530b9c1b51eSKate Stone                                     FILE *err) {
531baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
532baf5664fSJonas Devlieghere       void, SBDebugger, HandleProcessEvent,
533baf5664fSJonas Devlieghere       (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *), process,
534baf5664fSJonas Devlieghere       event, out, err);
535baf5664fSJonas Devlieghere 
536322f12afSLawrence D'Anna   FileSP outfile = std::make_shared<NativeFile>(out, false);
537322f12afSLawrence D'Anna   FileSP errfile = std::make_shared<NativeFile>(err, false);
538322f12afSLawrence D'Anna   return HandleProcessEvent(process, event, outfile, errfile);
539322f12afSLawrence D'Anna }
540322f12afSLawrence D'Anna 
541322f12afSLawrence D'Anna void SBDebugger::HandleProcessEvent(const SBProcess &process,
542322f12afSLawrence D'Anna                                     const SBEvent &event, FileSP out_sp,
543322f12afSLawrence D'Anna                                     FileSP err_sp) {
544322f12afSLawrence D'Anna 
545322f12afSLawrence D'Anna   LLDB_RECORD_METHOD(
546322f12afSLawrence D'Anna       void, SBDebugger, HandleProcessEvent,
547322f12afSLawrence D'Anna       (const lldb::SBProcess &, const lldb::SBEvent &, FileSP, FileSP), process,
548322f12afSLawrence D'Anna       event, out_sp, err_sp);
549322f12afSLawrence D'Anna 
550af67cecdSGreg Clayton   if (!process.IsValid())
551af67cecdSGreg Clayton     return;
552af67cecdSGreg Clayton 
553b9556accSGreg Clayton   TargetSP target_sp(process.GetTarget().GetSP());
554b9556accSGreg Clayton   if (!target_sp)
555b9556accSGreg Clayton     return;
556b9556accSGreg Clayton 
55730fdc8d8SChris Lattner   const uint32_t event_type = event.GetType();
55830fdc8d8SChris Lattner   char stdio_buffer[1024];
55930fdc8d8SChris Lattner   size_t len;
56030fdc8d8SChris Lattner 
561bb19a13cSSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(target_sp->GetAPIMutex());
562af67cecdSGreg Clayton 
563b9c1b51eSKate Stone   if (event_type &
564b9c1b51eSKate Stone       (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) {
565af67cecdSGreg Clayton     // Drain stdout when we stop just in case we have any bytes
56630fdc8d8SChris Lattner     while ((len = process.GetSTDOUT(stdio_buffer, sizeof(stdio_buffer))) > 0)
567322f12afSLawrence D'Anna       if (out_sp)
568322f12afSLawrence D'Anna         out_sp->Write(stdio_buffer, len);
56930fdc8d8SChris Lattner   }
570af67cecdSGreg Clayton 
571b9c1b51eSKate Stone   if (event_type &
572b9c1b51eSKate Stone       (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) {
573af67cecdSGreg Clayton     // Drain stderr when we stop just in case we have any bytes
57430fdc8d8SChris Lattner     while ((len = process.GetSTDERR(stdio_buffer, sizeof(stdio_buffer))) > 0)
575322f12afSLawrence D'Anna       if (err_sp)
576322f12afSLawrence D'Anna         err_sp->Write(stdio_buffer, len);
57730fdc8d8SChris Lattner   }
578af67cecdSGreg Clayton 
579b9c1b51eSKate Stone   if (event_type & Process::eBroadcastBitStateChanged) {
58030fdc8d8SChris Lattner     StateType event_state = SBProcess::GetStateFromEvent(event);
58130fdc8d8SChris Lattner 
58230fdc8d8SChris Lattner     if (event_state == eStateInvalid)
58330fdc8d8SChris Lattner       return;
58430fdc8d8SChris Lattner 
58530fdc8d8SChris Lattner     bool is_stopped = StateIsStoppedState(event_state);
58630fdc8d8SChris Lattner     if (!is_stopped)
587322f12afSLawrence D'Anna       process.ReportEventState(event, out_sp);
58830fdc8d8SChris Lattner   }
58930fdc8d8SChris Lattner }
59030fdc8d8SChris Lattner 
591b9c1b51eSKate Stone SBSourceManager SBDebugger::GetSourceManager() {
592baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBSourceManager, SBDebugger,
593baf5664fSJonas Devlieghere                              GetSourceManager);
594baf5664fSJonas Devlieghere 
595e37d605eSJim Ingham   SBSourceManager sb_source_manager(*this);
596baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_source_manager);
59730fdc8d8SChris Lattner }
59830fdc8d8SChris Lattner 
599b9c1b51eSKate Stone bool SBDebugger::GetDefaultArchitecture(char *arch_name, size_t arch_name_len) {
600e687aa82SJonas Devlieghere   LLDB_RECORD_CHAR_PTR_STATIC_METHOD(bool, SBDebugger, GetDefaultArchitecture,
601e687aa82SJonas Devlieghere                                      (char *, size_t), arch_name, "",
602e687aa82SJonas Devlieghere                                      arch_name_len);
603baf5664fSJonas Devlieghere 
604b9c1b51eSKate Stone   if (arch_name && arch_name_len) {
605431ce678SGreg Clayton     ArchSpec default_arch = Target::GetDefaultArchitecture();
606daccaa9eSCaroline Tice 
607b9c1b51eSKate Stone     if (default_arch.IsValid()) {
608431ce678SGreg Clayton       const std::string &triple_str = default_arch.GetTriple().str();
609431ce678SGreg Clayton       if (!triple_str.empty())
610431ce678SGreg Clayton         ::snprintf(arch_name, arch_name_len, "%s", triple_str.c_str());
611431ce678SGreg Clayton       else
612b9c1b51eSKate Stone         ::snprintf(arch_name, arch_name_len, "%s",
613b9c1b51eSKate Stone                    default_arch.GetArchitectureName());
61430fdc8d8SChris Lattner       return true;
61530fdc8d8SChris Lattner     }
61630fdc8d8SChris Lattner   }
61730fdc8d8SChris Lattner   if (arch_name && arch_name_len)
61830fdc8d8SChris Lattner     arch_name[0] = '\0';
61930fdc8d8SChris Lattner   return false;
62030fdc8d8SChris Lattner }
62130fdc8d8SChris Lattner 
622b9c1b51eSKate Stone bool SBDebugger::SetDefaultArchitecture(const char *arch_name) {
623baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture,
624baf5664fSJonas Devlieghere                             (const char *), arch_name);
625baf5664fSJonas Devlieghere 
626b9c1b51eSKate Stone   if (arch_name) {
62770512317SGreg Clayton     ArchSpec arch(arch_name);
628b9c1b51eSKate Stone     if (arch.IsValid()) {
629431ce678SGreg Clayton       Target::SetDefaultArchitecture(arch);
63030fdc8d8SChris Lattner       return true;
63130fdc8d8SChris Lattner     }
63230fdc8d8SChris Lattner   }
63330fdc8d8SChris Lattner   return false;
63430fdc8d8SChris Lattner }
63530fdc8d8SChris Lattner 
63630fdc8d8SChris Lattner ScriptLanguage
637b9c1b51eSKate Stone SBDebugger::GetScriptingLanguage(const char *script_language_name) {
638baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage,
639baf5664fSJonas Devlieghere                      (const char *), script_language_name);
640baf5664fSJonas Devlieghere 
641d9aec34bSJonas Devlieghere   if (!script_language_name)
642d9aec34bSJonas Devlieghere     return eScriptLanguageDefault;
64347cbf4a0SPavel Labath   return OptionArgParser::ToScriptLanguage(
64447cbf4a0SPavel Labath       llvm::StringRef(script_language_name), eScriptLanguageDefault, nullptr);
64530fdc8d8SChris Lattner }
64630fdc8d8SChris Lattner 
647b9c1b51eSKate Stone const char *SBDebugger::GetVersionString() {
648baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(const char *, SBDebugger, GetVersionString);
649baf5664fSJonas Devlieghere 
650b2f1fb29SVirgile Bello   return lldb_private::GetVersion();
65130fdc8d8SChris Lattner }
65230fdc8d8SChris Lattner 
653b9c1b51eSKate Stone const char *SBDebugger::StateAsCString(StateType state) {
654baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(const char *, SBDebugger, StateAsCString,
655baf5664fSJonas Devlieghere                             (lldb::StateType), state);
656baf5664fSJonas Devlieghere 
657c2bbb49aSCaroline Tice   return lldb_private::StateAsCString(state);
65830fdc8d8SChris Lattner }
65930fdc8d8SChris Lattner 
660f1389e92SPavel Labath static void AddBoolConfigEntry(StructuredData::Dictionary &dict,
661f1389e92SPavel Labath                                llvm::StringRef name, bool value,
662f1389e92SPavel Labath                                llvm::StringRef description) {
663a8f3ae7cSJonas Devlieghere   auto entry_up = std::make_unique<StructuredData::Dictionary>();
664f1389e92SPavel Labath   entry_up->AddBooleanItem("value", value);
665f1389e92SPavel Labath   entry_up->AddStringItem("description", description);
666f1389e92SPavel Labath   dict.AddItem(name, std::move(entry_up));
667f1389e92SPavel Labath }
668f1389e92SPavel Labath 
669abc0c6adSPavel Labath static void AddLLVMTargets(StructuredData::Dictionary &dict) {
670a8f3ae7cSJonas Devlieghere   auto array_up = std::make_unique<StructuredData::Array>();
671abc0c6adSPavel Labath #define LLVM_TARGET(target)                                                    \
672a8f3ae7cSJonas Devlieghere   array_up->AddItem(std::make_unique<StructuredData::String>(#target));
673abc0c6adSPavel Labath #include "llvm/Config/Targets.def"
674a8f3ae7cSJonas Devlieghere   auto entry_up = std::make_unique<StructuredData::Dictionary>();
675abc0c6adSPavel Labath   entry_up->AddItem("value", std::move(array_up));
676abc0c6adSPavel Labath   entry_up->AddStringItem("description", "A list of configured LLVM targets.");
677abc0c6adSPavel Labath   dict.AddItem("targets", std::move(entry_up));
678abc0c6adSPavel Labath }
679abc0c6adSPavel Labath 
680f1389e92SPavel Labath SBStructuredData SBDebugger::GetBuildConfiguration() {
681baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBStructuredData, SBDebugger,
682baf5664fSJonas Devlieghere                                     GetBuildConfiguration);
683baf5664fSJonas Devlieghere 
684a8f3ae7cSJonas Devlieghere   auto config_up = std::make_unique<StructuredData::Dictionary>();
685f1389e92SPavel Labath   AddBoolConfigEntry(
686f1389e92SPavel Labath       *config_up, "xml", XMLDocument::XMLEnabled(),
687f1389e92SPavel Labath       "A boolean value that indicates if XML support is enabled in LLDB");
688eafede2aSPavel Labath   AddBoolConfigEntry(
689a4304f96SJonas Devlieghere       *config_up, "curses", LLDB_ENABLE_CURSES,
690eafede2aSPavel Labath       "A boolean value that indicates if curses support is enabled in LLDB");
6916cc3ee17SJonas Devlieghere   AddBoolConfigEntry(
6926cc3ee17SJonas Devlieghere       *config_up, "editline", LLDB_ENABLE_LIBEDIT,
6936cc3ee17SJonas Devlieghere       "A boolean value that indicates if editline support is enabled in LLDB");
6946cc3ee17SJonas Devlieghere   AddBoolConfigEntry(
6956cc3ee17SJonas Devlieghere       *config_up, "lzma", LLDB_ENABLE_LZMA,
6966cc3ee17SJonas Devlieghere       "A boolean value that indicates if lzma support is enabled in LLDB");
6976cc3ee17SJonas Devlieghere   AddBoolConfigEntry(
6986cc3ee17SJonas Devlieghere       *config_up, "python", LLDB_ENABLE_PYTHON,
6996cc3ee17SJonas Devlieghere       "A boolean value that indicates if python support is enabled in LLDB");
7006cc3ee17SJonas Devlieghere   AddBoolConfigEntry(
7016cc3ee17SJonas Devlieghere       *config_up, "lua", LLDB_ENABLE_LUA,
7026cc3ee17SJonas Devlieghere       "A boolean value that indicates if lua support is enabled in LLDB");
703abc0c6adSPavel Labath   AddLLVMTargets(*config_up);
704f1389e92SPavel Labath 
705f1389e92SPavel Labath   SBStructuredData data;
706f1389e92SPavel Labath   data.m_impl_up->SetObjectSP(std::move(config_up));
707baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(data);
708f1389e92SPavel Labath }
709f1389e92SPavel Labath 
710b9c1b51eSKate Stone bool SBDebugger::StateIsRunningState(StateType state) {
711baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsRunningState,
712baf5664fSJonas Devlieghere                             (lldb::StateType), state);
713baf5664fSJonas Devlieghere 
714c2bbb49aSCaroline Tice   const bool result = lldb_private::StateIsRunningState(state);
7154838131bSGreg Clayton 
7164838131bSGreg Clayton   return result;
71730fdc8d8SChris Lattner }
71830fdc8d8SChris Lattner 
719b9c1b51eSKate Stone bool SBDebugger::StateIsStoppedState(StateType state) {
720baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState,
721baf5664fSJonas Devlieghere                             (lldb::StateType), state);
722baf5664fSJonas Devlieghere 
7232637f825SGreg Clayton   const bool result = lldb_private::StateIsStoppedState(state, false);
724ceb6b139SCaroline Tice 
7254838131bSGreg Clayton   return result;
72630fdc8d8SChris Lattner }
72730fdc8d8SChris Lattner 
728b9c1b51eSKate Stone lldb::SBTarget SBDebugger::CreateTarget(const char *filename,
729cac9c5f9SGreg Clayton                                         const char *target_triple,
730cac9c5f9SGreg Clayton                                         const char *platform_name,
731cac9c5f9SGreg Clayton                                         bool add_dependent_modules,
732b9c1b51eSKate Stone                                         lldb::SBError &sb_error) {
733baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
734baf5664fSJonas Devlieghere       lldb::SBTarget, SBDebugger, CreateTarget,
735baf5664fSJonas Devlieghere       (const char *, const char *, const char *, bool, lldb::SBError &),
736baf5664fSJonas Devlieghere       filename, target_triple, platform_name, add_dependent_modules, sb_error);
737baf5664fSJonas Devlieghere 
738cac9c5f9SGreg Clayton   SBTarget sb_target;
739b9556accSGreg Clayton   TargetSP target_sp;
740b9c1b51eSKate Stone   if (m_opaque_sp) {
741cac9c5f9SGreg Clayton     sb_error.Clear();
742cac9c5f9SGreg Clayton     OptionGroupPlatform platform_options(false);
743cac9c5f9SGreg Clayton     platform_options.SetPlatformName(platform_name);
744cac9c5f9SGreg Clayton 
745b9c1b51eSKate Stone     sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget(
746f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, target_triple,
747f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo,
748b9c1b51eSKate Stone         &platform_options, target_sp);
749cac9c5f9SGreg Clayton 
750cac9c5f9SGreg Clayton     if (sb_error.Success())
751b9556accSGreg Clayton       sb_target.SetSP(target_sp);
752b9c1b51eSKate Stone   } else {
7539f521f22SJim Ingham     sb_error.SetErrorString("invalid debugger");
754cac9c5f9SGreg Clayton   }
755cac9c5f9SGreg Clayton 
7565160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
75763e5fb76SJonas Devlieghere   LLDB_LOGF(log,
75863e5fb76SJonas Devlieghere             "SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, "
759b9c1b51eSKate Stone             "platform_name=%s, add_dependent_modules=%u, error=%s) => "
760b9c1b51eSKate Stone             "SBTarget(%p)",
761b9c1b51eSKate Stone             static_cast<void *>(m_opaque_sp.get()), filename, target_triple,
762b9c1b51eSKate Stone             platform_name, add_dependent_modules, sb_error.GetCString(),
763b9c1b51eSKate Stone             static_cast<void *>(target_sp.get()));
764cac9c5f9SGreg Clayton 
765baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
766cac9c5f9SGreg Clayton }
76730fdc8d8SChris Lattner 
76830fdc8d8SChris Lattner SBTarget
76930fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple(const char *filename,
770b9c1b51eSKate Stone                                                 const char *target_triple) {
771baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger,
772baf5664fSJonas Devlieghere                      CreateTargetWithFileAndTargetTriple,
773baf5664fSJonas Devlieghere                      (const char *, const char *), filename, target_triple);
774baf5664fSJonas Devlieghere 
775b9556accSGreg Clayton   SBTarget sb_target;
776b9556accSGreg Clayton   TargetSP target_sp;
777b9c1b51eSKate Stone   if (m_opaque_sp) {
778cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
77997206d57SZachary Turner     Status error(m_opaque_sp->GetTargetList().CreateTarget(
780f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, target_triple,
781f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
782cac9c5f9SGreg Clayton         target_sp));
783b9556accSGreg Clayton     sb_target.SetSP(target_sp);
7846611103cSGreg Clayton   }
7854838131bSGreg Clayton 
7865160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
78763e5fb76SJonas Devlieghere   LLDB_LOGF(log,
78863e5fb76SJonas Devlieghere             "SBDebugger(%p)::CreateTargetWithFileAndTargetTriple "
789b9c1b51eSKate Stone             "(filename=\"%s\", triple=%s) => SBTarget(%p)",
790b9c1b51eSKate Stone             static_cast<void *>(m_opaque_sp.get()), filename, target_triple,
791b9c1b51eSKate Stone             static_cast<void *>(target_sp.get()));
7924838131bSGreg Clayton 
793baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
79430fdc8d8SChris Lattner }
79530fdc8d8SChris Lattner 
796b9c1b51eSKate Stone SBTarget SBDebugger::CreateTargetWithFileAndArch(const char *filename,
797b9c1b51eSKate Stone                                                  const char *arch_cstr) {
798baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTargetWithFileAndArch,
799baf5664fSJonas Devlieghere                      (const char *, const char *), filename, arch_cstr);
800baf5664fSJonas Devlieghere 
8015160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
802ceb6b139SCaroline Tice 
803b9556accSGreg Clayton   SBTarget sb_target;
804b9556accSGreg Clayton   TargetSP target_sp;
805b9c1b51eSKate Stone   if (m_opaque_sp) {
80697206d57SZachary Turner     Status error;
807cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
80830fdc8d8SChris Lattner 
809b9c1b51eSKate Stone     error = m_opaque_sp->GetTargetList().CreateTarget(
810f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, arch_cstr,
811f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
812cac9c5f9SGreg Clayton         target_sp);
81330fdc8d8SChris Lattner 
814b9c1b51eSKate Stone     if (error.Success()) {
8152976d00aSJim Ingham       m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
816b9556accSGreg Clayton       sb_target.SetSP(target_sp);
8176611103cSGreg Clayton     }
8186611103cSGreg Clayton   }
819ceb6b139SCaroline Tice 
82063e5fb76SJonas Devlieghere   LLDB_LOGF(log,
82163e5fb76SJonas Devlieghere             "SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", "
822b9c1b51eSKate Stone             "arch=%s) => SBTarget(%p)",
823324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()), filename, arch_cstr,
824324a1036SSaleem Abdulrasool             static_cast<void *>(target_sp.get()));
825ceb6b139SCaroline Tice 
826baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
82730fdc8d8SChris Lattner }
82830fdc8d8SChris Lattner 
829b9c1b51eSKate Stone SBTarget SBDebugger::CreateTarget(const char *filename) {
830baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTarget, (const char *),
831baf5664fSJonas Devlieghere                      filename);
832baf5664fSJonas Devlieghere 
833b9556accSGreg Clayton   SBTarget sb_target;
834b9556accSGreg Clayton   TargetSP target_sp;
835b9c1b51eSKate Stone   if (m_opaque_sp) {
83697206d57SZachary Turner     Status error;
837cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
838b9c1b51eSKate Stone     error = m_opaque_sp->GetTargetList().CreateTarget(
839f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, "",
840f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
841f9a07e9fSJonas Devlieghere         target_sp);
84230fdc8d8SChris Lattner 
843b9c1b51eSKate Stone     if (error.Success()) {
8442976d00aSJim Ingham       m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
845b9556accSGreg Clayton       sb_target.SetSP(target_sp);
8466611103cSGreg Clayton     }
8476611103cSGreg Clayton   }
8485160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
84963e5fb76SJonas Devlieghere   LLDB_LOGF(log,
850b9c1b51eSKate Stone             "SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
851324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()), filename,
852324a1036SSaleem Abdulrasool             static_cast<void *>(target_sp.get()));
853baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
85430fdc8d8SChris Lattner }
85530fdc8d8SChris Lattner 
856b842f2ecSJim Ingham SBTarget SBDebugger::GetDummyTarget() {
857baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetDummyTarget);
858baf5664fSJonas Devlieghere 
859b842f2ecSJim Ingham   SBTarget sb_target;
860b842f2ecSJim Ingham   if (m_opaque_sp) {
861b842f2ecSJim Ingham     sb_target.SetSP(m_opaque_sp->GetDummyTarget()->shared_from_this());
862b842f2ecSJim Ingham   }
863b842f2ecSJim Ingham   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
86463e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::GetDummyTarget() => SBTarget(%p)",
865b842f2ecSJim Ingham             static_cast<void *>(m_opaque_sp.get()),
866b842f2ecSJim Ingham             static_cast<void *>(sb_target.GetSP().get()));
867baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
868b842f2ecSJim Ingham }
869b842f2ecSJim Ingham 
870b9c1b51eSKate Stone bool SBDebugger::DeleteTarget(lldb::SBTarget &target) {
871baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &),
872baf5664fSJonas Devlieghere                      target);
873baf5664fSJonas Devlieghere 
8743794ad95SJohnny Chen   bool result = false;
875b9c1b51eSKate Stone   if (m_opaque_sp) {
876b9556accSGreg Clayton     TargetSP target_sp(target.GetSP());
877b9c1b51eSKate Stone     if (target_sp) {
8783794ad95SJohnny Chen       // No need to lock, the target list is thread safe
879b9556accSGreg Clayton       result = m_opaque_sp->GetTargetList().DeleteTarget(target_sp);
880b9556accSGreg Clayton       target_sp->Destroy();
88175340622SGreg Clayton       target.Clear();
8820cd70866SGreg Clayton       const bool mandatory = true;
8830cd70866SGreg Clayton       ModuleList::RemoveOrphanSharedModules(mandatory);
8843794ad95SJohnny Chen     }
885b9556accSGreg Clayton   }
8863794ad95SJohnny Chen 
8875160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
88863e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i",
889324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
890324a1036SSaleem Abdulrasool             static_cast<void *>(target.m_opaque_sp.get()), result);
8913794ad95SJohnny Chen 
8923794ad95SJohnny Chen   return result;
8933794ad95SJohnny Chen }
894dbb0abbfSEugene Zelenko 
895b9c1b51eSKate Stone SBTarget SBDebugger::GetTargetAtIndex(uint32_t idx) {
896baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex, (uint32_t),
897baf5664fSJonas Devlieghere                      idx);
898baf5664fSJonas Devlieghere 
8996611103cSGreg Clayton   SBTarget sb_target;
900b9c1b51eSKate Stone   if (m_opaque_sp) {
901af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
902b9556accSGreg Clayton     sb_target.SetSP(m_opaque_sp->GetTargetList().GetTargetAtIndex(idx));
903af67cecdSGreg Clayton   }
904baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
90530fdc8d8SChris Lattner }
90630fdc8d8SChris Lattner 
907b9c1b51eSKate Stone uint32_t SBDebugger::GetIndexOfTarget(lldb::SBTarget target) {
908baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBDebugger, GetIndexOfTarget, (lldb::SBTarget),
909baf5664fSJonas Devlieghere                      target);
9108499e1a4SJim Ingham 
9118499e1a4SJim Ingham   lldb::TargetSP target_sp = target.GetSP();
9128499e1a4SJim Ingham   if (!target_sp)
9138499e1a4SJim Ingham     return UINT32_MAX;
9148499e1a4SJim Ingham 
9158499e1a4SJim Ingham   if (!m_opaque_sp)
9168499e1a4SJim Ingham     return UINT32_MAX;
9178499e1a4SJim Ingham 
9188499e1a4SJim Ingham   return m_opaque_sp->GetTargetList().GetIndexOfTarget(target.GetSP());
9198499e1a4SJim Ingham }
9208499e1a4SJim Ingham 
921b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithProcessID(lldb::pid_t pid) {
922baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID,
923baf5664fSJonas Devlieghere                      (lldb::pid_t), pid);
924baf5664fSJonas Devlieghere 
9256611103cSGreg Clayton   SBTarget sb_target;
926b9c1b51eSKate Stone   if (m_opaque_sp) {
927af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
928b9556accSGreg Clayton     sb_target.SetSP(m_opaque_sp->GetTargetList().FindTargetWithProcessID(pid));
929af67cecdSGreg Clayton   }
930baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
93130fdc8d8SChris Lattner }
93230fdc8d8SChris Lattner 
933b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithFileAndArch(const char *filename,
934b9c1b51eSKate Stone                                                const char *arch_name) {
935baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch,
936baf5664fSJonas Devlieghere                      (const char *, const char *), filename, arch_name);
937baf5664fSJonas Devlieghere 
9386611103cSGreg Clayton   SBTarget sb_target;
939b9c1b51eSKate Stone   if (m_opaque_sp && filename && filename[0]) {
940af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
9417263f1bdSPavel Labath     ArchSpec arch = Platform::GetAugmentedArchSpec(
9427263f1bdSPavel Labath         m_opaque_sp->GetPlatformList().GetSelectedPlatform().get(), arch_name);
943b9c1b51eSKate Stone     TargetSP target_sp(
944b9c1b51eSKate Stone         m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture(
9458f3be7a3SJonas Devlieghere             FileSpec(filename), arch_name ? &arch : nullptr));
946b9556accSGreg Clayton     sb_target.SetSP(target_sp);
9476611103cSGreg Clayton   }
948baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
94930fdc8d8SChris Lattner }
95030fdc8d8SChris Lattner 
951b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithLLDBProcess(const ProcessSP &process_sp) {
9526611103cSGreg Clayton   SBTarget sb_target;
953b9c1b51eSKate Stone   if (m_opaque_sp) {
954af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
955b9c1b51eSKate Stone     sb_target.SetSP(
956b9c1b51eSKate Stone         m_opaque_sp->GetTargetList().FindTargetWithProcess(process_sp.get()));
957af67cecdSGreg Clayton   }
95830fdc8d8SChris Lattner   return sb_target;
95930fdc8d8SChris Lattner }
96030fdc8d8SChris Lattner 
961b9c1b51eSKate Stone uint32_t SBDebugger::GetNumTargets() {
962baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumTargets);
963baf5664fSJonas Devlieghere 
964b9c1b51eSKate Stone   if (m_opaque_sp) {
965af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
9666611103cSGreg Clayton     return m_opaque_sp->GetTargetList().GetNumTargets();
967af67cecdSGreg Clayton   }
9686611103cSGreg Clayton   return 0;
9696611103cSGreg Clayton }
97030fdc8d8SChris Lattner 
971b9c1b51eSKate Stone SBTarget SBDebugger::GetSelectedTarget() {
972baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetSelectedTarget);
973baf5664fSJonas Devlieghere 
9745160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
975ceb6b139SCaroline Tice 
9766611103cSGreg Clayton   SBTarget sb_target;
977b9556accSGreg Clayton   TargetSP target_sp;
978b9c1b51eSKate Stone   if (m_opaque_sp) {
979af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
980b9556accSGreg Clayton     target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget();
981b9556accSGreg Clayton     sb_target.SetSP(target_sp);
982af67cecdSGreg Clayton   }
983ceb6b139SCaroline Tice 
984b9c1b51eSKate Stone   if (log) {
985ceb6b139SCaroline Tice     SBStream sstr;
986431ce678SGreg Clayton     sb_target.GetDescription(sstr, eDescriptionLevelBrief);
98763e5fb76SJonas Devlieghere     LLDB_LOGF(log, "SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s",
988324a1036SSaleem Abdulrasool               static_cast<void *>(m_opaque_sp.get()),
989324a1036SSaleem Abdulrasool               static_cast<void *>(target_sp.get()), sstr.GetData());
990ceb6b139SCaroline Tice   }
991ceb6b139SCaroline Tice 
992baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
99330fdc8d8SChris Lattner }
99430fdc8d8SChris Lattner 
995b9c1b51eSKate Stone void SBDebugger::SetSelectedTarget(SBTarget &sb_target) {
996baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedTarget, (lldb::SBTarget &),
997baf5664fSJonas Devlieghere                      sb_target);
998baf5664fSJonas Devlieghere 
9995160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1000e64f0dc7SJim Ingham 
1001b9556accSGreg Clayton   TargetSP target_sp(sb_target.GetSP());
1002b9c1b51eSKate Stone   if (m_opaque_sp) {
1003b9556accSGreg Clayton     m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
1004e64f0dc7SJim Ingham   }
1005b9c1b51eSKate Stone   if (log) {
1006e64f0dc7SJim Ingham     SBStream sstr;
1007e64f0dc7SJim Ingham     sb_target.GetDescription(sstr, eDescriptionLevelBrief);
100863e5fb76SJonas Devlieghere     LLDB_LOGF(log, "SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s",
1009324a1036SSaleem Abdulrasool               static_cast<void *>(m_opaque_sp.get()),
1010324a1036SSaleem Abdulrasool               static_cast<void *>(target_sp.get()), sstr.GetData());
1011e64f0dc7SJim Ingham   }
1012e64f0dc7SJim Ingham }
1013e64f0dc7SJim Ingham 
1014b9c1b51eSKate Stone SBPlatform SBDebugger::GetSelectedPlatform() {
1015baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBPlatform, SBDebugger, GetSelectedPlatform);
1016baf5664fSJonas Devlieghere 
1017fbb76349SGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1018fbb76349SGreg Clayton 
1019fbb76349SGreg Clayton   SBPlatform sb_platform;
1020fbb76349SGreg Clayton   DebuggerSP debugger_sp(m_opaque_sp);
1021b9c1b51eSKate Stone   if (debugger_sp) {
1022fbb76349SGreg Clayton     sb_platform.SetSP(debugger_sp->GetPlatformList().GetSelectedPlatform());
1023fbb76349SGreg Clayton   }
102463e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::GetSelectedPlatform () => SBPlatform(%p): %s",
1025324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
1026324a1036SSaleem Abdulrasool             static_cast<void *>(sb_platform.GetSP().get()),
1027324a1036SSaleem Abdulrasool             sb_platform.GetName());
1028baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_platform);
1029fbb76349SGreg Clayton }
1030fbb76349SGreg Clayton 
1031b9c1b51eSKate Stone void SBDebugger::SetSelectedPlatform(SBPlatform &sb_platform) {
1032baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedPlatform,
1033baf5664fSJonas Devlieghere                      (lldb::SBPlatform &), sb_platform);
1034baf5664fSJonas Devlieghere 
1035fbb76349SGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1036fbb76349SGreg Clayton 
1037fbb76349SGreg Clayton   DebuggerSP debugger_sp(m_opaque_sp);
1038b9c1b51eSKate Stone   if (debugger_sp) {
1039fbb76349SGreg Clayton     debugger_sp->GetPlatformList().SetSelectedPlatform(sb_platform.GetSP());
1040fbb76349SGreg Clayton   }
1041324a1036SSaleem Abdulrasool 
104263e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::SetSelectedPlatform (SBPlatform(%p) %s)",
1043324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
1044324a1036SSaleem Abdulrasool             static_cast<void *>(sb_platform.GetSP().get()),
1045324a1036SSaleem Abdulrasool             sb_platform.GetName());
1046fbb76349SGreg Clayton }
1047fbb76349SGreg Clayton 
1048c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumPlatforms() {
1049baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumPlatforms);
1050baf5664fSJonas Devlieghere 
1051c10e34d0SVadim Macagon   if (m_opaque_sp) {
1052c10e34d0SVadim Macagon     // No need to lock, the platform list is thread safe
1053c10e34d0SVadim Macagon     return m_opaque_sp->GetPlatformList().GetSize();
1054c10e34d0SVadim Macagon   }
1055c10e34d0SVadim Macagon   return 0;
1056c10e34d0SVadim Macagon }
1057c10e34d0SVadim Macagon 
1058c10e34d0SVadim Macagon SBPlatform SBDebugger::GetPlatformAtIndex(uint32_t idx) {
1059baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex,
1060baf5664fSJonas Devlieghere                      (uint32_t), idx);
1061baf5664fSJonas Devlieghere 
1062c10e34d0SVadim Macagon   SBPlatform sb_platform;
1063c10e34d0SVadim Macagon   if (m_opaque_sp) {
1064c10e34d0SVadim Macagon     // No need to lock, the platform list is thread safe
1065c10e34d0SVadim Macagon     sb_platform.SetSP(m_opaque_sp->GetPlatformList().GetAtIndex(idx));
1066c10e34d0SVadim Macagon   }
1067baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_platform);
1068c10e34d0SVadim Macagon }
1069c10e34d0SVadim Macagon 
1070c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumAvailablePlatforms() {
1071baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumAvailablePlatforms);
1072baf5664fSJonas Devlieghere 
1073c10e34d0SVadim Macagon   uint32_t idx = 0;
1074c10e34d0SVadim Macagon   while (true) {
1075c10e34d0SVadim Macagon     if (!PluginManager::GetPlatformPluginNameAtIndex(idx)) {
1076c10e34d0SVadim Macagon       break;
1077c10e34d0SVadim Macagon     }
1078c10e34d0SVadim Macagon     ++idx;
1079c10e34d0SVadim Macagon   }
1080c10e34d0SVadim Macagon   // +1 for the host platform, which should always appear first in the list.
1081c10e34d0SVadim Macagon   return idx + 1;
1082c10e34d0SVadim Macagon }
1083c10e34d0SVadim Macagon 
1084c10e34d0SVadim Macagon SBStructuredData SBDebugger::GetAvailablePlatformInfoAtIndex(uint32_t idx) {
1085baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBStructuredData, SBDebugger,
1086baf5664fSJonas Devlieghere                      GetAvailablePlatformInfoAtIndex, (uint32_t), idx);
1087baf5664fSJonas Devlieghere 
1088c10e34d0SVadim Macagon   SBStructuredData data;
1089a8f3ae7cSJonas Devlieghere   auto platform_dict = std::make_unique<StructuredData::Dictionary>();
1090c10e34d0SVadim Macagon   llvm::StringRef name_str("name"), desc_str("description");
1091c10e34d0SVadim Macagon 
1092c10e34d0SVadim Macagon   if (idx == 0) {
1093c10e34d0SVadim Macagon     PlatformSP host_platform_sp(Platform::GetHostPlatform());
1094c10e34d0SVadim Macagon     platform_dict->AddStringItem(
1095c10e34d0SVadim Macagon         name_str, host_platform_sp->GetPluginName().GetStringRef());
1096c10e34d0SVadim Macagon     platform_dict->AddStringItem(
1097c10e34d0SVadim Macagon         desc_str, llvm::StringRef(host_platform_sp->GetDescription()));
1098c10e34d0SVadim Macagon   } else if (idx > 0) {
1099c10e34d0SVadim Macagon     const char *plugin_name =
1100c10e34d0SVadim Macagon         PluginManager::GetPlatformPluginNameAtIndex(idx - 1);
1101c10e34d0SVadim Macagon     if (!plugin_name) {
1102baf5664fSJonas Devlieghere       return LLDB_RECORD_RESULT(data);
1103c10e34d0SVadim Macagon     }
1104c10e34d0SVadim Macagon     platform_dict->AddStringItem(name_str, llvm::StringRef(plugin_name));
1105c10e34d0SVadim Macagon 
1106c10e34d0SVadim Macagon     const char *plugin_desc =
1107c10e34d0SVadim Macagon         PluginManager::GetPlatformPluginDescriptionAtIndex(idx - 1);
1108c10e34d0SVadim Macagon     if (!plugin_desc) {
1109baf5664fSJonas Devlieghere       return LLDB_RECORD_RESULT(data);
1110c10e34d0SVadim Macagon     }
1111c10e34d0SVadim Macagon     platform_dict->AddStringItem(desc_str, llvm::StringRef(plugin_desc));
1112c10e34d0SVadim Macagon   }
1113c10e34d0SVadim Macagon 
1114c10e34d0SVadim Macagon   data.m_impl_up->SetObjectSP(
1115c10e34d0SVadim Macagon       StructuredData::ObjectSP(platform_dict.release()));
1116baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(data);
1117c10e34d0SVadim Macagon }
1118c10e34d0SVadim Macagon 
1119b9c1b51eSKate Stone void SBDebugger::DispatchInput(void *baton, const void *data, size_t data_len) {
11200d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput,
11210d7b0c96SJonas Devlieghere                     (void *, const void *, size_t), baton, data, data_len);
11220d7b0c96SJonas Devlieghere 
11236b09d423SEnrico Granata   DispatchInput(data, data_len);
11246b09d423SEnrico Granata }
11256b09d423SEnrico Granata 
1126b9c1b51eSKate Stone void SBDebugger::DispatchInput(const void *data, size_t data_len) {
11270d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput, (const void *, size_t),
11280d7b0c96SJonas Devlieghere                     data, data_len);
11290d7b0c96SJonas Devlieghere 
113044d93782SGreg Clayton   //    Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
113144d93782SGreg Clayton   //
113244d93782SGreg Clayton   //    if (log)
113363e5fb76SJonas Devlieghere   //        LLDB_LOGF(log, "SBDebugger(%p)::DispatchInput (data=\"%.*s\",
1134b9c1b51eSKate Stone   //        size_t=%" PRIu64 ")",
113544d93782SGreg Clayton   //                     m_opaque_sp.get(),
113644d93782SGreg Clayton   //                     (int) data_len,
113744d93782SGreg Clayton   //                     (const char *) data,
113844d93782SGreg Clayton   //                     (uint64_t)data_len);
113944d93782SGreg Clayton   //
114044d93782SGreg Clayton   //    if (m_opaque_sp)
114144d93782SGreg Clayton   //        m_opaque_sp->DispatchInput ((const char *) data, data_len);
114230fdc8d8SChris Lattner }
114330fdc8d8SChris Lattner 
1144b9c1b51eSKate Stone void SBDebugger::DispatchInputInterrupt() {
1145b328dcbfSJonas Devlieghere   LLDB_RECORD_DUMMY_NO_ARGS(void, SBDebugger, DispatchInputInterrupt);
1146baf5664fSJonas Devlieghere 
1147efed6131SCaroline Tice   if (m_opaque_sp)
1148efed6131SCaroline Tice     m_opaque_sp->DispatchInputInterrupt();
1149efed6131SCaroline Tice }
1150efed6131SCaroline Tice 
1151b9c1b51eSKate Stone void SBDebugger::DispatchInputEndOfFile() {
1152baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, DispatchInputEndOfFile);
1153baf5664fSJonas Devlieghere 
1154efed6131SCaroline Tice   if (m_opaque_sp)
1155efed6131SCaroline Tice     m_opaque_sp->DispatchInputEndOfFile();
1156efed6131SCaroline Tice }
11579088b068SCaroline Tice 
1158baf5664fSJonas Devlieghere void SBDebugger::PushInputReader(SBInputReader &reader) {
1159baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, PushInputReader, (lldb::SBInputReader &),
1160baf5664fSJonas Devlieghere                      reader);
1161baf5664fSJonas Devlieghere }
11626611103cSGreg Clayton 
1163b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events,
1164b9c1b51eSKate Stone                                        bool spawn_thread) {
1165baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool),
1166baf5664fSJonas Devlieghere                      auto_handle_events, spawn_thread);
1167baf5664fSJonas Devlieghere 
1168b9c1b51eSKate Stone   if (m_opaque_sp) {
116926c7bf93SJim Ingham     CommandInterpreterRunOptions options;
117032c32246SJonas Devlieghere     options.SetAutoHandleEvents(auto_handle_events);
117132c32246SJonas Devlieghere     options.SetSpawnThread(spawn_thread);
117232c32246SJonas Devlieghere     m_opaque_sp->GetCommandInterpreter().RunCommandInterpreter(options);
117326c7bf93SJim Ingham   }
117426c7bf93SJim Ingham }
117526c7bf93SJim Ingham 
1176b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events,
117726c7bf93SJim Ingham                                        bool spawn_thread,
117826c7bf93SJim Ingham                                        SBCommandInterpreterRunOptions &options,
1179b9c1b51eSKate Stone                                        int &num_errors, bool &quit_requested,
1180ffc9f1deSJim Ingham                                        bool &stopped_for_crash)
118126c7bf93SJim Ingham 
118226c7bf93SJim Ingham {
1183baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter,
1184baf5664fSJonas Devlieghere                      (bool, bool, lldb::SBCommandInterpreterRunOptions &, int &,
1185baf5664fSJonas Devlieghere                       bool &, bool &),
1186baf5664fSJonas Devlieghere                      auto_handle_events, spawn_thread, options, num_errors,
1187baf5664fSJonas Devlieghere                      quit_requested, stopped_for_crash);
1188baf5664fSJonas Devlieghere 
1189b9c1b51eSKate Stone   if (m_opaque_sp) {
119032c32246SJonas Devlieghere     options.SetAutoHandleEvents(auto_handle_events);
119132c32246SJonas Devlieghere     options.SetSpawnThread(spawn_thread);
119226c7bf93SJim Ingham     CommandInterpreter &interp = m_opaque_sp->GetCommandInterpreter();
11931bff0928SJonas Devlieghere     CommandInterpreterRunResult result =
119432c32246SJonas Devlieghere         interp.RunCommandInterpreter(options.ref());
11951bff0928SJonas Devlieghere     num_errors = result.GetNumErrors();
11961bff0928SJonas Devlieghere     quit_requested =
11971bff0928SJonas Devlieghere         result.IsResult(lldb::eCommandInterpreterResultQuitRequested);
11981bff0928SJonas Devlieghere     stopped_for_crash =
11991bff0928SJonas Devlieghere         result.IsResult(lldb::eCommandInterpreterResultInferiorCrash);
120026c7bf93SJim Ingham   }
1201969ed3d1SCaroline Tice }
1202969ed3d1SCaroline Tice 
12034c67b119SJonas Devlieghere SBCommandInterpreterRunResult SBDebugger::RunCommandInterpreter(
12044c67b119SJonas Devlieghere     const SBCommandInterpreterRunOptions &options) {
12054c67b119SJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBCommandInterpreterRunResult, SBDebugger,
12064c67b119SJonas Devlieghere                      RunCommandInterpreter,
12074c67b119SJonas Devlieghere                      (const lldb::SBCommandInterpreterRunOptions &), options);
12084c67b119SJonas Devlieghere 
12094c67b119SJonas Devlieghere   if (!m_opaque_sp)
12104c67b119SJonas Devlieghere     return LLDB_RECORD_RESULT(SBCommandInterpreterRunResult());
12114c67b119SJonas Devlieghere 
12124c67b119SJonas Devlieghere   CommandInterpreter &interp = m_opaque_sp->GetCommandInterpreter();
12134c67b119SJonas Devlieghere   CommandInterpreterRunResult result =
12144c67b119SJonas Devlieghere       interp.RunCommandInterpreter(options.ref());
12154c67b119SJonas Devlieghere 
12164c67b119SJonas Devlieghere   return LLDB_RECORD_RESULT(SBCommandInterpreterRunResult(result));
12174c67b119SJonas Devlieghere }
12184c67b119SJonas Devlieghere 
1219b9c1b51eSKate Stone SBError SBDebugger::RunREPL(lldb::LanguageType language,
1220b9c1b51eSKate Stone                             const char *repl_options) {
1221baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, RunREPL,
1222baf5664fSJonas Devlieghere                      (lldb::LanguageType, const char *), language,
1223baf5664fSJonas Devlieghere                      repl_options);
1224baf5664fSJonas Devlieghere 
12253e7e915dSSean Callanan   SBError error;
12263e7e915dSSean Callanan   if (m_opaque_sp)
12273e7e915dSSean Callanan     error.ref() = m_opaque_sp->RunREPL(language, repl_options);
12283e7e915dSSean Callanan   else
12293e7e915dSSean Callanan     error.SetErrorString("invalid debugger");
1230baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(error);
12313e7e915dSSean Callanan }
12323e7e915dSSean Callanan 
1233b9c1b51eSKate Stone void SBDebugger::reset(const DebuggerSP &debugger_sp) {
12346611103cSGreg Clayton   m_opaque_sp = debugger_sp;
12356611103cSGreg Clayton }
12366611103cSGreg Clayton 
1237b9c1b51eSKate Stone Debugger *SBDebugger::get() const { return m_opaque_sp.get(); }
12386611103cSGreg Clayton 
1239b9c1b51eSKate Stone Debugger &SBDebugger::ref() const {
12406611103cSGreg Clayton   assert(m_opaque_sp.get());
12416611103cSGreg Clayton   return *m_opaque_sp;
12426611103cSGreg Clayton }
12436611103cSGreg Clayton 
1244b9c1b51eSKate Stone const lldb::DebuggerSP &SBDebugger::get_sp() const { return m_opaque_sp; }
12456611103cSGreg Clayton 
1246b9c1b51eSKate Stone SBDebugger SBDebugger::FindDebuggerWithID(int id) {
1247baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, FindDebuggerWithID,
1248baf5664fSJonas Devlieghere                             (int), id);
1249baf5664fSJonas Devlieghere 
1250af67cecdSGreg Clayton   // No need to lock, the debugger list is thread safe
1251ebc1bb27SCaroline Tice   SBDebugger sb_debugger;
1252431ce678SGreg Clayton   DebuggerSP debugger_sp = Debugger::FindDebuggerWithID(id);
1253ebc1bb27SCaroline Tice   if (debugger_sp)
1254ebc1bb27SCaroline Tice     sb_debugger.reset(debugger_sp);
1255baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_debugger);
1256ebc1bb27SCaroline Tice }
1257e40e4218SJim Ingham 
1258b9c1b51eSKate Stone const char *SBDebugger::GetInstanceName() {
1259baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBDebugger, GetInstanceName);
1260baf5664fSJonas Devlieghere 
1261dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetInstanceName().AsCString() : nullptr);
1262dd759857SCaroline Tice }
1263dd759857SCaroline Tice 
1264b9c1b51eSKate Stone SBError SBDebugger::SetInternalVariable(const char *var_name, const char *value,
1265b9c1b51eSKate Stone                                         const char *debugger_instance_name) {
1266baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable,
1267baf5664fSJonas Devlieghere                             (const char *, const char *, const char *),
1268baf5664fSJonas Devlieghere                             var_name, value, debugger_instance_name);
1269baf5664fSJonas Devlieghere 
12706920b52bSGreg Clayton   SBError sb_error;
1271b9c1b51eSKate Stone   DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName(
1272b9c1b51eSKate Stone       ConstString(debugger_instance_name)));
127397206d57SZachary Turner   Status error;
1274b9c1b51eSKate Stone   if (debugger_sp) {
1275b9c1b51eSKate Stone     ExecutionContext exe_ctx(
1276b9c1b51eSKate Stone         debugger_sp->GetCommandInterpreter().GetExecutionContext());
1277b9c1b51eSKate Stone     error = debugger_sp->SetPropertyValue(&exe_ctx, eVarSetOperationAssign,
1278b9c1b51eSKate Stone                                           var_name, value);
1279b9c1b51eSKate Stone   } else {
1280b9c1b51eSKate Stone     error.SetErrorStringWithFormat("invalid debugger instance name '%s'",
1281b9c1b51eSKate Stone                                    debugger_instance_name);
12826920b52bSGreg Clayton   }
12836920b52bSGreg Clayton   if (error.Fail())
12846920b52bSGreg Clayton     sb_error.SetError(error);
1285baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
12863df9a8dfSCaroline Tice }
12873df9a8dfSCaroline Tice 
1288431ce678SGreg Clayton SBStringList
1289b9c1b51eSKate Stone SBDebugger::GetInternalVariableValue(const char *var_name,
1290b9c1b51eSKate Stone                                      const char *debugger_instance_name) {
1291baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(
1292baf5664fSJonas Devlieghere       lldb::SBStringList, SBDebugger, GetInternalVariableValue,
1293baf5664fSJonas Devlieghere       (const char *, const char *), var_name, debugger_instance_name);
1294baf5664fSJonas Devlieghere 
12953df9a8dfSCaroline Tice   SBStringList ret_value;
1296b9c1b51eSKate Stone   DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName(
1297b9c1b51eSKate Stone       ConstString(debugger_instance_name)));
129897206d57SZachary Turner   Status error;
1299b9c1b51eSKate Stone   if (debugger_sp) {
1300b9c1b51eSKate Stone     ExecutionContext exe_ctx(
1301b9c1b51eSKate Stone         debugger_sp->GetCommandInterpreter().GetExecutionContext());
1302b9c1b51eSKate Stone     lldb::OptionValueSP value_sp(
1303b9c1b51eSKate Stone         debugger_sp->GetPropertyValue(&exe_ctx, var_name, false, error));
1304b9c1b51eSKate Stone     if (value_sp) {
13056920b52bSGreg Clayton       StreamString value_strm;
13066920b52bSGreg Clayton       value_sp->DumpValue(&exe_ctx, value_strm, OptionValue::eDumpOptionValue);
1307adcd0268SBenjamin Kramer       const std::string &value_str = std::string(value_strm.GetString());
1308b9c1b51eSKate Stone       if (!value_str.empty()) {
13096920b52bSGreg Clayton         StringList string_list;
131044d93782SGreg Clayton         string_list.SplitIntoLines(value_str);
1311baf5664fSJonas Devlieghere         return LLDB_RECORD_RESULT(SBStringList(&string_list));
13126920b52bSGreg Clayton       }
13136920b52bSGreg Clayton     }
13146920b52bSGreg Clayton   }
1315baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBStringList());
13163df9a8dfSCaroline Tice }
13173df9a8dfSCaroline Tice 
1318b9c1b51eSKate Stone uint32_t SBDebugger::GetTerminalWidth() const {
1319baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBDebugger, GetTerminalWidth);
1320baf5664fSJonas Devlieghere 
1321dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetTerminalWidth() : 0);
1322a7015092SGreg Clayton }
1323a7015092SGreg Clayton 
1324b9c1b51eSKate Stone void SBDebugger::SetTerminalWidth(uint32_t term_width) {
1325b328dcbfSJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, SetTerminalWidth, (uint32_t), term_width);
1326baf5664fSJonas Devlieghere 
1327a7015092SGreg Clayton   if (m_opaque_sp)
1328a7015092SGreg Clayton     m_opaque_sp->SetTerminalWidth(term_width);
1329a7015092SGreg Clayton }
1330a7015092SGreg Clayton 
1331b9c1b51eSKate Stone const char *SBDebugger::GetPrompt() const {
1332baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetPrompt);
1333baf5664fSJonas Devlieghere 
13345160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1335ceb6b139SCaroline Tice 
133663e5fb76SJonas Devlieghere   LLDB_LOGF(log, "SBDebugger(%p)::GetPrompt () => \"%s\"",
1337324a1036SSaleem Abdulrasool             static_cast<void *>(m_opaque_sp.get()),
1338514d8cd8SZachary Turner             (m_opaque_sp ? m_opaque_sp->GetPrompt().str().c_str() : ""));
1339ceb6b139SCaroline Tice 
1340514d8cd8SZachary Turner   return (m_opaque_sp ? ConstString(m_opaque_sp->GetPrompt()).GetCString()
1341514d8cd8SZachary Turner                       : nullptr);
1342a7015092SGreg Clayton }
1343a7015092SGreg Clayton 
1344b9c1b51eSKate Stone void SBDebugger::SetPrompt(const char *prompt) {
1345baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetPrompt, (const char *), prompt);
1346baf5664fSJonas Devlieghere 
1347a7015092SGreg Clayton   if (m_opaque_sp)
1348514d8cd8SZachary Turner     m_opaque_sp->SetPrompt(llvm::StringRef::withNullAsEmpty(prompt));
1349a7015092SGreg Clayton }
1350a7015092SGreg Clayton 
13519e046f02SJonas Devlieghere const char *SBDebugger::GetReproducerPath() const {
1352baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetReproducerPath);
1353baf5664fSJonas Devlieghere 
13549e046f02SJonas Devlieghere   return (m_opaque_sp
13559e046f02SJonas Devlieghere               ? ConstString(m_opaque_sp->GetReproducerPath()).GetCString()
13569e046f02SJonas Devlieghere               : nullptr);
13579e046f02SJonas Devlieghere }
13589e046f02SJonas Devlieghere 
1359b9c1b51eSKate Stone ScriptLanguage SBDebugger::GetScriptLanguage() const {
1360baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::ScriptLanguage, SBDebugger,
1361baf5664fSJonas Devlieghere                                    GetScriptLanguage);
1362baf5664fSJonas Devlieghere 
1363dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetScriptLanguage() : eScriptLanguageNone);
1364a7015092SGreg Clayton }
1365a7015092SGreg Clayton 
1366b9c1b51eSKate Stone void SBDebugger::SetScriptLanguage(ScriptLanguage script_lang) {
1367baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetScriptLanguage,
1368baf5664fSJonas Devlieghere                      (lldb::ScriptLanguage), script_lang);
1369baf5664fSJonas Devlieghere 
1370b9c1b51eSKate Stone   if (m_opaque_sp) {
1371a7015092SGreg Clayton     m_opaque_sp->SetScriptLanguage(script_lang);
1372a7015092SGreg Clayton   }
1373af67cecdSGreg Clayton }
1374a7015092SGreg Clayton 
1375b9c1b51eSKate Stone bool SBDebugger::SetUseExternalEditor(bool value) {
1376baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool), value);
1377baf5664fSJonas Devlieghere 
1378dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->SetUseExternalEditor(value) : false);
1379e40e4218SJim Ingham }
1380e40e4218SJim Ingham 
1381b9c1b51eSKate Stone bool SBDebugger::GetUseExternalEditor() {
1382baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetUseExternalEditor);
1383baf5664fSJonas Devlieghere 
1384dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetUseExternalEditor() : false);
1385e40e4218SJim Ingham }
1386e40e4218SJim Ingham 
1387b9c1b51eSKate Stone bool SBDebugger::SetUseColor(bool value) {
1388baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseColor, (bool), value);
1389baf5664fSJonas Devlieghere 
1390dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->SetUseColor(value) : false);
1391c3ce7f27SMichael Sartain }
1392c3ce7f27SMichael Sartain 
1393b9c1b51eSKate Stone bool SBDebugger::GetUseColor() const {
1394baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetUseColor);
1395baf5664fSJonas Devlieghere 
1396dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetUseColor() : false);
1397c3ce7f27SMichael Sartain }
1398c3ce7f27SMichael Sartain 
1399acae69d0SEmre Kultursay bool SBDebugger::SetUseSourceCache(bool value) {
1400acae69d0SEmre Kultursay   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseSourceCache, (bool), value);
1401acae69d0SEmre Kultursay 
1402acae69d0SEmre Kultursay   return (m_opaque_sp ? m_opaque_sp->SetUseSourceCache(value) : false);
1403acae69d0SEmre Kultursay }
1404acae69d0SEmre Kultursay 
1405acae69d0SEmre Kultursay bool SBDebugger::GetUseSourceCache() const {
1406acae69d0SEmre Kultursay   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetUseSourceCache);
1407acae69d0SEmre Kultursay 
1408acae69d0SEmre Kultursay   return (m_opaque_sp ? m_opaque_sp->GetUseSourceCache() : false);
1409acae69d0SEmre Kultursay }
1410acae69d0SEmre Kultursay 
1411b9c1b51eSKate Stone bool SBDebugger::GetDescription(SBStream &description) {
1412baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &),
1413baf5664fSJonas Devlieghere                      description);
1414baf5664fSJonas Devlieghere 
1415da7bc7d0SGreg Clayton   Stream &strm = description.ref();
1416da7bc7d0SGreg Clayton 
1417b9c1b51eSKate Stone   if (m_opaque_sp) {
1418dde9cff3SCaroline Tice     const char *name = m_opaque_sp->GetInstanceName().AsCString();
1419431ce678SGreg Clayton     user_id_t id = m_opaque_sp->GetID();
1420d01b2953SDaniel Malea     strm.Printf("Debugger (instance: \"%s\", id: %" PRIu64 ")", name, id);
1421b9c1b51eSKate Stone   } else
1422da7bc7d0SGreg Clayton     strm.PutCString("No value");
1423dde9cff3SCaroline Tice 
1424dde9cff3SCaroline Tice   return true;
1425dde9cff3SCaroline Tice }
1426efed6131SCaroline Tice 
1427b9c1b51eSKate Stone user_id_t SBDebugger::GetID() {
1428baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::user_id_t, SBDebugger, GetID);
1429baf5664fSJonas Devlieghere 
1430dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetID() : LLDB_INVALID_UID);
1431efed6131SCaroline Tice }
14322289fa48SGreg Clayton 
1433b9c1b51eSKate Stone SBError SBDebugger::SetCurrentPlatform(const char *platform_name_cstr) {
1434baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform,
1435baf5664fSJonas Devlieghere                      (const char *), platform_name_cstr);
1436baf5664fSJonas Devlieghere 
14372289fa48SGreg Clayton   SBError sb_error;
1438b9c1b51eSKate Stone   if (m_opaque_sp) {
1439b9c1b51eSKate Stone     if (platform_name_cstr && platform_name_cstr[0]) {
1440615eb7e6SGreg Clayton       ConstString platform_name(platform_name_cstr);
1441615eb7e6SGreg Clayton       PlatformSP platform_sp(Platform::Find(platform_name));
14422289fa48SGreg Clayton 
1443b9c1b51eSKate Stone       if (platform_sp) {
1444615eb7e6SGreg Clayton         // Already have a platform with this name, just select it
1445615eb7e6SGreg Clayton         m_opaque_sp->GetPlatformList().SetSelectedPlatform(platform_sp);
1446b9c1b51eSKate Stone       } else {
1447615eb7e6SGreg Clayton         // We don't have a platform by this name yet, create one
1448615eb7e6SGreg Clayton         platform_sp = Platform::Create(platform_name, sb_error.ref());
1449b9c1b51eSKate Stone         if (platform_sp) {
1450615eb7e6SGreg Clayton           // We created the platform, now append and select it
14512289fa48SGreg Clayton           bool make_selected = true;
14522289fa48SGreg Clayton           m_opaque_sp->GetPlatformList().Append(platform_sp, make_selected);
14532289fa48SGreg Clayton         }
14542289fa48SGreg Clayton       }
1455b9c1b51eSKate Stone     } else {
1456615eb7e6SGreg Clayton       sb_error.ref().SetErrorString("invalid platform name");
1457615eb7e6SGreg Clayton     }
1458b9c1b51eSKate Stone   } else {
1459615eb7e6SGreg Clayton     sb_error.ref().SetErrorString("invalid debugger");
1460615eb7e6SGreg Clayton   }
1461baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
14622289fa48SGreg Clayton }
14632289fa48SGreg Clayton 
1464b9c1b51eSKate Stone bool SBDebugger::SetCurrentPlatformSDKRoot(const char *sysroot) {
1465baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot,
1466baf5664fSJonas Devlieghere                      (const char *), sysroot);
1467baf5664fSJonas Devlieghere 
1468e1cf274bSJason Molenda   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1469b9c1b51eSKate Stone   if (m_opaque_sp) {
1470b9c1b51eSKate Stone     PlatformSP platform_sp(
1471b9c1b51eSKate Stone         m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1472f3dd93c8SGreg Clayton 
1473b9c1b51eSKate Stone     if (platform_sp) {
1474e1cf274bSJason Molenda       if (log && sysroot)
147563e5fb76SJonas Devlieghere         LLDB_LOGF(log, "SBDebugger::SetCurrentPlatformSDKRoot (\"%s\")",
147663e5fb76SJonas Devlieghere                   sysroot);
1477f3dd93c8SGreg Clayton       platform_sp->SetSDKRootDirectory(ConstString(sysroot));
1478f3dd93c8SGreg Clayton       return true;
1479f3dd93c8SGreg Clayton     }
1480f3dd93c8SGreg Clayton   }
1481f3dd93c8SGreg Clayton   return false;
1482f3dd93c8SGreg Clayton }
1483f3dd93c8SGreg Clayton 
1484b9c1b51eSKate Stone bool SBDebugger::GetCloseInputOnEOF() const {
1485baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetCloseInputOnEOF);
1486baf5664fSJonas Devlieghere 
1487dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetCloseInputOnEOF() : false);
1488fc3f027dSGreg Clayton }
1489fc3f027dSGreg Clayton 
1490b9c1b51eSKate Stone void SBDebugger::SetCloseInputOnEOF(bool b) {
1491baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool), b);
1492baf5664fSJonas Devlieghere 
1493fc3f027dSGreg Clayton   if (m_opaque_sp)
1494fc3f027dSGreg Clayton     m_opaque_sp->SetCloseInputOnEOF(b);
1495fc3f027dSGreg Clayton }
1496061858ceSEnrico Granata 
1497b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(const char *category_name) {
1498baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1499baf5664fSJonas Devlieghere                      (const char *), category_name);
1500baf5664fSJonas Devlieghere 
1501061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1502baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1503061858ceSEnrico Granata 
1504061858ceSEnrico Granata   TypeCategoryImplSP category_sp;
1505061858ceSEnrico Granata 
1506b9c1b51eSKate Stone   if (DataVisualization::Categories::GetCategory(ConstString(category_name),
1507baf5664fSJonas Devlieghere                                                  category_sp, false)) {
1508baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1509baf5664fSJonas Devlieghere   } else {
1510baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1511baf5664fSJonas Devlieghere   }
1512061858ceSEnrico Granata }
1513061858ceSEnrico Granata 
1514b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(lldb::LanguageType lang_type) {
1515baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1516baf5664fSJonas Devlieghere                      (lldb::LanguageType), lang_type);
1517baf5664fSJonas Devlieghere 
1518e242624cSEnrico Granata   TypeCategoryImplSP category_sp;
1519baf5664fSJonas Devlieghere   if (DataVisualization::Categories::GetCategory(lang_type, category_sp)) {
1520baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1521baf5664fSJonas Devlieghere   } else {
1522baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1523baf5664fSJonas Devlieghere   }
1524e242624cSEnrico Granata }
1525e242624cSEnrico Granata 
1526b9c1b51eSKate Stone SBTypeCategory SBDebugger::CreateCategory(const char *category_name) {
1527baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory,
1528baf5664fSJonas Devlieghere                      (const char *), category_name);
1529baf5664fSJonas Devlieghere 
1530061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1531baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1532061858ceSEnrico Granata 
1533061858ceSEnrico Granata   TypeCategoryImplSP category_sp;
1534061858ceSEnrico Granata 
1535b9c1b51eSKate Stone   if (DataVisualization::Categories::GetCategory(ConstString(category_name),
1536baf5664fSJonas Devlieghere                                                  category_sp, true)) {
1537baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1538baf5664fSJonas Devlieghere   } else {
1539baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1540baf5664fSJonas Devlieghere   }
1541061858ceSEnrico Granata }
1542061858ceSEnrico Granata 
1543b9c1b51eSKate Stone bool SBDebugger::DeleteCategory(const char *category_name) {
1544baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, DeleteCategory, (const char *),
1545baf5664fSJonas Devlieghere                      category_name);
1546baf5664fSJonas Devlieghere 
1547061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1548061858ceSEnrico Granata     return false;
1549061858ceSEnrico Granata 
1550061858ceSEnrico Granata   return DataVisualization::Categories::Delete(ConstString(category_name));
1551061858ceSEnrico Granata }
1552061858ceSEnrico Granata 
1553b9c1b51eSKate Stone uint32_t SBDebugger::GetNumCategories() {
1554baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumCategories);
1555baf5664fSJonas Devlieghere 
1556061858ceSEnrico Granata   return DataVisualization::Categories::GetCount();
1557061858ceSEnrico Granata }
1558061858ceSEnrico Granata 
1559b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategoryAtIndex(uint32_t index) {
1560baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex,
1561baf5664fSJonas Devlieghere                      (uint32_t), index);
1562baf5664fSJonas Devlieghere 
1563baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1564baf5664fSJonas Devlieghere       SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index)));
1565061858ceSEnrico Granata }
1566061858ceSEnrico Granata 
1567b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetDefaultCategory() {
1568baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTypeCategory, SBDebugger,
1569baf5664fSJonas Devlieghere                              GetDefaultCategory);
1570baf5664fSJonas Devlieghere 
1571baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(GetCategory("default"));
1572061858ceSEnrico Granata }
1573061858ceSEnrico Granata 
1574b9c1b51eSKate Stone SBTypeFormat SBDebugger::GetFormatForType(SBTypeNameSpecifier type_name) {
1575baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType,
1576baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1577baf5664fSJonas Devlieghere 
1578061858ceSEnrico Granata   SBTypeCategory default_category_sb = GetDefaultCategory();
1579061858ceSEnrico Granata   if (default_category_sb.GetEnabled())
1580baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(default_category_sb.GetFormatForType(type_name));
1581baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBTypeFormat());
1582061858ceSEnrico Granata }
1583061858ceSEnrico Granata 
1584b9c1b51eSKate Stone SBTypeSummary SBDebugger::GetSummaryForType(SBTypeNameSpecifier type_name) {
1585baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType,
1586baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1587baf5664fSJonas Devlieghere 
1588dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1589baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeSummary());
1590baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1591baf5664fSJonas Devlieghere       SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP())));
1592061858ceSEnrico Granata }
1593061858ceSEnrico Granata 
1594b9c1b51eSKate Stone SBTypeFilter SBDebugger::GetFilterForType(SBTypeNameSpecifier type_name) {
1595baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType,
1596baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1597baf5664fSJonas Devlieghere 
1598dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1599baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeFilter());
1600baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1601baf5664fSJonas Devlieghere       SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP())));
1602061858ceSEnrico Granata }
1603061858ceSEnrico Granata 
1604b9c1b51eSKate Stone SBTypeSynthetic SBDebugger::GetSyntheticForType(SBTypeNameSpecifier type_name) {
1605baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType,
1606baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1607baf5664fSJonas Devlieghere 
1608dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1609baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeSynthetic());
1610baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBTypeSynthetic(
1611baf5664fSJonas Devlieghere       DataVisualization::GetSyntheticForType(type_name.GetSP())));
1612061858ceSEnrico Granata }
1613061858ceSEnrico Granata 
16145e336903SPavel Labath static llvm::ArrayRef<const char *> GetCategoryArray(const char **categories) {
16155e336903SPavel Labath   if (categories == nullptr)
16165e336903SPavel Labath     return {};
16175e336903SPavel Labath   size_t len = 0;
16185e336903SPavel Labath   while (categories[len] != nullptr)
16195e336903SPavel Labath     ++len;
16205e336903SPavel Labath   return llvm::makeArrayRef(categories, len);
16215e336903SPavel Labath }
16225e336903SPavel Labath 
1623b9c1b51eSKate Stone bool SBDebugger::EnableLog(const char *channel, const char **categories) {
1624baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, EnableLog, (const char *, const char **),
1625baf5664fSJonas Devlieghere                      channel, categories);
1626baf5664fSJonas Devlieghere 
1627b9c1b51eSKate Stone   if (m_opaque_sp) {
1628b9c1b51eSKate Stone     uint32_t log_options =
1629b9c1b51eSKate Stone         LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
1630775588c0SPavel Labath     std::string error;
1631775588c0SPavel Labath     llvm::raw_string_ostream error_stream(error);
16325e336903SPavel Labath     return m_opaque_sp->EnableLog(channel, GetCategoryArray(categories), "",
1633775588c0SPavel Labath                                   log_options, error_stream);
1634b9c1b51eSKate Stone   } else
1635228063cdSJim Ingham     return false;
1636228063cdSJim Ingham }
16374f02b22dSJim Ingham 
1638b9c1b51eSKate Stone void SBDebugger::SetLoggingCallback(lldb::LogOutputCallback log_callback,
1639b9c1b51eSKate Stone                                     void *baton) {
16407bc83564SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, SetLoggingCallback,
16417bc83564SJonas Devlieghere                     (lldb::LogOutputCallback, void *), log_callback, baton);
16420d7b0c96SJonas Devlieghere 
1643b9c1b51eSKate Stone   if (m_opaque_sp) {
16444f02b22dSJim Ingham     return m_opaque_sp->SetLoggingCallback(log_callback, baton);
16454f02b22dSJim Ingham   }
16464f02b22dSJim Ingham }
1647ae211eceSMichal Gorny 
1648ae211eceSMichal Gorny namespace lldb_private {
1649ae211eceSMichal Gorny namespace repro {
1650ae211eceSMichal Gorny 
1651d9aec34bSJonas Devlieghere template <> void RegisterMethods<SBInputReader>(Registry &R) {
1652ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBInputReader, SetIsDone, (bool));
1653ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBInputReader, IsActive, ());
1654ae211eceSMichal Gorny }
1655ae211eceSMichal Gorny 
1656ae211eceSMichal Gorny static void SetFileHandleRedirect(SBDebugger *, FILE *, bool) {
1657ae211eceSMichal Gorny   // Do nothing.
1658ae211eceSMichal Gorny }
1659ae211eceSMichal Gorny 
166096898eb6SLawrence D'Anna static SBError SetFileRedirect(SBDebugger *, SBFile file) { return SBError(); }
166196898eb6SLawrence D'Anna 
1662c040b30fSLawrence D'Anna static SBError SetFileRedirect(SBDebugger *, FileSP file) { return SBError(); }
1663c040b30fSLawrence D'Anna 
1664d9aec34bSJonas Devlieghere template <> void RegisterMethods<SBDebugger>(Registry &R) {
1665ae211eceSMichal Gorny   // Custom implementation.
1666950a8aa1SJonas Devlieghere   R.Register(&invoke<void (SBDebugger::*)(FILE *, bool)>::method<
1667950a8aa1SJonas Devlieghere                  &SBDebugger::SetErrorFileHandle>::record,
1668ae211eceSMichal Gorny              &SetFileHandleRedirect);
1669950a8aa1SJonas Devlieghere   R.Register(&invoke<void (SBDebugger::*)(FILE *, bool)>::method<
1670950a8aa1SJonas Devlieghere                  &SBDebugger::SetOutputFileHandle>::record,
1671ae211eceSMichal Gorny              &SetFileHandleRedirect);
1672ae211eceSMichal Gorny 
167396898eb6SLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1674950a8aa1SJonas Devlieghere                  SBFile)>::method<&SBDebugger::SetInputFile>::record,
167596898eb6SLawrence D'Anna              &SetFileRedirect);
167696898eb6SLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1677950a8aa1SJonas Devlieghere                  SBFile)>::method<&SBDebugger::SetOutputFile>::record,
167896898eb6SLawrence D'Anna              &SetFileRedirect);
167996898eb6SLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1680950a8aa1SJonas Devlieghere                  SBFile)>::method<&SBDebugger::SetErrorFile>::record,
168196898eb6SLawrence D'Anna              &SetFileRedirect);
168296898eb6SLawrence D'Anna 
1683c040b30fSLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1684950a8aa1SJonas Devlieghere                  FileSP)>::method<&SBDebugger::SetInputFile>::record,
1685c040b30fSLawrence D'Anna              &SetFileRedirect);
1686c040b30fSLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1687950a8aa1SJonas Devlieghere                  FileSP)>::method<&SBDebugger::SetOutputFile>::record,
1688c040b30fSLawrence D'Anna              &SetFileRedirect);
1689c040b30fSLawrence D'Anna   R.Register(&invoke<SBError (SBDebugger::*)(
1690950a8aa1SJonas Devlieghere                  FileSP)>::method<&SBDebugger::SetErrorFile>::record,
1691c040b30fSLawrence D'Anna              &SetFileRedirect);
1692c040b30fSLawrence D'Anna 
1693e687aa82SJonas Devlieghere   LLDB_REGISTER_CHAR_PTR_METHOD_STATIC(bool, SBDebugger,
16942f025bb8SJonas Devlieghere                                        GetDefaultArchitecture);
16952f025bb8SJonas Devlieghere 
1696ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, ());
1697ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &));
1698ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &));
1699ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBDebugger &,
1700ae211eceSMichal Gorny                        SBDebugger, operator=,(const lldb::SBDebugger &));
1701ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Initialize, ());
1702ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger,
1703ae211eceSMichal Gorny                               InitializeWithErrorHandling, ());
1704ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Terminate, ());
1705ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, Clear, ());
1706ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, ());
1707ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool));
1708d9aec34bSJonas Devlieghere   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Destroy, (lldb::SBDebugger &));
1709ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, MemoryPressureDetected, ());
1710ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, IsValid, ());
1711ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, operator bool,());
1712ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetAsync, (bool));
1713ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetAsync, ());
1714ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool));
1715ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SkipAppInitFiles, (bool));
1716ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool));
1717ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetInputFileHandle, ());
1718ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetOutputFileHandle, ());
1719ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetErrorFileHandle, ());
172096898eb6SLawrence D'Anna   LLDB_REGISTER_METHOD(SBFile, SBDebugger, GetInputFile, ());
172196898eb6SLawrence D'Anna   LLDB_REGISTER_METHOD(SBFile, SBDebugger, GetOutputFile, ());
172296898eb6SLawrence D'Anna   LLDB_REGISTER_METHOD(SBFile, SBDebugger, GetErrorFile, ());
1723ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SaveInputTerminalState, ());
1724ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RestoreInputTerminalState, ());
1725ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBCommandInterpreter, SBDebugger,
1726ae211eceSMichal Gorny                        GetCommandInterpreter, ());
1727ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, HandleCommand, (const char *));
1728ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBListener, SBDebugger, GetListener, ());
1729ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
1730ae211eceSMichal Gorny       void, SBDebugger, HandleProcessEvent,
1731ae211eceSMichal Gorny       (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *));
1732322f12afSLawrence D'Anna   LLDB_REGISTER_METHOD(
1733322f12afSLawrence D'Anna       void, SBDebugger, HandleProcessEvent,
1734322f12afSLawrence D'Anna       (const lldb::SBProcess &, const lldb::SBEvent &, SBFile, SBFile));
1735322f12afSLawrence D'Anna   LLDB_REGISTER_METHOD(
1736322f12afSLawrence D'Anna       void, SBDebugger, HandleProcessEvent,
1737322f12afSLawrence D'Anna       (const lldb::SBProcess &, const lldb::SBEvent &, FileSP, FileSP));
1738d9aec34bSJonas Devlieghere   LLDB_REGISTER_METHOD(lldb::SBSourceManager, SBDebugger, GetSourceManager, ());
1739ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture,
1740ae211eceSMichal Gorny                               (const char *));
1741ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage,
1742ae211eceSMichal Gorny                        (const char *));
1743ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, GetVersionString, ());
1744ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, StateAsCString,
1745ae211eceSMichal Gorny                               (lldb::StateType));
1746ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBStructuredData, SBDebugger,
1747ae211eceSMichal Gorny                               GetBuildConfiguration, ());
1748ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsRunningState,
1749ae211eceSMichal Gorny                               (lldb::StateType));
1750ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState,
1751ae211eceSMichal Gorny                               (lldb::StateType));
1752ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
1753ae211eceSMichal Gorny       lldb::SBTarget, SBDebugger, CreateTarget,
1754ae211eceSMichal Gorny       (const char *, const char *, const char *, bool, lldb::SBError &));
1755ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger,
1756ae211eceSMichal Gorny                        CreateTargetWithFileAndTargetTriple,
1757ae211eceSMichal Gorny                        (const char *, const char *));
1758d9aec34bSJonas Devlieghere   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, CreateTargetWithFileAndArch,
1759ae211eceSMichal Gorny                        (const char *, const char *));
1760ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, CreateTarget,
1761ae211eceSMichal Gorny                        (const char *));
1762ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetDummyTarget, ());
1763ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &));
1764ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex,
1765ae211eceSMichal Gorny                        (uint32_t));
1766ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetIndexOfTarget,
1767ae211eceSMichal Gorny                        (lldb::SBTarget));
1768ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID,
1769ae211eceSMichal Gorny                        (lldb::pid_t));
1770ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch,
1771ae211eceSMichal Gorny                        (const char *, const char *));
1772ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumTargets, ());
1773ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetSelectedTarget, ());
1774d9aec34bSJonas Devlieghere   LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedTarget, (lldb::SBTarget &));
1775ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetSelectedPlatform, ());
1776ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedPlatform,
1777ae211eceSMichal Gorny                        (lldb::SBPlatform &));
1778ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumPlatforms, ());
1779ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex,
1780ae211eceSMichal Gorny                        (uint32_t));
1781ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumAvailablePlatforms, ());
1782ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBStructuredData, SBDebugger,
1783ae211eceSMichal Gorny                        GetAvailablePlatformInfoAtIndex, (uint32_t));
1784ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputInterrupt, ());
1785ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputEndOfFile, ());
1786ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, PushInputReader,
1787ae211eceSMichal Gorny                        (lldb::SBInputReader &));
1788ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool));
1789ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter,
1790ae211eceSMichal Gorny                        (bool, bool, lldb::SBCommandInterpreterRunOptions &,
1791ae211eceSMichal Gorny                         int &, bool &, bool &));
1792ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, RunREPL,
1793ae211eceSMichal Gorny                        (lldb::LanguageType, const char *));
1794d9aec34bSJonas Devlieghere   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, FindDebuggerWithID,
1795d9aec34bSJonas Devlieghere                               (int));
1796ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBDebugger, GetInstanceName, ());
1797ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable,
1798ae211eceSMichal Gorny                               (const char *, const char *, const char *));
1799ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBStringList, SBDebugger,
1800ae211eceSMichal Gorny                               GetInternalVariableValue,
1801ae211eceSMichal Gorny                               (const char *, const char *));
1802ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBDebugger, GetTerminalWidth, ());
1803ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetTerminalWidth, (uint32_t));
1804ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetPrompt, ());
1805ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetPrompt, (const char *));
1806ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetReproducerPath, ());
1807ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::ScriptLanguage, SBDebugger,
1808ae211eceSMichal Gorny                              GetScriptLanguage, ());
1809ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetScriptLanguage,
1810ae211eceSMichal Gorny                        (lldb::ScriptLanguage));
1811ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool));
1812ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetUseExternalEditor, ());
1813ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseColor, (bool));
1814ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetUseColor, ());
1815ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &));
1816ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::user_id_t, SBDebugger, GetID, ());
1817ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform,
1818ae211eceSMichal Gorny                        (const char *));
1819ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot,
1820ae211eceSMichal Gorny                        (const char *));
1821ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetCloseInputOnEOF, ());
1822ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool));
1823ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1824ae211eceSMichal Gorny                        (const char *));
1825ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1826ae211eceSMichal Gorny                        (lldb::LanguageType));
1827ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory,
1828ae211eceSMichal Gorny                        (const char *));
1829ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteCategory, (const char *));
1830ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumCategories, ());
1831ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex,
1832ae211eceSMichal Gorny                        (uint32_t));
1833ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetDefaultCategory,
1834ae211eceSMichal Gorny                        ());
1835ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType,
1836ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1837ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType,
1838ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1839ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType,
1840ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1841ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType,
1842ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1843ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, EnableLog,
1844ae211eceSMichal Gorny                        (const char *, const char **));
18454c67b119SJonas Devlieghere   LLDB_REGISTER_METHOD(lldb::SBCommandInterpreterRunResult, SBDebugger,
18464c67b119SJonas Devlieghere                        RunCommandInterpreter,
18474c67b119SJonas Devlieghere                        (const lldb::SBCommandInterpreterRunOptions &));
1848ae211eceSMichal Gorny }
1849ae211eceSMichal Gorny 
1850d9aec34bSJonas Devlieghere } // namespace repro
1851d9aec34bSJonas Devlieghere } // namespace lldb_private
1852