130fdc8d8SChris Lattner //===-- SBDebugger.cpp ------------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
9baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
10d17cd902SAlex Langford #include "SystemInitializerFull.h"
11d17cd902SAlex Langford 
12ca93cc1dSEli Friedman #include "lldb/API/SBDebugger.h"
1330fdc8d8SChris Lattner 
14e0d378b3SGreg Clayton #include "lldb/lldb-private.h"
1530fdc8d8SChris Lattner 
16ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h"
17ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h"
18ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h"
192289fa48SGreg Clayton #include "lldb/API/SBError.h"
20ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h"
21ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h"
22b9c1b51eSKate Stone #include "lldb/API/SBListener.h"
233df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h"
243df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h"
25dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
263df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h"
27c10e34d0SVadim Macagon #include "lldb/API/SBStructuredData.h"
283df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h"
293df9a8dfSCaroline Tice #include "lldb/API/SBThread.h"
30061858ceSEnrico Granata #include "lldb/API/SBTypeCategory.h"
31061858ceSEnrico Granata #include "lldb/API/SBTypeFilter.h"
32b9c1b51eSKate Stone #include "lldb/API/SBTypeFormat.h"
33061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h"
34061858ceSEnrico Granata #include "lldb/API/SBTypeSummary.h"
35061858ceSEnrico Granata #include "lldb/API/SBTypeSynthetic.h"
36061858ceSEnrico Granata 
376eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h"
38c10e34d0SVadim Macagon #include "lldb/Core/PluginManager.h"
3944d93782SGreg Clayton #include "lldb/Core/StreamFile.h"
40c10e34d0SVadim Macagon #include "lldb/Core/StructuredDataImpl.h"
415548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h"
42f1389e92SPavel Labath #include "lldb/Host/XML.h"
43e6e2bb38SZachary Turner #include "lldb/Initialization/SystemLifetimeManager.h"
446eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h"
4547cbf4a0SPavel Labath #include "lldb/Interpreter/OptionArgParser.h"
46cac9c5f9SGreg Clayton #include "lldb/Interpreter/OptionGroupPlatform.h"
476eee5aa0SGreg Clayton #include "lldb/Target/Process.h"
486eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h"
49145d95c9SPavel Labath #include "lldb/Utility/Args.h"
50d821c997SPavel Labath #include "lldb/Utility/State.h"
5130fdc8d8SChris Lattner 
52d717cc9fSEnrico Granata #include "llvm/ADT/STLExtras.h"
537b2e5a36SZachary Turner #include "llvm/ADT/StringRef.h"
5458a559c0SZachary Turner #include "llvm/Support/DynamicLibrary.h"
55b9c1b51eSKate Stone #include "llvm/Support/ManagedStatic.h"
5658a559c0SZachary Turner 
5730fdc8d8SChris Lattner using namespace lldb;
5830fdc8d8SChris Lattner using namespace lldb_private;
5930fdc8d8SChris Lattner 
60d77c2e09SJonas Devlieghere /// Helper class for replaying commands through the reproducer.
61d77c2e09SJonas Devlieghere class CommandLoader {
62d77c2e09SJonas Devlieghere public:
63d77c2e09SJonas Devlieghere   CommandLoader(std::vector<std::string> files) : m_files(files) {}
64d77c2e09SJonas Devlieghere 
65d77c2e09SJonas Devlieghere   static std::unique_ptr<CommandLoader> Create() {
66d77c2e09SJonas Devlieghere     repro::Loader *loader = repro::Reproducer::Instance().GetLoader();
67d77c2e09SJonas Devlieghere     if (!loader)
68d77c2e09SJonas Devlieghere       return {};
69d77c2e09SJonas Devlieghere 
70d77c2e09SJonas Devlieghere     FileSpec file = loader->GetFile<repro::CommandInfo>();
71d77c2e09SJonas Devlieghere     if (!file)
72d77c2e09SJonas Devlieghere       return {};
73d77c2e09SJonas Devlieghere 
74d77c2e09SJonas Devlieghere     auto error_or_file = llvm::MemoryBuffer::getFile(file.GetPath());
75d77c2e09SJonas Devlieghere     if (auto err = error_or_file.getError())
76d77c2e09SJonas Devlieghere       return {};
77d77c2e09SJonas Devlieghere 
78d77c2e09SJonas Devlieghere     std::vector<std::string> files;
79d77c2e09SJonas Devlieghere     llvm::yaml::Input yin((*error_or_file)->getBuffer());
80d77c2e09SJonas Devlieghere     yin >> files;
81d77c2e09SJonas Devlieghere 
82d77c2e09SJonas Devlieghere     if (auto err = yin.error())
83d77c2e09SJonas Devlieghere       return {};
84d77c2e09SJonas Devlieghere 
85d77c2e09SJonas Devlieghere     return llvm::make_unique<CommandLoader>(std::move(files));
86d77c2e09SJonas Devlieghere   }
87d77c2e09SJonas Devlieghere 
88d77c2e09SJonas Devlieghere   FILE *GetNextFile() {
89d77c2e09SJonas Devlieghere     if (m_index >= m_files.size())
90d77c2e09SJonas Devlieghere       return nullptr;
91d77c2e09SJonas Devlieghere     return FileSystem::Instance().Fopen(m_files[m_index++].c_str(), "r");
92d77c2e09SJonas Devlieghere   }
93d77c2e09SJonas Devlieghere 
94d77c2e09SJonas Devlieghere private:
95d77c2e09SJonas Devlieghere   std::vector<std::string> m_files;
96d77c2e09SJonas Devlieghere   unsigned m_index = 0;
97d77c2e09SJonas Devlieghere };
98d77c2e09SJonas Devlieghere 
99b9c1b51eSKate Stone static llvm::sys::DynamicLibrary LoadPlugin(const lldb::DebuggerSP &debugger_sp,
100b9c1b51eSKate Stone                                             const FileSpec &spec,
10197206d57SZachary Turner                                             Status &error) {
102b9c1b51eSKate Stone   llvm::sys::DynamicLibrary dynlib =
103b9c1b51eSKate Stone       llvm::sys::DynamicLibrary::getPermanentLibrary(spec.GetPath().c_str());
104b9c1b51eSKate Stone   if (dynlib.isValid()) {
1055fb8f797SGreg Clayton     typedef bool (*LLDBCommandPluginInit)(lldb::SBDebugger & debugger);
1065fb8f797SGreg Clayton 
1075fb8f797SGreg Clayton     lldb::SBDebugger debugger_sb(debugger_sp);
108b9c1b51eSKate Stone     // This calls the bool lldb::PluginInitialize(lldb::SBDebugger debugger)
109b9c1b51eSKate Stone     // function.
110b9c1b51eSKate Stone     // TODO: mangle this differently for your system - on OSX, the first
111b9c1b51eSKate Stone     // underscore needs to be removed and the second one stays
112b9c1b51eSKate Stone     LLDBCommandPluginInit init_func =
11322701b2fSStephane Sezer         (LLDBCommandPluginInit)(uintptr_t)dynlib.getAddressOfSymbol(
114b9c1b51eSKate Stone             "_ZN4lldb16PluginInitializeENS_10SBDebuggerE");
115b9c1b51eSKate Stone     if (init_func) {
1165fb8f797SGreg Clayton       if (init_func(debugger_sb))
11758a559c0SZachary Turner         return dynlib;
1185fb8f797SGreg Clayton       else
119b9c1b51eSKate Stone         error.SetErrorString("plug-in refused to load "
120b9c1b51eSKate Stone                              "(lldb::PluginInitialize(lldb::SBDebugger) "
121b9c1b51eSKate Stone                              "returned false)");
122b9c1b51eSKate Stone     } else {
123b9c1b51eSKate Stone       error.SetErrorString("plug-in is missing the required initialization: "
124b9c1b51eSKate Stone                            "lldb::PluginInitialize(lldb::SBDebugger)");
1255fb8f797SGreg Clayton     }
126b9c1b51eSKate Stone   } else {
127dbd7fabaSJonas Devlieghere     if (FileSystem::Instance().Exists(spec))
1285fb8f797SGreg Clayton       error.SetErrorString("this file does not represent a loadable dylib");
1295fb8f797SGreg Clayton     else
1305fb8f797SGreg Clayton       error.SetErrorString("no such file");
1315fb8f797SGreg Clayton   }
13258a559c0SZachary Turner   return llvm::sys::DynamicLibrary();
1335fb8f797SGreg Clayton }
1345fb8f797SGreg Clayton 
135e6e2bb38SZachary Turner static llvm::ManagedStatic<SystemLifetimeManager> g_debugger_lifetime;
136e6e2bb38SZachary Turner 
137b9c1b51eSKate Stone SBError SBInputReader::Initialize(
138b9c1b51eSKate Stone     lldb::SBDebugger &sb_debugger,
1390d7b0c96SJonas Devlieghere     unsigned long (*callback)(void *, lldb::SBInputReader *,
1400d7b0c96SJonas Devlieghere                               lldb::InputReaderAction, char const *,
1410d7b0c96SJonas Devlieghere                               unsigned long),
1420d7b0c96SJonas Devlieghere     void *a, lldb::InputReaderGranularity b, char const *c, char const *d,
1430d7b0c96SJonas Devlieghere     bool e) {
1447bc83564SJonas Devlieghere   LLDB_RECORD_DUMMY(
1457bc83564SJonas Devlieghere       lldb::SBError, SBInputReader, Initialize,
1467bc83564SJonas Devlieghere       (lldb::SBDebugger &,
1477bc83564SJonas Devlieghere        unsigned long (*)(void *, lldb::SBInputReader *, lldb::InputReaderAction,
1487bc83564SJonas Devlieghere                          const char *, unsigned long),
1497bc83564SJonas Devlieghere        void *, lldb::InputReaderGranularity, const char *, const char *, bool),
1500d7b0c96SJonas Devlieghere       sb_debugger, callback, a, b, c, d, e);
1510d7b0c96SJonas Devlieghere 
152e6e2bb38SZachary Turner   return SBError();
153e6e2bb38SZachary Turner }
154e6e2bb38SZachary Turner 
155baf5664fSJonas Devlieghere void SBInputReader::SetIsDone(bool b) {
156baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBInputReader, SetIsDone, (bool), b);
157baf5664fSJonas Devlieghere }
158dbb0abbfSEugene Zelenko 
159baf5664fSJonas Devlieghere bool SBInputReader::IsActive() const {
160baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBInputReader, IsActive);
161e6e2bb38SZachary Turner 
162baf5664fSJonas Devlieghere   return false;
163baf5664fSJonas Devlieghere }
164baf5664fSJonas Devlieghere 
165baf5664fSJonas Devlieghere SBDebugger::SBDebugger() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBDebugger); }
166dbb0abbfSEugene Zelenko 
167b9c1b51eSKate Stone SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp)
168baf5664fSJonas Devlieghere     : m_opaque_sp(debugger_sp) {
169baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &), debugger_sp);
170baf5664fSJonas Devlieghere }
171dbb0abbfSEugene Zelenko 
172baf5664fSJonas Devlieghere SBDebugger::SBDebugger(const SBDebugger &rhs) : m_opaque_sp(rhs.m_opaque_sp) {
173baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &), rhs);
174baf5664fSJonas Devlieghere }
175dbb0abbfSEugene Zelenko 
176dbb0abbfSEugene Zelenko SBDebugger::~SBDebugger() = default;
177dbb0abbfSEugene Zelenko 
178b9c1b51eSKate Stone SBDebugger &SBDebugger::operator=(const SBDebugger &rhs) {
179baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBDebugger &,
180baf5664fSJonas Devlieghere                      SBDebugger, operator=,(const lldb::SBDebugger &), rhs);
181baf5664fSJonas Devlieghere 
182b9c1b51eSKate Stone   if (this != &rhs) {
183dbb0abbfSEugene Zelenko     m_opaque_sp = rhs.m_opaque_sp;
184dbb0abbfSEugene Zelenko   }
185*306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
186dbb0abbfSEugene Zelenko }
187dbb0abbfSEugene Zelenko 
188b9c1b51eSKate Stone void SBDebugger::Initialize() {
189baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Initialize);
190936c6242SJonas Devlieghere   SBError ignored = SBDebugger::InitializeWithErrorHandling();
19115eacd74SJonas Devlieghere }
19215eacd74SJonas Devlieghere 
193936c6242SJonas Devlieghere lldb::SBError SBDebugger::InitializeWithErrorHandling() {
194baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBError, SBDebugger,
195baf5664fSJonas Devlieghere                                     InitializeWithErrorHandling);
196baf5664fSJonas Devlieghere 
197ceb6b139SCaroline Tice 
198ceb6b139SCaroline Tice 
19915eacd74SJonas Devlieghere   SBError error;
20015eacd74SJonas Devlieghere   if (auto e = g_debugger_lifetime->Initialize(
201936c6242SJonas Devlieghere           llvm::make_unique<SystemInitializerFull>(), LoadPlugin)) {
20215eacd74SJonas Devlieghere     error.SetError(Status(std::move(e)));
20315eacd74SJonas Devlieghere   }
204baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(error);
20530fdc8d8SChris Lattner }
20630fdc8d8SChris Lattner 
207baf5664fSJonas Devlieghere void SBDebugger::Terminate() {
208baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Terminate);
209baf5664fSJonas Devlieghere 
210baf5664fSJonas Devlieghere   g_debugger_lifetime->Terminate();
211baf5664fSJonas Devlieghere }
21230fdc8d8SChris Lattner 
213b9c1b51eSKate Stone void SBDebugger::Clear() {
214baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, Clear);
215baf5664fSJonas Devlieghere 
2163d6086f6SCaroline Tice 
2173d6086f6SCaroline Tice   if (m_opaque_sp)
21844d93782SGreg Clayton     m_opaque_sp->ClearIOHandlers();
219ceb6b139SCaroline Tice 
22048e42549SGreg Clayton   m_opaque_sp.reset();
22148e42549SGreg Clayton }
22248e42549SGreg Clayton 
223b9c1b51eSKate Stone SBDebugger SBDebugger::Create() {
224baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBDebugger, SBDebugger, Create);
225baf5664fSJonas Devlieghere 
226baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBDebugger::Create(false, nullptr, nullptr));
22706942690SJim Ingham }
22806942690SJim Ingham 
229b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files) {
230baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool),
231baf5664fSJonas Devlieghere                             source_init_files);
232baf5664fSJonas Devlieghere 
233baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
234baf5664fSJonas Devlieghere       SBDebugger::Create(source_init_files, nullptr, nullptr));
235228063cdSJim Ingham }
236228063cdSJim Ingham 
237b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files,
238b9c1b51eSKate Stone                               lldb::LogOutputCallback callback, void *baton)
239228063cdSJim Ingham 
240228063cdSJim Ingham {
2410d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(lldb::SBDebugger, SBDebugger, Create,
2427bc83564SJonas Devlieghere                     (bool, lldb::LogOutputCallback, void *), source_init_files,
2437bc83564SJonas Devlieghere                     callback, baton);
244ceb6b139SCaroline Tice 
2456611103cSGreg Clayton   SBDebugger debugger;
246cb172b10SGreg Clayton 
247b9c1b51eSKate Stone   // Currently we have issues if this function is called simultaneously on two
24805097246SAdrian Prantl   // different threads. The issues mainly revolve around the fact that the
24905097246SAdrian Prantl   // lldb_private::FormatManager uses global collections and having two threads
25005097246SAdrian Prantl   // parsing the .lldbinit files can cause mayhem. So to get around this for
25105097246SAdrian Prantl   // now we need to use a mutex to prevent bad things from happening.
25216ff8604SSaleem Abdulrasool   static std::recursive_mutex g_mutex;
25316ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(g_mutex);
254cb172b10SGreg Clayton 
255228063cdSJim Ingham   debugger.reset(Debugger::CreateInstance(callback, baton));
256ceb6b139SCaroline Tice 
257ceb6b139SCaroline Tice 
25806942690SJim Ingham   SBCommandInterpreter interp = debugger.GetCommandInterpreter();
259b9c1b51eSKate Stone   if (source_init_files) {
26006942690SJim Ingham     interp.get()->SkipLLDBInitFiles(false);
26106942690SJim Ingham     interp.get()->SkipAppInitFiles(false);
26206942690SJim Ingham     SBCommandReturnObject result;
26306942690SJim Ingham     interp.SourceInitFileInHomeDirectory(result);
264b9c1b51eSKate Stone   } else {
26506942690SJim Ingham     interp.get()->SkipLLDBInitFiles(true);
26606942690SJim Ingham     interp.get()->SkipAppInitFiles(true);
26706942690SJim Ingham   }
2686611103cSGreg Clayton   return debugger;
2696611103cSGreg Clayton }
2706611103cSGreg Clayton 
271b9c1b51eSKate Stone void SBDebugger::Destroy(SBDebugger &debugger) {
272baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(void, SBDebugger, Destroy, (lldb::SBDebugger &),
273baf5664fSJonas Devlieghere                             debugger);
274baf5664fSJonas Devlieghere 
275e02657b1SCaroline Tice 
276e02657b1SCaroline Tice   Debugger::Destroy(debugger.m_opaque_sp);
277e02657b1SCaroline Tice 
278dbb0abbfSEugene Zelenko   if (debugger.m_opaque_sp.get() != nullptr)
279e02657b1SCaroline Tice     debugger.m_opaque_sp.reset();
280e02657b1SCaroline Tice }
281e02657b1SCaroline Tice 
282b9c1b51eSKate Stone void SBDebugger::MemoryPressureDetected() {
283baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, MemoryPressureDetected);
284baf5664fSJonas Devlieghere 
28505097246SAdrian Prantl   // Since this function can be call asynchronously, we allow it to be non-
28605097246SAdrian Prantl   // mandatory. We have seen deadlocks with this function when called so we
28705097246SAdrian Prantl   // need to safeguard against this until we can determine what is causing the
28805097246SAdrian Prantl   // deadlocks.
289aebdf1beSJim Ingham 
2900cd70866SGreg Clayton   const bool mandatory = false;
291aebdf1beSJim Ingham 
2920cd70866SGreg Clayton   ModuleList::RemoveOrphanSharedModules(mandatory);
293f9322415SGreg Clayton }
294f9322415SGreg Clayton 
295baf5664fSJonas Devlieghere bool SBDebugger::IsValid() const {
296baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, IsValid);
2977f5237bcSPavel Labath   return this->operator bool();
2987f5237bcSPavel Labath }
2997f5237bcSPavel Labath SBDebugger::operator bool() const {
3007f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, operator bool);
301baf5664fSJonas Devlieghere 
302baf5664fSJonas Devlieghere   return m_opaque_sp.get() != nullptr;
303baf5664fSJonas Devlieghere }
3046611103cSGreg Clayton 
305b9c1b51eSKate Stone void SBDebugger::SetAsync(bool b) {
306baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetAsync, (bool), b);
307baf5664fSJonas Devlieghere 
3086611103cSGreg Clayton   if (m_opaque_sp)
3096611103cSGreg Clayton     m_opaque_sp->SetAsyncExecution(b);
31030fdc8d8SChris Lattner }
31130fdc8d8SChris Lattner 
312b9c1b51eSKate Stone bool SBDebugger::GetAsync() {
313baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetAsync);
314baf5664fSJonas Devlieghere 
315dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetAsyncExecution() : false);
316e64f0dc7SJim Ingham }
317e64f0dc7SJim Ingham 
318b9c1b51eSKate Stone void SBDebugger::SkipLLDBInitFiles(bool b) {
319baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool), b);
320baf5664fSJonas Devlieghere 
3216eee5aa0SGreg Clayton   if (m_opaque_sp)
3226eee5aa0SGreg Clayton     m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles(b);
3236eee5aa0SGreg Clayton }
3246eee5aa0SGreg Clayton 
325b9c1b51eSKate Stone void SBDebugger::SkipAppInitFiles(bool b) {
326baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SkipAppInitFiles, (bool), b);
327baf5664fSJonas Devlieghere 
32816e0c686SJim Ingham   if (m_opaque_sp)
32916e0c686SJim Ingham     m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles(b);
33016e0c686SJim Ingham }
33116e0c686SJim Ingham 
33205097246SAdrian Prantl // Shouldn't really be settable after initialization as this could cause lots
33305097246SAdrian Prantl // of problems; don't want users trying to switch modes in the middle of a
33405097246SAdrian Prantl // debugging session.
335b9c1b51eSKate Stone void SBDebugger::SetInputFileHandle(FILE *fh, bool transfer_ownership) {
336baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool), fh,
337baf5664fSJonas Devlieghere                      transfer_ownership);
338baf5664fSJonas Devlieghere 
339d77c2e09SJonas Devlieghere   if (!m_opaque_sp)
340d77c2e09SJonas Devlieghere     return;
341d77c2e09SJonas Devlieghere 
342d77c2e09SJonas Devlieghere   repro::DataRecorder *recorder = nullptr;
343d77c2e09SJonas Devlieghere   if (repro::Generator *g = repro::Reproducer::Instance().GetGenerator())
344d77c2e09SJonas Devlieghere     recorder = g->GetOrCreate<repro::CommandProvider>().GetNewDataRecorder();
345d77c2e09SJonas Devlieghere 
346d77c2e09SJonas Devlieghere   static std::unique_ptr<CommandLoader> loader = CommandLoader::Create();
347d77c2e09SJonas Devlieghere   if (loader)
348d77c2e09SJonas Devlieghere     fh = loader->GetNextFile();
349d77c2e09SJonas Devlieghere 
350d77c2e09SJonas Devlieghere   m_opaque_sp->SetInputFileHandle(fh, transfer_ownership, recorder);
35130fdc8d8SChris Lattner }
35230fdc8d8SChris Lattner 
353b9c1b51eSKate Stone void SBDebugger::SetOutputFileHandle(FILE *fh, bool transfer_ownership) {
354baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetOutputFileHandle, (FILE *, bool), fh,
355baf5664fSJonas Devlieghere                      transfer_ownership);
356baf5664fSJonas Devlieghere 
3576611103cSGreg Clayton   if (m_opaque_sp)
3586611103cSGreg Clayton     m_opaque_sp->SetOutputFileHandle(fh, transfer_ownership);
35930fdc8d8SChris Lattner }
36030fdc8d8SChris Lattner 
361b9c1b51eSKate Stone void SBDebugger::SetErrorFileHandle(FILE *fh, bool transfer_ownership) {
362baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetErrorFileHandle, (FILE *, bool), fh,
363baf5664fSJonas Devlieghere                      transfer_ownership);
364baf5664fSJonas Devlieghere 
365ceb6b139SCaroline Tice 
3666611103cSGreg Clayton   if (m_opaque_sp)
3676611103cSGreg Clayton     m_opaque_sp->SetErrorFileHandle(fh, transfer_ownership);
36830fdc8d8SChris Lattner }
36930fdc8d8SChris Lattner 
370b9c1b51eSKate Stone FILE *SBDebugger::GetInputFileHandle() {
371baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetInputFileHandle);
372baf5664fSJonas Devlieghere 
373b9c1b51eSKate Stone   if (m_opaque_sp) {
37444d93782SGreg Clayton     StreamFileSP stream_file_sp(m_opaque_sp->GetInputFile());
37544d93782SGreg Clayton     if (stream_file_sp)
376*306809f2SJonas Devlieghere       return LLDB_RECORD_RESULT(stream_file_sp->GetFile().GetStream());
37744d93782SGreg Clayton   }
378dbb0abbfSEugene Zelenko   return nullptr;
37930fdc8d8SChris Lattner }
38030fdc8d8SChris Lattner 
381b9c1b51eSKate Stone FILE *SBDebugger::GetOutputFileHandle() {
382baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetOutputFileHandle);
383baf5664fSJonas Devlieghere 
384b9c1b51eSKate Stone   if (m_opaque_sp) {
38544d93782SGreg Clayton     StreamFileSP stream_file_sp(m_opaque_sp->GetOutputFile());
38644d93782SGreg Clayton     if (stream_file_sp)
387*306809f2SJonas Devlieghere       return LLDB_RECORD_RESULT(stream_file_sp->GetFile().GetStream());
38844d93782SGreg Clayton   }
389dbb0abbfSEugene Zelenko   return nullptr;
39030fdc8d8SChris Lattner }
39130fdc8d8SChris Lattner 
392b9c1b51eSKate Stone FILE *SBDebugger::GetErrorFileHandle() {
393baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetErrorFileHandle);
394baf5664fSJonas Devlieghere 
395b9c1b51eSKate Stone   if (m_opaque_sp) {
39644d93782SGreg Clayton     StreamFileSP stream_file_sp(m_opaque_sp->GetErrorFile());
39744d93782SGreg Clayton     if (stream_file_sp)
398*306809f2SJonas Devlieghere       return LLDB_RECORD_RESULT(stream_file_sp->GetFile().GetStream());
39944d93782SGreg Clayton   }
400dbb0abbfSEugene Zelenko   return nullptr;
40130fdc8d8SChris Lattner }
40230fdc8d8SChris Lattner 
403b9c1b51eSKate Stone void SBDebugger::SaveInputTerminalState() {
404baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, SaveInputTerminalState);
405baf5664fSJonas Devlieghere 
406c5917d9aSJim Ingham   if (m_opaque_sp)
407c5917d9aSJim Ingham     m_opaque_sp->SaveInputTerminalState();
408c5917d9aSJim Ingham }
409c5917d9aSJim Ingham 
410b9c1b51eSKate Stone void SBDebugger::RestoreInputTerminalState() {
411baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, RestoreInputTerminalState);
412baf5664fSJonas Devlieghere 
413c5917d9aSJim Ingham   if (m_opaque_sp)
414c5917d9aSJim Ingham     m_opaque_sp->RestoreInputTerminalState();
415c5917d9aSJim Ingham }
416b9c1b51eSKate Stone SBCommandInterpreter SBDebugger::GetCommandInterpreter() {
417baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBCommandInterpreter, SBDebugger,
418baf5664fSJonas Devlieghere                              GetCommandInterpreter);
419baf5664fSJonas Devlieghere 
420ceb6b139SCaroline Tice 
4216611103cSGreg Clayton   SBCommandInterpreter sb_interpreter;
4226611103cSGreg Clayton   if (m_opaque_sp)
4236611103cSGreg Clayton     sb_interpreter.reset(&m_opaque_sp->GetCommandInterpreter());
424ceb6b139SCaroline Tice 
425750cd175SCaroline Tice 
426baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_interpreter);
42730fdc8d8SChris Lattner }
42830fdc8d8SChris Lattner 
429b9c1b51eSKate Stone void SBDebugger::HandleCommand(const char *command) {
430baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, HandleCommand, (const char *), command);
431baf5664fSJonas Devlieghere 
432b9c1b51eSKate Stone   if (m_opaque_sp) {
433af67cecdSGreg Clayton     TargetSP target_sp(m_opaque_sp->GetSelectedTarget());
434bb19a13cSSaleem Abdulrasool     std::unique_lock<std::recursive_mutex> lock;
435af67cecdSGreg Clayton     if (target_sp)
436bb19a13cSSaleem Abdulrasool       lock = std::unique_lock<std::recursive_mutex>(target_sp->GetAPIMutex());
437af67cecdSGreg Clayton 
4386611103cSGreg Clayton     SBCommandInterpreter sb_interpreter(GetCommandInterpreter());
43930fdc8d8SChris Lattner     SBCommandReturnObject result;
44030fdc8d8SChris Lattner 
44130fdc8d8SChris Lattner     sb_interpreter.HandleCommand(command, result, false);
44230fdc8d8SChris Lattner 
443dbb0abbfSEugene Zelenko     if (GetErrorFileHandle() != nullptr)
44430fdc8d8SChris Lattner       result.PutError(GetErrorFileHandle());
445dbb0abbfSEugene Zelenko     if (GetOutputFileHandle() != nullptr)
44630fdc8d8SChris Lattner       result.PutOutput(GetOutputFileHandle());
44730fdc8d8SChris Lattner 
448b9c1b51eSKate Stone     if (!m_opaque_sp->GetAsyncExecution()) {
4496611103cSGreg Clayton       SBProcess process(GetCommandInterpreter().GetProcess());
450b9556accSGreg Clayton       ProcessSP process_sp(process.GetSP());
451b9c1b51eSKate Stone       if (process_sp) {
45230fdc8d8SChris Lattner         EventSP event_sp;
453583bbb1dSJim Ingham         ListenerSP lldb_listener_sp = m_opaque_sp->GetListener();
454d35031e1SPavel Labath         while (lldb_listener_sp->GetEventForBroadcaster(
455d35031e1SPavel Labath             process_sp.get(), event_sp, std::chrono::seconds(0))) {
45630fdc8d8SChris Lattner           SBEvent event(event_sp);
457b9c1b51eSKate Stone           HandleProcessEvent(process, event, GetOutputFileHandle(),
458b9c1b51eSKate Stone                              GetErrorFileHandle());
45930fdc8d8SChris Lattner         }
46030fdc8d8SChris Lattner       }
46130fdc8d8SChris Lattner     }
46230fdc8d8SChris Lattner   }
4636611103cSGreg Clayton }
46430fdc8d8SChris Lattner 
465b9c1b51eSKate Stone SBListener SBDebugger::GetListener() {
466baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBListener, SBDebugger, GetListener);
467baf5664fSJonas Devlieghere 
468ceb6b139SCaroline Tice 
4696611103cSGreg Clayton   SBListener sb_listener;
4706611103cSGreg Clayton   if (m_opaque_sp)
471583bbb1dSJim Ingham     sb_listener.reset(m_opaque_sp->GetListener());
472ceb6b139SCaroline Tice 
473750cd175SCaroline Tice 
474baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_listener);
47530fdc8d8SChris Lattner }
47630fdc8d8SChris Lattner 
477b9c1b51eSKate Stone void SBDebugger::HandleProcessEvent(const SBProcess &process,
478b9c1b51eSKate Stone                                     const SBEvent &event, FILE *out,
479b9c1b51eSKate Stone                                     FILE *err) {
480baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
481baf5664fSJonas Devlieghere       void, SBDebugger, HandleProcessEvent,
482baf5664fSJonas Devlieghere       (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *), process,
483baf5664fSJonas Devlieghere       event, out, err);
484baf5664fSJonas Devlieghere 
485af67cecdSGreg Clayton   if (!process.IsValid())
486af67cecdSGreg Clayton     return;
487af67cecdSGreg Clayton 
488b9556accSGreg Clayton   TargetSP target_sp(process.GetTarget().GetSP());
489b9556accSGreg Clayton   if (!target_sp)
490b9556accSGreg Clayton     return;
491b9556accSGreg Clayton 
49230fdc8d8SChris Lattner   const uint32_t event_type = event.GetType();
49330fdc8d8SChris Lattner   char stdio_buffer[1024];
49430fdc8d8SChris Lattner   size_t len;
49530fdc8d8SChris Lattner 
496bb19a13cSSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(target_sp->GetAPIMutex());
497af67cecdSGreg Clayton 
498b9c1b51eSKate Stone   if (event_type &
499b9c1b51eSKate Stone       (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) {
500af67cecdSGreg Clayton     // Drain stdout when we stop just in case we have any bytes
50130fdc8d8SChris Lattner     while ((len = process.GetSTDOUT(stdio_buffer, sizeof(stdio_buffer))) > 0)
502dbb0abbfSEugene Zelenko       if (out != nullptr)
50330fdc8d8SChris Lattner         ::fwrite(stdio_buffer, 1, len, out);
50430fdc8d8SChris Lattner   }
505af67cecdSGreg Clayton 
506b9c1b51eSKate Stone   if (event_type &
507b9c1b51eSKate Stone       (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) {
508af67cecdSGreg Clayton     // Drain stderr when we stop just in case we have any bytes
50930fdc8d8SChris Lattner     while ((len = process.GetSTDERR(stdio_buffer, sizeof(stdio_buffer))) > 0)
510dbb0abbfSEugene Zelenko       if (err != nullptr)
511af67cecdSGreg Clayton         ::fwrite(stdio_buffer, 1, len, err);
51230fdc8d8SChris Lattner   }
513af67cecdSGreg Clayton 
514b9c1b51eSKate Stone   if (event_type & Process::eBroadcastBitStateChanged) {
51530fdc8d8SChris Lattner     StateType event_state = SBProcess::GetStateFromEvent(event);
51630fdc8d8SChris Lattner 
51730fdc8d8SChris Lattner     if (event_state == eStateInvalid)
51830fdc8d8SChris Lattner       return;
51930fdc8d8SChris Lattner 
52030fdc8d8SChris Lattner     bool is_stopped = StateIsStoppedState(event_state);
52130fdc8d8SChris Lattner     if (!is_stopped)
5222976d00aSJim Ingham       process.ReportEventState(event, out);
52330fdc8d8SChris Lattner   }
52430fdc8d8SChris Lattner }
52530fdc8d8SChris Lattner 
526b9c1b51eSKate Stone SBSourceManager SBDebugger::GetSourceManager() {
527baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBSourceManager, SBDebugger,
528baf5664fSJonas Devlieghere                              GetSourceManager);
529baf5664fSJonas Devlieghere 
530e37d605eSJim Ingham   SBSourceManager sb_source_manager(*this);
531baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_source_manager);
53230fdc8d8SChris Lattner }
53330fdc8d8SChris Lattner 
534b9c1b51eSKate Stone bool SBDebugger::GetDefaultArchitecture(char *arch_name, size_t arch_name_len) {
535baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, GetDefaultArchitecture,
536baf5664fSJonas Devlieghere                             (char *, size_t), "", arch_name_len);
537baf5664fSJonas Devlieghere 
538b9c1b51eSKate Stone   if (arch_name && arch_name_len) {
539431ce678SGreg Clayton     ArchSpec default_arch = Target::GetDefaultArchitecture();
540daccaa9eSCaroline Tice 
541b9c1b51eSKate Stone     if (default_arch.IsValid()) {
542431ce678SGreg Clayton       const std::string &triple_str = default_arch.GetTriple().str();
543431ce678SGreg Clayton       if (!triple_str.empty())
544431ce678SGreg Clayton         ::snprintf(arch_name, arch_name_len, "%s", triple_str.c_str());
545431ce678SGreg Clayton       else
546b9c1b51eSKate Stone         ::snprintf(arch_name, arch_name_len, "%s",
547b9c1b51eSKate Stone                    default_arch.GetArchitectureName());
54830fdc8d8SChris Lattner       return true;
54930fdc8d8SChris Lattner     }
55030fdc8d8SChris Lattner   }
55130fdc8d8SChris Lattner   if (arch_name && arch_name_len)
55230fdc8d8SChris Lattner     arch_name[0] = '\0';
55330fdc8d8SChris Lattner   return false;
55430fdc8d8SChris Lattner }
55530fdc8d8SChris Lattner 
556b9c1b51eSKate Stone bool SBDebugger::SetDefaultArchitecture(const char *arch_name) {
557baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture,
558baf5664fSJonas Devlieghere                             (const char *), arch_name);
559baf5664fSJonas Devlieghere 
560b9c1b51eSKate Stone   if (arch_name) {
56170512317SGreg Clayton     ArchSpec arch(arch_name);
562b9c1b51eSKate Stone     if (arch.IsValid()) {
563431ce678SGreg Clayton       Target::SetDefaultArchitecture(arch);
56430fdc8d8SChris Lattner       return true;
56530fdc8d8SChris Lattner     }
56630fdc8d8SChris Lattner   }
56730fdc8d8SChris Lattner   return false;
56830fdc8d8SChris Lattner }
56930fdc8d8SChris Lattner 
57030fdc8d8SChris Lattner ScriptLanguage
571b9c1b51eSKate Stone SBDebugger::GetScriptingLanguage(const char *script_language_name) {
572baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage,
573baf5664fSJonas Devlieghere                      (const char *), script_language_name);
574baf5664fSJonas Devlieghere 
5757b2e5a36SZachary Turner   if (!script_language_name) return eScriptLanguageDefault;
57647cbf4a0SPavel Labath   return OptionArgParser::ToScriptLanguage(
57747cbf4a0SPavel Labath       llvm::StringRef(script_language_name), eScriptLanguageDefault, nullptr);
57830fdc8d8SChris Lattner }
57930fdc8d8SChris Lattner 
580b9c1b51eSKate Stone const char *SBDebugger::GetVersionString() {
581baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(const char *, SBDebugger, GetVersionString);
582baf5664fSJonas Devlieghere 
583b2f1fb29SVirgile Bello   return lldb_private::GetVersion();
58430fdc8d8SChris Lattner }
58530fdc8d8SChris Lattner 
586b9c1b51eSKate Stone const char *SBDebugger::StateAsCString(StateType state) {
587baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(const char *, SBDebugger, StateAsCString,
588baf5664fSJonas Devlieghere                             (lldb::StateType), state);
589baf5664fSJonas Devlieghere 
590c2bbb49aSCaroline Tice   return lldb_private::StateAsCString(state);
59130fdc8d8SChris Lattner }
59230fdc8d8SChris Lattner 
593f1389e92SPavel Labath static void AddBoolConfigEntry(StructuredData::Dictionary &dict,
594f1389e92SPavel Labath                                llvm::StringRef name, bool value,
595f1389e92SPavel Labath                                llvm::StringRef description) {
596f1389e92SPavel Labath   auto entry_up = llvm::make_unique<StructuredData::Dictionary>();
597f1389e92SPavel Labath   entry_up->AddBooleanItem("value", value);
598f1389e92SPavel Labath   entry_up->AddStringItem("description", description);
599f1389e92SPavel Labath   dict.AddItem(name, std::move(entry_up));
600f1389e92SPavel Labath }
601f1389e92SPavel Labath 
602abc0c6adSPavel Labath static void AddLLVMTargets(StructuredData::Dictionary &dict) {
603abc0c6adSPavel Labath   auto array_up = llvm::make_unique<StructuredData::Array>();
604abc0c6adSPavel Labath #define LLVM_TARGET(target)                                                    \
605abc0c6adSPavel Labath   array_up->AddItem(llvm::make_unique<StructuredData::String>(#target));
606abc0c6adSPavel Labath #include "llvm/Config/Targets.def"
607abc0c6adSPavel Labath   auto entry_up = llvm::make_unique<StructuredData::Dictionary>();
608abc0c6adSPavel Labath   entry_up->AddItem("value", std::move(array_up));
609abc0c6adSPavel Labath   entry_up->AddStringItem("description", "A list of configured LLVM targets.");
610abc0c6adSPavel Labath   dict.AddItem("targets", std::move(entry_up));
611abc0c6adSPavel Labath }
612abc0c6adSPavel Labath 
613f1389e92SPavel Labath SBStructuredData SBDebugger::GetBuildConfiguration() {
614baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBStructuredData, SBDebugger,
615baf5664fSJonas Devlieghere                                     GetBuildConfiguration);
616baf5664fSJonas Devlieghere 
617f1389e92SPavel Labath   auto config_up = llvm::make_unique<StructuredData::Dictionary>();
618f1389e92SPavel Labath   AddBoolConfigEntry(
619f1389e92SPavel Labath       *config_up, "xml", XMLDocument::XMLEnabled(),
620f1389e92SPavel Labath       "A boolean value that indicates if XML support is enabled in LLDB");
621abc0c6adSPavel Labath   AddLLVMTargets(*config_up);
622f1389e92SPavel Labath 
623f1389e92SPavel Labath   SBStructuredData data;
624f1389e92SPavel Labath   data.m_impl_up->SetObjectSP(std::move(config_up));
625baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(data);
626f1389e92SPavel Labath }
627f1389e92SPavel Labath 
628b9c1b51eSKate Stone bool SBDebugger::StateIsRunningState(StateType state) {
629baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsRunningState,
630baf5664fSJonas Devlieghere                             (lldb::StateType), state);
631baf5664fSJonas Devlieghere 
6324838131bSGreg Clayton 
633c2bbb49aSCaroline Tice   const bool result = lldb_private::StateIsRunningState(state);
6344838131bSGreg Clayton 
6354838131bSGreg Clayton   return result;
63630fdc8d8SChris Lattner }
63730fdc8d8SChris Lattner 
638b9c1b51eSKate Stone bool SBDebugger::StateIsStoppedState(StateType state) {
639baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState,
640baf5664fSJonas Devlieghere                             (lldb::StateType), state);
641baf5664fSJonas Devlieghere 
642ceb6b139SCaroline Tice 
6432637f825SGreg Clayton   const bool result = lldb_private::StateIsStoppedState(state, false);
644ceb6b139SCaroline Tice 
6454838131bSGreg Clayton   return result;
64630fdc8d8SChris Lattner }
64730fdc8d8SChris Lattner 
648b9c1b51eSKate Stone lldb::SBTarget SBDebugger::CreateTarget(const char *filename,
649cac9c5f9SGreg Clayton                                         const char *target_triple,
650cac9c5f9SGreg Clayton                                         const char *platform_name,
651cac9c5f9SGreg Clayton                                         bool add_dependent_modules,
652b9c1b51eSKate Stone                                         lldb::SBError &sb_error) {
653baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
654baf5664fSJonas Devlieghere       lldb::SBTarget, SBDebugger, CreateTarget,
655baf5664fSJonas Devlieghere       (const char *, const char *, const char *, bool, lldb::SBError &),
656baf5664fSJonas Devlieghere       filename, target_triple, platform_name, add_dependent_modules, sb_error);
657baf5664fSJonas Devlieghere 
658cac9c5f9SGreg Clayton   SBTarget sb_target;
659b9556accSGreg Clayton   TargetSP target_sp;
660b9c1b51eSKate Stone   if (m_opaque_sp) {
661cac9c5f9SGreg Clayton     sb_error.Clear();
662cac9c5f9SGreg Clayton     OptionGroupPlatform platform_options(false);
663cac9c5f9SGreg Clayton     platform_options.SetPlatformName(platform_name);
664cac9c5f9SGreg Clayton 
665b9c1b51eSKate Stone     sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget(
666f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, target_triple,
667f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo,
668b9c1b51eSKate Stone         &platform_options, target_sp);
669cac9c5f9SGreg Clayton 
670cac9c5f9SGreg Clayton     if (sb_error.Success())
671b9556accSGreg Clayton       sb_target.SetSP(target_sp);
672b9c1b51eSKate Stone   } else {
6739f521f22SJim Ingham     sb_error.SetErrorString("invalid debugger");
674cac9c5f9SGreg Clayton   }
675cac9c5f9SGreg Clayton 
6765160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
677cac9c5f9SGreg Clayton   if (log)
678b9c1b51eSKate Stone     log->Printf("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, "
679b9c1b51eSKate Stone                 "platform_name=%s, add_dependent_modules=%u, error=%s) => "
680b9c1b51eSKate Stone                 "SBTarget(%p)",
681b9c1b51eSKate Stone                 static_cast<void *>(m_opaque_sp.get()), filename, target_triple,
682b9c1b51eSKate Stone                 platform_name, add_dependent_modules, sb_error.GetCString(),
683b9c1b51eSKate Stone                 static_cast<void *>(target_sp.get()));
684cac9c5f9SGreg Clayton 
685baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
686cac9c5f9SGreg Clayton }
68730fdc8d8SChris Lattner 
68830fdc8d8SChris Lattner SBTarget
68930fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple(const char *filename,
690b9c1b51eSKate Stone                                                 const char *target_triple) {
691baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger,
692baf5664fSJonas Devlieghere                      CreateTargetWithFileAndTargetTriple,
693baf5664fSJonas Devlieghere                      (const char *, const char *), filename, target_triple);
694baf5664fSJonas Devlieghere 
695b9556accSGreg Clayton   SBTarget sb_target;
696b9556accSGreg Clayton   TargetSP target_sp;
697b9c1b51eSKate Stone   if (m_opaque_sp) {
698cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
69997206d57SZachary Turner     Status error(m_opaque_sp->GetTargetList().CreateTarget(
700f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, target_triple,
701f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
702cac9c5f9SGreg Clayton         target_sp));
703b9556accSGreg Clayton     sb_target.SetSP(target_sp);
7046611103cSGreg Clayton   }
7054838131bSGreg Clayton 
7065160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
7074838131bSGreg Clayton   if (log)
708b9c1b51eSKate Stone     log->Printf("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple "
709b9c1b51eSKate Stone                 "(filename=\"%s\", triple=%s) => SBTarget(%p)",
710b9c1b51eSKate Stone                 static_cast<void *>(m_opaque_sp.get()), filename, target_triple,
711b9c1b51eSKate Stone                 static_cast<void *>(target_sp.get()));
7124838131bSGreg Clayton 
713baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
71430fdc8d8SChris Lattner }
71530fdc8d8SChris Lattner 
716b9c1b51eSKate Stone SBTarget SBDebugger::CreateTargetWithFileAndArch(const char *filename,
717b9c1b51eSKate Stone                                                  const char *arch_cstr) {
718baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTargetWithFileAndArch,
719baf5664fSJonas Devlieghere                      (const char *, const char *), filename, arch_cstr);
720baf5664fSJonas Devlieghere 
7215160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
722ceb6b139SCaroline Tice 
723b9556accSGreg Clayton   SBTarget sb_target;
724b9556accSGreg Clayton   TargetSP target_sp;
725b9c1b51eSKate Stone   if (m_opaque_sp) {
72697206d57SZachary Turner     Status error;
727cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
72830fdc8d8SChris Lattner 
729b9c1b51eSKate Stone     error = m_opaque_sp->GetTargetList().CreateTarget(
730f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, arch_cstr,
731f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
732cac9c5f9SGreg Clayton         target_sp);
73330fdc8d8SChris Lattner 
734b9c1b51eSKate Stone     if (error.Success()) {
7352976d00aSJim Ingham       m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
736b9556accSGreg Clayton       sb_target.SetSP(target_sp);
7376611103cSGreg Clayton     }
7386611103cSGreg Clayton   }
739ceb6b139SCaroline Tice 
740ceb6b139SCaroline Tice   if (log)
741b9c1b51eSKate Stone     log->Printf("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", "
742b9c1b51eSKate Stone                 "arch=%s) => SBTarget(%p)",
743324a1036SSaleem Abdulrasool                 static_cast<void *>(m_opaque_sp.get()), filename, arch_cstr,
744324a1036SSaleem Abdulrasool                 static_cast<void *>(target_sp.get()));
745ceb6b139SCaroline Tice 
746baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
74730fdc8d8SChris Lattner }
74830fdc8d8SChris Lattner 
749b9c1b51eSKate Stone SBTarget SBDebugger::CreateTarget(const char *filename) {
750baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTarget, (const char *),
751baf5664fSJonas Devlieghere                      filename);
752baf5664fSJonas Devlieghere 
753b9556accSGreg Clayton   SBTarget sb_target;
754b9556accSGreg Clayton   TargetSP target_sp;
755b9c1b51eSKate Stone   if (m_opaque_sp) {
75697206d57SZachary Turner     Status error;
757cac9c5f9SGreg Clayton     const bool add_dependent_modules = true;
758b9c1b51eSKate Stone     error = m_opaque_sp->GetTargetList().CreateTarget(
759f9a07e9fSJonas Devlieghere         *m_opaque_sp, filename, "",
760f9a07e9fSJonas Devlieghere         add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
761f9a07e9fSJonas Devlieghere         target_sp);
76230fdc8d8SChris Lattner 
763b9c1b51eSKate Stone     if (error.Success()) {
7642976d00aSJim Ingham       m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
765b9556accSGreg Clayton       sb_target.SetSP(target_sp);
7666611103cSGreg Clayton     }
7676611103cSGreg Clayton   }
7685160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
7694838131bSGreg Clayton   if (log)
770b9c1b51eSKate Stone     log->Printf(
771b9c1b51eSKate Stone         "SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
772324a1036SSaleem Abdulrasool         static_cast<void *>(m_opaque_sp.get()), filename,
773324a1036SSaleem Abdulrasool         static_cast<void *>(target_sp.get()));
774baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
77530fdc8d8SChris Lattner }
77630fdc8d8SChris Lattner 
777b842f2ecSJim Ingham SBTarget SBDebugger::GetDummyTarget() {
778baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetDummyTarget);
779baf5664fSJonas Devlieghere 
780b842f2ecSJim Ingham   SBTarget sb_target;
781b842f2ecSJim Ingham   if (m_opaque_sp) {
782b842f2ecSJim Ingham       sb_target.SetSP(m_opaque_sp->GetDummyTarget()->shared_from_this());
783b842f2ecSJim Ingham   }
784b842f2ecSJim Ingham   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
785b842f2ecSJim Ingham   if (log)
786b842f2ecSJim Ingham     log->Printf(
787b842f2ecSJim Ingham         "SBDebugger(%p)::GetDummyTarget() => SBTarget(%p)",
788b842f2ecSJim Ingham         static_cast<void *>(m_opaque_sp.get()),
789b842f2ecSJim Ingham         static_cast<void *>(sb_target.GetSP().get()));
790baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
791b842f2ecSJim Ingham }
792b842f2ecSJim Ingham 
793b9c1b51eSKate Stone bool SBDebugger::DeleteTarget(lldb::SBTarget &target) {
794baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &),
795baf5664fSJonas Devlieghere                      target);
796baf5664fSJonas Devlieghere 
7973794ad95SJohnny Chen   bool result = false;
798b9c1b51eSKate Stone   if (m_opaque_sp) {
799b9556accSGreg Clayton     TargetSP target_sp(target.GetSP());
800b9c1b51eSKate Stone     if (target_sp) {
8013794ad95SJohnny Chen       // No need to lock, the target list is thread safe
802b9556accSGreg Clayton       result = m_opaque_sp->GetTargetList().DeleteTarget(target_sp);
803b9556accSGreg Clayton       target_sp->Destroy();
80475340622SGreg Clayton       target.Clear();
8050cd70866SGreg Clayton       const bool mandatory = true;
8060cd70866SGreg Clayton       ModuleList::RemoveOrphanSharedModules(mandatory);
8073794ad95SJohnny Chen     }
808b9556accSGreg Clayton   }
8093794ad95SJohnny Chen 
8105160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
8113794ad95SJohnny Chen   if (log)
812324a1036SSaleem Abdulrasool     log->Printf("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i",
813324a1036SSaleem Abdulrasool                 static_cast<void *>(m_opaque_sp.get()),
814324a1036SSaleem Abdulrasool                 static_cast<void *>(target.m_opaque_sp.get()), result);
8153794ad95SJohnny Chen 
8163794ad95SJohnny Chen   return result;
8173794ad95SJohnny Chen }
818dbb0abbfSEugene Zelenko 
819b9c1b51eSKate Stone SBTarget SBDebugger::GetTargetAtIndex(uint32_t idx) {
820baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex, (uint32_t),
821baf5664fSJonas Devlieghere                      idx);
822baf5664fSJonas Devlieghere 
8236611103cSGreg Clayton   SBTarget sb_target;
824b9c1b51eSKate Stone   if (m_opaque_sp) {
825af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
826b9556accSGreg Clayton     sb_target.SetSP(m_opaque_sp->GetTargetList().GetTargetAtIndex(idx));
827af67cecdSGreg Clayton   }
828baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
82930fdc8d8SChris Lattner }
83030fdc8d8SChris Lattner 
831b9c1b51eSKate Stone uint32_t SBDebugger::GetIndexOfTarget(lldb::SBTarget target) {
832baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBDebugger, GetIndexOfTarget, (lldb::SBTarget),
833baf5664fSJonas Devlieghere                      target);
8348499e1a4SJim Ingham 
8358499e1a4SJim Ingham   lldb::TargetSP target_sp = target.GetSP();
8368499e1a4SJim Ingham   if (!target_sp)
8378499e1a4SJim Ingham     return UINT32_MAX;
8388499e1a4SJim Ingham 
8398499e1a4SJim Ingham   if (!m_opaque_sp)
8408499e1a4SJim Ingham     return UINT32_MAX;
8418499e1a4SJim Ingham 
8428499e1a4SJim Ingham   return m_opaque_sp->GetTargetList().GetIndexOfTarget(target.GetSP());
8438499e1a4SJim Ingham }
8448499e1a4SJim Ingham 
845b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithProcessID(lldb::pid_t pid) {
846baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID,
847baf5664fSJonas Devlieghere                      (lldb::pid_t), pid);
848baf5664fSJonas Devlieghere 
8496611103cSGreg Clayton   SBTarget sb_target;
850b9c1b51eSKate Stone   if (m_opaque_sp) {
851af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
852b9556accSGreg Clayton     sb_target.SetSP(m_opaque_sp->GetTargetList().FindTargetWithProcessID(pid));
853af67cecdSGreg Clayton   }
854baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
85530fdc8d8SChris Lattner }
85630fdc8d8SChris Lattner 
857b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithFileAndArch(const char *filename,
858b9c1b51eSKate Stone                                                const char *arch_name) {
859baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch,
860baf5664fSJonas Devlieghere                      (const char *, const char *), filename, arch_name);
861baf5664fSJonas Devlieghere 
8626611103cSGreg Clayton   SBTarget sb_target;
863b9c1b51eSKate Stone   if (m_opaque_sp && filename && filename[0]) {
864af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
8657263f1bdSPavel Labath     ArchSpec arch = Platform::GetAugmentedArchSpec(
8667263f1bdSPavel Labath         m_opaque_sp->GetPlatformList().GetSelectedPlatform().get(), arch_name);
867b9c1b51eSKate Stone     TargetSP target_sp(
868b9c1b51eSKate Stone         m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture(
8698f3be7a3SJonas Devlieghere             FileSpec(filename), arch_name ? &arch : nullptr));
870b9556accSGreg Clayton     sb_target.SetSP(target_sp);
8716611103cSGreg Clayton   }
872baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
87330fdc8d8SChris Lattner }
87430fdc8d8SChris Lattner 
875b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithLLDBProcess(const ProcessSP &process_sp) {
8766611103cSGreg Clayton   SBTarget sb_target;
877b9c1b51eSKate Stone   if (m_opaque_sp) {
878af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
879b9c1b51eSKate Stone     sb_target.SetSP(
880b9c1b51eSKate Stone         m_opaque_sp->GetTargetList().FindTargetWithProcess(process_sp.get()));
881af67cecdSGreg Clayton   }
88230fdc8d8SChris Lattner   return sb_target;
88330fdc8d8SChris Lattner }
88430fdc8d8SChris Lattner 
885b9c1b51eSKate Stone uint32_t SBDebugger::GetNumTargets() {
886baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumTargets);
887baf5664fSJonas Devlieghere 
888b9c1b51eSKate Stone   if (m_opaque_sp) {
889af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
8906611103cSGreg Clayton     return m_opaque_sp->GetTargetList().GetNumTargets();
891af67cecdSGreg Clayton   }
8926611103cSGreg Clayton   return 0;
8936611103cSGreg Clayton }
89430fdc8d8SChris Lattner 
895b9c1b51eSKate Stone SBTarget SBDebugger::GetSelectedTarget() {
896baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetSelectedTarget);
897baf5664fSJonas Devlieghere 
8985160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
899ceb6b139SCaroline Tice 
9006611103cSGreg Clayton   SBTarget sb_target;
901b9556accSGreg Clayton   TargetSP target_sp;
902b9c1b51eSKate Stone   if (m_opaque_sp) {
903af67cecdSGreg Clayton     // No need to lock, the target list is thread safe
904b9556accSGreg Clayton     target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget();
905b9556accSGreg Clayton     sb_target.SetSP(target_sp);
906af67cecdSGreg Clayton   }
907ceb6b139SCaroline Tice 
908b9c1b51eSKate Stone   if (log) {
909ceb6b139SCaroline Tice     SBStream sstr;
910431ce678SGreg Clayton     sb_target.GetDescription(sstr, eDescriptionLevelBrief);
911324a1036SSaleem Abdulrasool     log->Printf("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s",
912324a1036SSaleem Abdulrasool                 static_cast<void *>(m_opaque_sp.get()),
913324a1036SSaleem Abdulrasool                 static_cast<void *>(target_sp.get()), sstr.GetData());
914ceb6b139SCaroline Tice   }
915ceb6b139SCaroline Tice 
916baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_target);
91730fdc8d8SChris Lattner }
91830fdc8d8SChris Lattner 
919b9c1b51eSKate Stone void SBDebugger::SetSelectedTarget(SBTarget &sb_target) {
920baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedTarget, (lldb::SBTarget &),
921baf5664fSJonas Devlieghere                      sb_target);
922baf5664fSJonas Devlieghere 
9235160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
924e64f0dc7SJim Ingham 
925b9556accSGreg Clayton   TargetSP target_sp(sb_target.GetSP());
926b9c1b51eSKate Stone   if (m_opaque_sp) {
927b9556accSGreg Clayton     m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
928e64f0dc7SJim Ingham   }
929b9c1b51eSKate Stone   if (log) {
930e64f0dc7SJim Ingham     SBStream sstr;
931e64f0dc7SJim Ingham     sb_target.GetDescription(sstr, eDescriptionLevelBrief);
932324a1036SSaleem Abdulrasool     log->Printf("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s",
933324a1036SSaleem Abdulrasool                 static_cast<void *>(m_opaque_sp.get()),
934324a1036SSaleem Abdulrasool                 static_cast<void *>(target_sp.get()), sstr.GetData());
935e64f0dc7SJim Ingham   }
936e64f0dc7SJim Ingham }
937e64f0dc7SJim Ingham 
938b9c1b51eSKate Stone SBPlatform SBDebugger::GetSelectedPlatform() {
939baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBPlatform, SBDebugger, GetSelectedPlatform);
940baf5664fSJonas Devlieghere 
941fbb76349SGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
942fbb76349SGreg Clayton 
943fbb76349SGreg Clayton   SBPlatform sb_platform;
944fbb76349SGreg Clayton   DebuggerSP debugger_sp(m_opaque_sp);
945b9c1b51eSKate Stone   if (debugger_sp) {
946fbb76349SGreg Clayton     sb_platform.SetSP(debugger_sp->GetPlatformList().GetSelectedPlatform());
947fbb76349SGreg Clayton   }
948fbb76349SGreg Clayton   if (log)
949324a1036SSaleem Abdulrasool     log->Printf("SBDebugger(%p)::GetSelectedPlatform () => SBPlatform(%p): %s",
950324a1036SSaleem Abdulrasool                 static_cast<void *>(m_opaque_sp.get()),
951324a1036SSaleem Abdulrasool                 static_cast<void *>(sb_platform.GetSP().get()),
952324a1036SSaleem Abdulrasool                 sb_platform.GetName());
953baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_platform);
954fbb76349SGreg Clayton }
955fbb76349SGreg Clayton 
956b9c1b51eSKate Stone void SBDebugger::SetSelectedPlatform(SBPlatform &sb_platform) {
957baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedPlatform,
958baf5664fSJonas Devlieghere                      (lldb::SBPlatform &), sb_platform);
959baf5664fSJonas Devlieghere 
960fbb76349SGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
961fbb76349SGreg Clayton 
962fbb76349SGreg Clayton   DebuggerSP debugger_sp(m_opaque_sp);
963b9c1b51eSKate Stone   if (debugger_sp) {
964fbb76349SGreg Clayton     debugger_sp->GetPlatformList().SetSelectedPlatform(sb_platform.GetSP());
965fbb76349SGreg Clayton   }
966324a1036SSaleem Abdulrasool 
967fbb76349SGreg Clayton   if (log)
968324a1036SSaleem Abdulrasool     log->Printf("SBDebugger(%p)::SetSelectedPlatform (SBPlatform(%p) %s)",
969324a1036SSaleem Abdulrasool                 static_cast<void *>(m_opaque_sp.get()),
970324a1036SSaleem Abdulrasool                 static_cast<void *>(sb_platform.GetSP().get()),
971324a1036SSaleem Abdulrasool                 sb_platform.GetName());
972fbb76349SGreg Clayton }
973fbb76349SGreg Clayton 
974c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumPlatforms() {
975baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumPlatforms);
976baf5664fSJonas Devlieghere 
977c10e34d0SVadim Macagon   if (m_opaque_sp) {
978c10e34d0SVadim Macagon     // No need to lock, the platform list is thread safe
979c10e34d0SVadim Macagon     return m_opaque_sp->GetPlatformList().GetSize();
980c10e34d0SVadim Macagon   }
981c10e34d0SVadim Macagon   return 0;
982c10e34d0SVadim Macagon }
983c10e34d0SVadim Macagon 
984c10e34d0SVadim Macagon SBPlatform SBDebugger::GetPlatformAtIndex(uint32_t idx) {
985baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex,
986baf5664fSJonas Devlieghere                      (uint32_t), idx);
987baf5664fSJonas Devlieghere 
988c10e34d0SVadim Macagon   SBPlatform sb_platform;
989c10e34d0SVadim Macagon   if (m_opaque_sp) {
990c10e34d0SVadim Macagon     // No need to lock, the platform list is thread safe
991c10e34d0SVadim Macagon     sb_platform.SetSP(m_opaque_sp->GetPlatformList().GetAtIndex(idx));
992c10e34d0SVadim Macagon   }
993baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_platform);
994c10e34d0SVadim Macagon }
995c10e34d0SVadim Macagon 
996c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumAvailablePlatforms() {
997baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumAvailablePlatforms);
998baf5664fSJonas Devlieghere 
999c10e34d0SVadim Macagon   uint32_t idx = 0;
1000c10e34d0SVadim Macagon   while (true) {
1001c10e34d0SVadim Macagon     if (!PluginManager::GetPlatformPluginNameAtIndex(idx)) {
1002c10e34d0SVadim Macagon       break;
1003c10e34d0SVadim Macagon     }
1004c10e34d0SVadim Macagon     ++idx;
1005c10e34d0SVadim Macagon   }
1006c10e34d0SVadim Macagon   // +1 for the host platform, which should always appear first in the list.
1007c10e34d0SVadim Macagon   return idx + 1;
1008c10e34d0SVadim Macagon }
1009c10e34d0SVadim Macagon 
1010c10e34d0SVadim Macagon SBStructuredData SBDebugger::GetAvailablePlatformInfoAtIndex(uint32_t idx) {
1011baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBStructuredData, SBDebugger,
1012baf5664fSJonas Devlieghere                      GetAvailablePlatformInfoAtIndex, (uint32_t), idx);
1013baf5664fSJonas Devlieghere 
1014c10e34d0SVadim Macagon   SBStructuredData data;
1015c10e34d0SVadim Macagon   auto platform_dict = llvm::make_unique<StructuredData::Dictionary>();
1016c10e34d0SVadim Macagon   llvm::StringRef name_str("name"), desc_str("description");
1017c10e34d0SVadim Macagon 
1018c10e34d0SVadim Macagon   if (idx == 0) {
1019c10e34d0SVadim Macagon     PlatformSP host_platform_sp(Platform::GetHostPlatform());
1020c10e34d0SVadim Macagon     platform_dict->AddStringItem(
1021c10e34d0SVadim Macagon         name_str, host_platform_sp->GetPluginName().GetStringRef());
1022c10e34d0SVadim Macagon     platform_dict->AddStringItem(
1023c10e34d0SVadim Macagon         desc_str, llvm::StringRef(host_platform_sp->GetDescription()));
1024c10e34d0SVadim Macagon   } else if (idx > 0) {
1025c10e34d0SVadim Macagon     const char *plugin_name =
1026c10e34d0SVadim Macagon         PluginManager::GetPlatformPluginNameAtIndex(idx - 1);
1027c10e34d0SVadim Macagon     if (!plugin_name) {
1028baf5664fSJonas Devlieghere       return LLDB_RECORD_RESULT(data);
1029c10e34d0SVadim Macagon     }
1030c10e34d0SVadim Macagon     platform_dict->AddStringItem(name_str, llvm::StringRef(plugin_name));
1031c10e34d0SVadim Macagon 
1032c10e34d0SVadim Macagon     const char *plugin_desc =
1033c10e34d0SVadim Macagon         PluginManager::GetPlatformPluginDescriptionAtIndex(idx - 1);
1034c10e34d0SVadim Macagon     if (!plugin_desc) {
1035baf5664fSJonas Devlieghere       return LLDB_RECORD_RESULT(data);
1036c10e34d0SVadim Macagon     }
1037c10e34d0SVadim Macagon     platform_dict->AddStringItem(desc_str, llvm::StringRef(plugin_desc));
1038c10e34d0SVadim Macagon   }
1039c10e34d0SVadim Macagon 
1040c10e34d0SVadim Macagon   data.m_impl_up->SetObjectSP(
1041c10e34d0SVadim Macagon       StructuredData::ObjectSP(platform_dict.release()));
1042baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(data);
1043c10e34d0SVadim Macagon }
1044c10e34d0SVadim Macagon 
1045b9c1b51eSKate Stone void SBDebugger::DispatchInput(void *baton, const void *data, size_t data_len) {
10460d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput,
10470d7b0c96SJonas Devlieghere                     (void *, const void *, size_t), baton, data, data_len);
10480d7b0c96SJonas Devlieghere 
10496b09d423SEnrico Granata   DispatchInput(data, data_len);
10506b09d423SEnrico Granata }
10516b09d423SEnrico Granata 
1052b9c1b51eSKate Stone void SBDebugger::DispatchInput(const void *data, size_t data_len) {
10530d7b0c96SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput, (const void *, size_t),
10540d7b0c96SJonas Devlieghere                     data, data_len);
10550d7b0c96SJonas Devlieghere 
105644d93782SGreg Clayton   //    Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
105744d93782SGreg Clayton   //
105844d93782SGreg Clayton   //    if (log)
1059b9c1b51eSKate Stone   //        log->Printf ("SBDebugger(%p)::DispatchInput (data=\"%.*s\",
1060b9c1b51eSKate Stone   //        size_t=%" PRIu64 ")",
106144d93782SGreg Clayton   //                     m_opaque_sp.get(),
106244d93782SGreg Clayton   //                     (int) data_len,
106344d93782SGreg Clayton   //                     (const char *) data,
106444d93782SGreg Clayton   //                     (uint64_t)data_len);
106544d93782SGreg Clayton   //
106644d93782SGreg Clayton   //    if (m_opaque_sp)
106744d93782SGreg Clayton   //        m_opaque_sp->DispatchInput ((const char *) data, data_len);
106830fdc8d8SChris Lattner }
106930fdc8d8SChris Lattner 
1070b9c1b51eSKate Stone void SBDebugger::DispatchInputInterrupt() {
1071baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, DispatchInputInterrupt);
1072baf5664fSJonas Devlieghere 
1073efed6131SCaroline Tice   if (m_opaque_sp)
1074efed6131SCaroline Tice     m_opaque_sp->DispatchInputInterrupt();
1075efed6131SCaroline Tice }
1076efed6131SCaroline Tice 
1077b9c1b51eSKate Stone void SBDebugger::DispatchInputEndOfFile() {
1078baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, DispatchInputEndOfFile);
1079baf5664fSJonas Devlieghere 
1080efed6131SCaroline Tice   if (m_opaque_sp)
1081efed6131SCaroline Tice     m_opaque_sp->DispatchInputEndOfFile();
1082efed6131SCaroline Tice }
10839088b068SCaroline Tice 
1084baf5664fSJonas Devlieghere void SBDebugger::PushInputReader(SBInputReader &reader) {
1085baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, PushInputReader, (lldb::SBInputReader &),
1086baf5664fSJonas Devlieghere                      reader);
1087baf5664fSJonas Devlieghere }
10886611103cSGreg Clayton 
1089b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events,
1090b9c1b51eSKate Stone                                        bool spawn_thread) {
1091baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool),
1092baf5664fSJonas Devlieghere                      auto_handle_events, spawn_thread);
1093baf5664fSJonas Devlieghere 
1094b9c1b51eSKate Stone   if (m_opaque_sp) {
109526c7bf93SJim Ingham     CommandInterpreterRunOptions options;
109626c7bf93SJim Ingham 
1097b9c1b51eSKate Stone     m_opaque_sp->GetCommandInterpreter().RunCommandInterpreter(
1098b9c1b51eSKate Stone         auto_handle_events, spawn_thread, options);
109926c7bf93SJim Ingham   }
110026c7bf93SJim Ingham }
110126c7bf93SJim Ingham 
1102b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events,
110326c7bf93SJim Ingham                                        bool spawn_thread,
110426c7bf93SJim Ingham                                        SBCommandInterpreterRunOptions &options,
1105b9c1b51eSKate Stone                                        int &num_errors, bool &quit_requested,
1106ffc9f1deSJim Ingham                                        bool &stopped_for_crash)
110726c7bf93SJim Ingham 
110826c7bf93SJim Ingham {
1109baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter,
1110baf5664fSJonas Devlieghere                      (bool, bool, lldb::SBCommandInterpreterRunOptions &, int &,
1111baf5664fSJonas Devlieghere                       bool &, bool &),
1112baf5664fSJonas Devlieghere                      auto_handle_events, spawn_thread, options, num_errors,
1113baf5664fSJonas Devlieghere                      quit_requested, stopped_for_crash);
1114baf5664fSJonas Devlieghere 
1115b9c1b51eSKate Stone   if (m_opaque_sp) {
111626c7bf93SJim Ingham     CommandInterpreter &interp = m_opaque_sp->GetCommandInterpreter();
1117b9c1b51eSKate Stone     interp.RunCommandInterpreter(auto_handle_events, spawn_thread,
1118b9c1b51eSKate Stone                                  options.ref());
111926c7bf93SJim Ingham     num_errors = interp.GetNumErrors();
112026c7bf93SJim Ingham     quit_requested = interp.GetQuitRequested();
1121ffc9f1deSJim Ingham     stopped_for_crash = interp.GetStoppedForCrash();
112226c7bf93SJim Ingham   }
1123969ed3d1SCaroline Tice }
1124969ed3d1SCaroline Tice 
1125b9c1b51eSKate Stone SBError SBDebugger::RunREPL(lldb::LanguageType language,
1126b9c1b51eSKate Stone                             const char *repl_options) {
1127baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, RunREPL,
1128baf5664fSJonas Devlieghere                      (lldb::LanguageType, const char *), language,
1129baf5664fSJonas Devlieghere                      repl_options);
1130baf5664fSJonas Devlieghere 
11313e7e915dSSean Callanan   SBError error;
11323e7e915dSSean Callanan   if (m_opaque_sp)
11333e7e915dSSean Callanan     error.ref() = m_opaque_sp->RunREPL(language, repl_options);
11343e7e915dSSean Callanan   else
11353e7e915dSSean Callanan     error.SetErrorString("invalid debugger");
1136baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(error);
11373e7e915dSSean Callanan }
11383e7e915dSSean Callanan 
1139b9c1b51eSKate Stone void SBDebugger::reset(const DebuggerSP &debugger_sp) {
11406611103cSGreg Clayton   m_opaque_sp = debugger_sp;
11416611103cSGreg Clayton }
11426611103cSGreg Clayton 
1143b9c1b51eSKate Stone Debugger *SBDebugger::get() const { return m_opaque_sp.get(); }
11446611103cSGreg Clayton 
1145b9c1b51eSKate Stone Debugger &SBDebugger::ref() const {
11466611103cSGreg Clayton   assert(m_opaque_sp.get());
11476611103cSGreg Clayton   return *m_opaque_sp;
11486611103cSGreg Clayton }
11496611103cSGreg Clayton 
1150b9c1b51eSKate Stone const lldb::DebuggerSP &SBDebugger::get_sp() const { return m_opaque_sp; }
11516611103cSGreg Clayton 
1152b9c1b51eSKate Stone SBDebugger SBDebugger::FindDebuggerWithID(int id) {
1153baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, FindDebuggerWithID,
1154baf5664fSJonas Devlieghere                             (int), id);
1155baf5664fSJonas Devlieghere 
1156af67cecdSGreg Clayton   // No need to lock, the debugger list is thread safe
1157ebc1bb27SCaroline Tice   SBDebugger sb_debugger;
1158431ce678SGreg Clayton   DebuggerSP debugger_sp = Debugger::FindDebuggerWithID(id);
1159ebc1bb27SCaroline Tice   if (debugger_sp)
1160ebc1bb27SCaroline Tice     sb_debugger.reset(debugger_sp);
1161baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_debugger);
1162ebc1bb27SCaroline Tice }
1163e40e4218SJim Ingham 
1164b9c1b51eSKate Stone const char *SBDebugger::GetInstanceName() {
1165baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBDebugger, GetInstanceName);
1166baf5664fSJonas Devlieghere 
1167dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetInstanceName().AsCString() : nullptr);
1168dd759857SCaroline Tice }
1169dd759857SCaroline Tice 
1170b9c1b51eSKate Stone SBError SBDebugger::SetInternalVariable(const char *var_name, const char *value,
1171b9c1b51eSKate Stone                                         const char *debugger_instance_name) {
1172baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable,
1173baf5664fSJonas Devlieghere                             (const char *, const char *, const char *),
1174baf5664fSJonas Devlieghere                             var_name, value, debugger_instance_name);
1175baf5664fSJonas Devlieghere 
11766920b52bSGreg Clayton   SBError sb_error;
1177b9c1b51eSKate Stone   DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName(
1178b9c1b51eSKate Stone       ConstString(debugger_instance_name)));
117997206d57SZachary Turner   Status error;
1180b9c1b51eSKate Stone   if (debugger_sp) {
1181b9c1b51eSKate Stone     ExecutionContext exe_ctx(
1182b9c1b51eSKate Stone         debugger_sp->GetCommandInterpreter().GetExecutionContext());
1183b9c1b51eSKate Stone     error = debugger_sp->SetPropertyValue(&exe_ctx, eVarSetOperationAssign,
1184b9c1b51eSKate Stone                                           var_name, value);
1185b9c1b51eSKate Stone   } else {
1186b9c1b51eSKate Stone     error.SetErrorStringWithFormat("invalid debugger instance name '%s'",
1187b9c1b51eSKate Stone                                    debugger_instance_name);
11886920b52bSGreg Clayton   }
11896920b52bSGreg Clayton   if (error.Fail())
11906920b52bSGreg Clayton     sb_error.SetError(error);
1191baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
11923df9a8dfSCaroline Tice }
11933df9a8dfSCaroline Tice 
1194431ce678SGreg Clayton SBStringList
1195b9c1b51eSKate Stone SBDebugger::GetInternalVariableValue(const char *var_name,
1196b9c1b51eSKate Stone                                      const char *debugger_instance_name) {
1197baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(
1198baf5664fSJonas Devlieghere       lldb::SBStringList, SBDebugger, GetInternalVariableValue,
1199baf5664fSJonas Devlieghere       (const char *, const char *), var_name, debugger_instance_name);
1200baf5664fSJonas Devlieghere 
12013df9a8dfSCaroline Tice   SBStringList ret_value;
1202b9c1b51eSKate Stone   DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName(
1203b9c1b51eSKate Stone       ConstString(debugger_instance_name)));
120497206d57SZachary Turner   Status error;
1205b9c1b51eSKate Stone   if (debugger_sp) {
1206b9c1b51eSKate Stone     ExecutionContext exe_ctx(
1207b9c1b51eSKate Stone         debugger_sp->GetCommandInterpreter().GetExecutionContext());
1208b9c1b51eSKate Stone     lldb::OptionValueSP value_sp(
1209b9c1b51eSKate Stone         debugger_sp->GetPropertyValue(&exe_ctx, var_name, false, error));
1210b9c1b51eSKate Stone     if (value_sp) {
12116920b52bSGreg Clayton       StreamString value_strm;
12126920b52bSGreg Clayton       value_sp->DumpValue(&exe_ctx, value_strm, OptionValue::eDumpOptionValue);
12136920b52bSGreg Clayton       const std::string &value_str = value_strm.GetString();
1214b9c1b51eSKate Stone       if (!value_str.empty()) {
12156920b52bSGreg Clayton         StringList string_list;
121644d93782SGreg Clayton         string_list.SplitIntoLines(value_str);
1217baf5664fSJonas Devlieghere         return LLDB_RECORD_RESULT(SBStringList(&string_list));
12186920b52bSGreg Clayton       }
12196920b52bSGreg Clayton     }
12206920b52bSGreg Clayton   }
1221baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBStringList());
12223df9a8dfSCaroline Tice }
12233df9a8dfSCaroline Tice 
1224b9c1b51eSKate Stone uint32_t SBDebugger::GetTerminalWidth() const {
1225baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBDebugger, GetTerminalWidth);
1226baf5664fSJonas Devlieghere 
1227dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetTerminalWidth() : 0);
1228a7015092SGreg Clayton }
1229a7015092SGreg Clayton 
1230b9c1b51eSKate Stone void SBDebugger::SetTerminalWidth(uint32_t term_width) {
1231baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetTerminalWidth, (uint32_t),
1232baf5664fSJonas Devlieghere                      term_width);
1233baf5664fSJonas Devlieghere 
1234a7015092SGreg Clayton   if (m_opaque_sp)
1235a7015092SGreg Clayton     m_opaque_sp->SetTerminalWidth(term_width);
1236a7015092SGreg Clayton }
1237a7015092SGreg Clayton 
1238b9c1b51eSKate Stone const char *SBDebugger::GetPrompt() const {
1239baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetPrompt);
1240baf5664fSJonas Devlieghere 
12415160ce5cSGreg Clayton   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1242ceb6b139SCaroline Tice 
1243ceb6b139SCaroline Tice   if (log)
1244324a1036SSaleem Abdulrasool     log->Printf("SBDebugger(%p)::GetPrompt () => \"%s\"",
1245324a1036SSaleem Abdulrasool                 static_cast<void *>(m_opaque_sp.get()),
1246514d8cd8SZachary Turner                 (m_opaque_sp ? m_opaque_sp->GetPrompt().str().c_str() : ""));
1247ceb6b139SCaroline Tice 
1248514d8cd8SZachary Turner   return (m_opaque_sp ? ConstString(m_opaque_sp->GetPrompt()).GetCString()
1249514d8cd8SZachary Turner                       : nullptr);
1250a7015092SGreg Clayton }
1251a7015092SGreg Clayton 
1252b9c1b51eSKate Stone void SBDebugger::SetPrompt(const char *prompt) {
1253baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetPrompt, (const char *), prompt);
1254baf5664fSJonas Devlieghere 
1255a7015092SGreg Clayton   if (m_opaque_sp)
1256514d8cd8SZachary Turner     m_opaque_sp->SetPrompt(llvm::StringRef::withNullAsEmpty(prompt));
1257a7015092SGreg Clayton }
1258a7015092SGreg Clayton 
12599e046f02SJonas Devlieghere const char *SBDebugger::GetReproducerPath() const {
1260baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetReproducerPath);
1261baf5664fSJonas Devlieghere 
12629e046f02SJonas Devlieghere   return (m_opaque_sp
12639e046f02SJonas Devlieghere               ? ConstString(m_opaque_sp->GetReproducerPath()).GetCString()
12649e046f02SJonas Devlieghere               : nullptr);
12659e046f02SJonas Devlieghere }
12669e046f02SJonas Devlieghere 
1267b9c1b51eSKate Stone ScriptLanguage SBDebugger::GetScriptLanguage() const {
1268baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::ScriptLanguage, SBDebugger,
1269baf5664fSJonas Devlieghere                                    GetScriptLanguage);
1270baf5664fSJonas Devlieghere 
1271dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetScriptLanguage() : eScriptLanguageNone);
1272a7015092SGreg Clayton }
1273a7015092SGreg Clayton 
1274b9c1b51eSKate Stone void SBDebugger::SetScriptLanguage(ScriptLanguage script_lang) {
1275baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetScriptLanguage,
1276baf5664fSJonas Devlieghere                      (lldb::ScriptLanguage), script_lang);
1277baf5664fSJonas Devlieghere 
1278b9c1b51eSKate Stone   if (m_opaque_sp) {
1279a7015092SGreg Clayton     m_opaque_sp->SetScriptLanguage(script_lang);
1280a7015092SGreg Clayton   }
1281af67cecdSGreg Clayton }
1282a7015092SGreg Clayton 
1283b9c1b51eSKate Stone bool SBDebugger::SetUseExternalEditor(bool value) {
1284baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool), value);
1285baf5664fSJonas Devlieghere 
1286dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->SetUseExternalEditor(value) : false);
1287e40e4218SJim Ingham }
1288e40e4218SJim Ingham 
1289b9c1b51eSKate Stone bool SBDebugger::GetUseExternalEditor() {
1290baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetUseExternalEditor);
1291baf5664fSJonas Devlieghere 
1292dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetUseExternalEditor() : false);
1293e40e4218SJim Ingham }
1294e40e4218SJim Ingham 
1295b9c1b51eSKate Stone bool SBDebugger::SetUseColor(bool value) {
1296baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetUseColor, (bool), value);
1297baf5664fSJonas Devlieghere 
1298dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->SetUseColor(value) : false);
1299c3ce7f27SMichael Sartain }
1300c3ce7f27SMichael Sartain 
1301b9c1b51eSKate Stone bool SBDebugger::GetUseColor() const {
1302baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetUseColor);
1303baf5664fSJonas Devlieghere 
1304dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetUseColor() : false);
1305c3ce7f27SMichael Sartain }
1306c3ce7f27SMichael Sartain 
1307b9c1b51eSKate Stone bool SBDebugger::GetDescription(SBStream &description) {
1308baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &),
1309baf5664fSJonas Devlieghere                      description);
1310baf5664fSJonas Devlieghere 
1311da7bc7d0SGreg Clayton   Stream &strm = description.ref();
1312da7bc7d0SGreg Clayton 
1313b9c1b51eSKate Stone   if (m_opaque_sp) {
1314dde9cff3SCaroline Tice     const char *name = m_opaque_sp->GetInstanceName().AsCString();
1315431ce678SGreg Clayton     user_id_t id = m_opaque_sp->GetID();
1316d01b2953SDaniel Malea     strm.Printf("Debugger (instance: \"%s\", id: %" PRIu64 ")", name, id);
1317b9c1b51eSKate Stone   } else
1318da7bc7d0SGreg Clayton     strm.PutCString("No value");
1319dde9cff3SCaroline Tice 
1320dde9cff3SCaroline Tice   return true;
1321dde9cff3SCaroline Tice }
1322efed6131SCaroline Tice 
1323b9c1b51eSKate Stone user_id_t SBDebugger::GetID() {
1324baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::user_id_t, SBDebugger, GetID);
1325baf5664fSJonas Devlieghere 
1326dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetID() : LLDB_INVALID_UID);
1327efed6131SCaroline Tice }
13282289fa48SGreg Clayton 
1329b9c1b51eSKate Stone SBError SBDebugger::SetCurrentPlatform(const char *platform_name_cstr) {
1330baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform,
1331baf5664fSJonas Devlieghere                      (const char *), platform_name_cstr);
1332baf5664fSJonas Devlieghere 
13332289fa48SGreg Clayton   SBError sb_error;
1334b9c1b51eSKate Stone   if (m_opaque_sp) {
1335b9c1b51eSKate Stone     if (platform_name_cstr && platform_name_cstr[0]) {
1336615eb7e6SGreg Clayton       ConstString platform_name(platform_name_cstr);
1337615eb7e6SGreg Clayton       PlatformSP platform_sp(Platform::Find(platform_name));
13382289fa48SGreg Clayton 
1339b9c1b51eSKate Stone       if (platform_sp) {
1340615eb7e6SGreg Clayton         // Already have a platform with this name, just select it
1341615eb7e6SGreg Clayton         m_opaque_sp->GetPlatformList().SetSelectedPlatform(platform_sp);
1342b9c1b51eSKate Stone       } else {
1343615eb7e6SGreg Clayton         // We don't have a platform by this name yet, create one
1344615eb7e6SGreg Clayton         platform_sp = Platform::Create(platform_name, sb_error.ref());
1345b9c1b51eSKate Stone         if (platform_sp) {
1346615eb7e6SGreg Clayton           // We created the platform, now append and select it
13472289fa48SGreg Clayton           bool make_selected = true;
13482289fa48SGreg Clayton           m_opaque_sp->GetPlatformList().Append(platform_sp, make_selected);
13492289fa48SGreg Clayton         }
13502289fa48SGreg Clayton       }
1351b9c1b51eSKate Stone     } else {
1352615eb7e6SGreg Clayton       sb_error.ref().SetErrorString("invalid platform name");
1353615eb7e6SGreg Clayton     }
1354b9c1b51eSKate Stone   } else {
1355615eb7e6SGreg Clayton     sb_error.ref().SetErrorString("invalid debugger");
1356615eb7e6SGreg Clayton   }
1357baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
13582289fa48SGreg Clayton }
13592289fa48SGreg Clayton 
1360b9c1b51eSKate Stone bool SBDebugger::SetCurrentPlatformSDKRoot(const char *sysroot) {
1361baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot,
1362baf5664fSJonas Devlieghere                      (const char *), sysroot);
1363baf5664fSJonas Devlieghere 
1364e1cf274bSJason Molenda   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1365b9c1b51eSKate Stone   if (m_opaque_sp) {
1366b9c1b51eSKate Stone     PlatformSP platform_sp(
1367b9c1b51eSKate Stone         m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1368f3dd93c8SGreg Clayton 
1369b9c1b51eSKate Stone     if (platform_sp) {
1370e1cf274bSJason Molenda       if (log && sysroot)
1371e1cf274bSJason Molenda         log->Printf("SBDebugger::SetCurrentPlatformSDKRoot (\"%s\")", sysroot);
1372f3dd93c8SGreg Clayton       platform_sp->SetSDKRootDirectory(ConstString(sysroot));
1373f3dd93c8SGreg Clayton       return true;
1374f3dd93c8SGreg Clayton     }
1375f3dd93c8SGreg Clayton   }
1376f3dd93c8SGreg Clayton   return false;
1377f3dd93c8SGreg Clayton }
1378f3dd93c8SGreg Clayton 
1379b9c1b51eSKate Stone bool SBDebugger::GetCloseInputOnEOF() const {
1380baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetCloseInputOnEOF);
1381baf5664fSJonas Devlieghere 
1382dbb0abbfSEugene Zelenko   return (m_opaque_sp ? m_opaque_sp->GetCloseInputOnEOF() : false);
1383fc3f027dSGreg Clayton }
1384fc3f027dSGreg Clayton 
1385b9c1b51eSKate Stone void SBDebugger::SetCloseInputOnEOF(bool b) {
1386baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool), b);
1387baf5664fSJonas Devlieghere 
1388fc3f027dSGreg Clayton   if (m_opaque_sp)
1389fc3f027dSGreg Clayton     m_opaque_sp->SetCloseInputOnEOF(b);
1390fc3f027dSGreg Clayton }
1391061858ceSEnrico Granata 
1392b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(const char *category_name) {
1393baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1394baf5664fSJonas Devlieghere                      (const char *), category_name);
1395baf5664fSJonas Devlieghere 
1396061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1397baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1398061858ceSEnrico Granata 
1399061858ceSEnrico Granata   TypeCategoryImplSP category_sp;
1400061858ceSEnrico Granata 
1401b9c1b51eSKate Stone   if (DataVisualization::Categories::GetCategory(ConstString(category_name),
1402baf5664fSJonas Devlieghere                                                  category_sp, false)) {
1403baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1404baf5664fSJonas Devlieghere   } else {
1405baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1406baf5664fSJonas Devlieghere   }
1407061858ceSEnrico Granata }
1408061858ceSEnrico Granata 
1409b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(lldb::LanguageType lang_type) {
1410baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1411baf5664fSJonas Devlieghere                      (lldb::LanguageType), lang_type);
1412baf5664fSJonas Devlieghere 
1413e242624cSEnrico Granata   TypeCategoryImplSP category_sp;
1414baf5664fSJonas Devlieghere   if (DataVisualization::Categories::GetCategory(lang_type, category_sp)) {
1415baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1416baf5664fSJonas Devlieghere   } else {
1417baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1418baf5664fSJonas Devlieghere   }
1419e242624cSEnrico Granata }
1420e242624cSEnrico Granata 
1421b9c1b51eSKate Stone SBTypeCategory SBDebugger::CreateCategory(const char *category_name) {
1422baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory,
1423baf5664fSJonas Devlieghere                      (const char *), category_name);
1424baf5664fSJonas Devlieghere 
1425061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1426baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1427061858ceSEnrico Granata 
1428061858ceSEnrico Granata   TypeCategoryImplSP category_sp;
1429061858ceSEnrico Granata 
1430b9c1b51eSKate Stone   if (DataVisualization::Categories::GetCategory(ConstString(category_name),
1431baf5664fSJonas Devlieghere                                                  category_sp, true)) {
1432baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory(category_sp));
1433baf5664fSJonas Devlieghere   } else {
1434baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeCategory());
1435baf5664fSJonas Devlieghere   }
1436061858ceSEnrico Granata }
1437061858ceSEnrico Granata 
1438b9c1b51eSKate Stone bool SBDebugger::DeleteCategory(const char *category_name) {
1439baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, DeleteCategory, (const char *),
1440baf5664fSJonas Devlieghere                      category_name);
1441baf5664fSJonas Devlieghere 
1442061858ceSEnrico Granata   if (!category_name || *category_name == 0)
1443061858ceSEnrico Granata     return false;
1444061858ceSEnrico Granata 
1445061858ceSEnrico Granata   return DataVisualization::Categories::Delete(ConstString(category_name));
1446061858ceSEnrico Granata }
1447061858ceSEnrico Granata 
1448b9c1b51eSKate Stone uint32_t SBDebugger::GetNumCategories() {
1449baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumCategories);
1450baf5664fSJonas Devlieghere 
1451061858ceSEnrico Granata   return DataVisualization::Categories::GetCount();
1452061858ceSEnrico Granata }
1453061858ceSEnrico Granata 
1454b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategoryAtIndex(uint32_t index) {
1455baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex,
1456baf5664fSJonas Devlieghere                      (uint32_t), index);
1457baf5664fSJonas Devlieghere 
1458baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1459baf5664fSJonas Devlieghere       SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index)));
1460061858ceSEnrico Granata }
1461061858ceSEnrico Granata 
1462b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetDefaultCategory() {
1463baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTypeCategory, SBDebugger,
1464baf5664fSJonas Devlieghere                              GetDefaultCategory);
1465baf5664fSJonas Devlieghere 
1466baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(GetCategory("default"));
1467061858ceSEnrico Granata }
1468061858ceSEnrico Granata 
1469b9c1b51eSKate Stone SBTypeFormat SBDebugger::GetFormatForType(SBTypeNameSpecifier type_name) {
1470baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType,
1471baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1472baf5664fSJonas Devlieghere 
1473061858ceSEnrico Granata   SBTypeCategory default_category_sb = GetDefaultCategory();
1474061858ceSEnrico Granata   if (default_category_sb.GetEnabled())
1475baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(default_category_sb.GetFormatForType(type_name));
1476baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBTypeFormat());
1477061858ceSEnrico Granata }
1478061858ceSEnrico Granata 
1479b9c1b51eSKate Stone SBTypeSummary SBDebugger::GetSummaryForType(SBTypeNameSpecifier type_name) {
1480baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType,
1481baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1482baf5664fSJonas Devlieghere 
1483dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1484baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeSummary());
1485baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1486baf5664fSJonas Devlieghere       SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP())));
1487061858ceSEnrico Granata }
1488061858ceSEnrico Granata 
1489b9c1b51eSKate Stone SBTypeFilter SBDebugger::GetFilterForType(SBTypeNameSpecifier type_name) {
1490baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType,
1491baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1492baf5664fSJonas Devlieghere 
1493dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1494baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeFilter());
1495baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
1496baf5664fSJonas Devlieghere       SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP())));
1497061858ceSEnrico Granata }
1498061858ceSEnrico Granata 
1499b9c1b51eSKate Stone SBTypeSynthetic SBDebugger::GetSyntheticForType(SBTypeNameSpecifier type_name) {
1500baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType,
1501baf5664fSJonas Devlieghere                      (lldb::SBTypeNameSpecifier), type_name);
1502baf5664fSJonas Devlieghere 
1503dbb0abbfSEugene Zelenko   if (!type_name.IsValid())
1504baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBTypeSynthetic());
1505baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBTypeSynthetic(
1506baf5664fSJonas Devlieghere       DataVisualization::GetSyntheticForType(type_name.GetSP())));
1507061858ceSEnrico Granata }
1508061858ceSEnrico Granata 
15095e336903SPavel Labath static llvm::ArrayRef<const char *> GetCategoryArray(const char **categories) {
15105e336903SPavel Labath   if (categories == nullptr)
15115e336903SPavel Labath     return {};
15125e336903SPavel Labath   size_t len = 0;
15135e336903SPavel Labath   while (categories[len] != nullptr)
15145e336903SPavel Labath     ++len;
15155e336903SPavel Labath   return llvm::makeArrayRef(categories, len);
15165e336903SPavel Labath }
15175e336903SPavel Labath 
1518b9c1b51eSKate Stone bool SBDebugger::EnableLog(const char *channel, const char **categories) {
1519baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBDebugger, EnableLog, (const char *, const char **),
1520baf5664fSJonas Devlieghere                      channel, categories);
1521baf5664fSJonas Devlieghere 
1522b9c1b51eSKate Stone   if (m_opaque_sp) {
1523b9c1b51eSKate Stone     uint32_t log_options =
1524b9c1b51eSKate Stone         LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
1525775588c0SPavel Labath     std::string error;
1526775588c0SPavel Labath     llvm::raw_string_ostream error_stream(error);
15275e336903SPavel Labath     return m_opaque_sp->EnableLog(channel, GetCategoryArray(categories), "",
1528775588c0SPavel Labath                                   log_options, error_stream);
1529b9c1b51eSKate Stone   } else
1530228063cdSJim Ingham     return false;
1531228063cdSJim Ingham }
15324f02b22dSJim Ingham 
1533b9c1b51eSKate Stone void SBDebugger::SetLoggingCallback(lldb::LogOutputCallback log_callback,
1534b9c1b51eSKate Stone                                     void *baton) {
15357bc83564SJonas Devlieghere   LLDB_RECORD_DUMMY(void, SBDebugger, SetLoggingCallback,
15367bc83564SJonas Devlieghere                     (lldb::LogOutputCallback, void *), log_callback, baton);
15370d7b0c96SJonas Devlieghere 
1538b9c1b51eSKate Stone   if (m_opaque_sp) {
15394f02b22dSJim Ingham     return m_opaque_sp->SetLoggingCallback(log_callback, baton);
15404f02b22dSJim Ingham   }
15414f02b22dSJim Ingham }
1542ae211eceSMichal Gorny 
1543ae211eceSMichal Gorny namespace lldb_private {
1544ae211eceSMichal Gorny namespace repro {
1545ae211eceSMichal Gorny 
1546ae211eceSMichal Gorny template <>
1547ae211eceSMichal Gorny void RegisterMethods<SBInputReader>(Registry &R) {
1548ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBInputReader, SetIsDone, (bool));
1549ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBInputReader, IsActive, ());
1550ae211eceSMichal Gorny }
1551ae211eceSMichal Gorny 
1552ae211eceSMichal Gorny static void SetFileHandleRedirect(SBDebugger *, FILE *, bool) {
1553ae211eceSMichal Gorny   // Do nothing.
1554ae211eceSMichal Gorny }
1555ae211eceSMichal Gorny 
1556ae211eceSMichal Gorny static bool GetDefaultArchitectureRedirect(char *arch_name,
1557ae211eceSMichal Gorny                                            size_t arch_name_len) {
1558ae211eceSMichal Gorny   // The function is writing to its argument. Without the redirect it would
1559ae211eceSMichal Gorny   // write into the replay buffer.
1560ae211eceSMichal Gorny   char buffer[1024];
1561ae211eceSMichal Gorny   return SBDebugger::GetDefaultArchitecture(buffer, arch_name_len);
1562ae211eceSMichal Gorny }
1563ae211eceSMichal Gorny 
1564ae211eceSMichal Gorny template <>
1565ae211eceSMichal Gorny void RegisterMethods<SBDebugger>(Registry &R) {
1566ae211eceSMichal Gorny   // Custom implementation.
1567ae211eceSMichal Gorny   R.Register(&invoke<void (SBDebugger::*)(
1568ae211eceSMichal Gorny                  FILE *, bool)>::method<&SBDebugger::SetErrorFileHandle>::doit,
1569ae211eceSMichal Gorny              &SetFileHandleRedirect);
1570ae211eceSMichal Gorny   R.Register(&invoke<void (SBDebugger::*)(
1571ae211eceSMichal Gorny                  FILE *, bool)>::method<&SBDebugger::SetOutputFileHandle>::doit,
1572ae211eceSMichal Gorny              &SetFileHandleRedirect);
1573ae211eceSMichal Gorny   R.Register<bool(char *, size_t)>(static_cast<bool (*)(char *, size_t)>(
1574ae211eceSMichal Gorny                                        &SBDebugger::GetDefaultArchitecture),
1575ae211eceSMichal Gorny                                    &GetDefaultArchitectureRedirect);
1576ae211eceSMichal Gorny 
1577ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, ());
1578ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &));
1579ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &));
1580ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBDebugger &,
1581ae211eceSMichal Gorny                        SBDebugger, operator=,(const lldb::SBDebugger &));
1582ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Initialize, ());
1583ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger,
1584ae211eceSMichal Gorny                               InitializeWithErrorHandling, ());
1585ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Terminate, ());
1586ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, Clear, ());
1587ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, ());
1588ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool));
1589ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Destroy,
1590ae211eceSMichal Gorny                               (lldb::SBDebugger &));
1591ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, MemoryPressureDetected, ());
1592ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, IsValid, ());
1593ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, operator bool, ());
1594ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetAsync, (bool));
1595ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetAsync, ());
1596ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool));
1597ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SkipAppInitFiles, (bool));
1598ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool));
1599ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetInputFileHandle, ());
1600ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetOutputFileHandle, ());
1601ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetErrorFileHandle, ());
1602ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SaveInputTerminalState, ());
1603ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RestoreInputTerminalState, ());
1604ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBCommandInterpreter, SBDebugger,
1605ae211eceSMichal Gorny                        GetCommandInterpreter, ());
1606ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, HandleCommand, (const char *));
1607ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBListener, SBDebugger, GetListener, ());
1608ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
1609ae211eceSMichal Gorny       void, SBDebugger, HandleProcessEvent,
1610ae211eceSMichal Gorny       (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *));
1611ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSourceManager, SBDebugger, GetSourceManager,
1612ae211eceSMichal Gorny                        ());
1613ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture,
1614ae211eceSMichal Gorny                               (const char *));
1615ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage,
1616ae211eceSMichal Gorny                        (const char *));
1617ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, GetVersionString, ());
1618ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, StateAsCString,
1619ae211eceSMichal Gorny                               (lldb::StateType));
1620ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBStructuredData, SBDebugger,
1621ae211eceSMichal Gorny                               GetBuildConfiguration, ());
1622ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsRunningState,
1623ae211eceSMichal Gorny                               (lldb::StateType));
1624ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState,
1625ae211eceSMichal Gorny                               (lldb::StateType));
1626ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
1627ae211eceSMichal Gorny       lldb::SBTarget, SBDebugger, CreateTarget,
1628ae211eceSMichal Gorny       (const char *, const char *, const char *, bool, lldb::SBError &));
1629ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger,
1630ae211eceSMichal Gorny                        CreateTargetWithFileAndTargetTriple,
1631ae211eceSMichal Gorny                        (const char *, const char *));
1632ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger,
1633ae211eceSMichal Gorny                        CreateTargetWithFileAndArch,
1634ae211eceSMichal Gorny                        (const char *, const char *));
1635ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, CreateTarget,
1636ae211eceSMichal Gorny                        (const char *));
1637ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetDummyTarget, ());
1638ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &));
1639ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex,
1640ae211eceSMichal Gorny                        (uint32_t));
1641ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetIndexOfTarget,
1642ae211eceSMichal Gorny                        (lldb::SBTarget));
1643ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID,
1644ae211eceSMichal Gorny                        (lldb::pid_t));
1645ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch,
1646ae211eceSMichal Gorny                        (const char *, const char *));
1647ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumTargets, ());
1648ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetSelectedTarget, ());
1649ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedTarget,
1650ae211eceSMichal Gorny                        (lldb::SBTarget &));
1651ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetSelectedPlatform, ());
1652ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedPlatform,
1653ae211eceSMichal Gorny                        (lldb::SBPlatform &));
1654ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumPlatforms, ());
1655ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex,
1656ae211eceSMichal Gorny                        (uint32_t));
1657ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumAvailablePlatforms, ());
1658ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBStructuredData, SBDebugger,
1659ae211eceSMichal Gorny                        GetAvailablePlatformInfoAtIndex, (uint32_t));
1660ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputInterrupt, ());
1661ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputEndOfFile, ());
1662ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, PushInputReader,
1663ae211eceSMichal Gorny                        (lldb::SBInputReader &));
1664ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool));
1665ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter,
1666ae211eceSMichal Gorny                        (bool, bool, lldb::SBCommandInterpreterRunOptions &,
1667ae211eceSMichal Gorny                         int &, bool &, bool &));
1668ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, RunREPL,
1669ae211eceSMichal Gorny                        (lldb::LanguageType, const char *));
1670ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger,
1671ae211eceSMichal Gorny                               FindDebuggerWithID, (int));
1672ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBDebugger, GetInstanceName, ());
1673ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable,
1674ae211eceSMichal Gorny                               (const char *, const char *, const char *));
1675ae211eceSMichal Gorny   LLDB_REGISTER_STATIC_METHOD(lldb::SBStringList, SBDebugger,
1676ae211eceSMichal Gorny                               GetInternalVariableValue,
1677ae211eceSMichal Gorny                               (const char *, const char *));
1678ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBDebugger, GetTerminalWidth, ());
1679ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetTerminalWidth, (uint32_t));
1680ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetPrompt, ());
1681ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetPrompt, (const char *));
1682ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetReproducerPath, ());
1683ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::ScriptLanguage, SBDebugger,
1684ae211eceSMichal Gorny                              GetScriptLanguage, ());
1685ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetScriptLanguage,
1686ae211eceSMichal Gorny                        (lldb::ScriptLanguage));
1687ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool));
1688ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetUseExternalEditor, ());
1689ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseColor, (bool));
1690ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetUseColor, ());
1691ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &));
1692ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::user_id_t, SBDebugger, GetID, ());
1693ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform,
1694ae211eceSMichal Gorny                        (const char *));
1695ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot,
1696ae211eceSMichal Gorny                        (const char *));
1697ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetCloseInputOnEOF, ());
1698ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool));
1699ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1700ae211eceSMichal Gorny                        (const char *));
1701ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory,
1702ae211eceSMichal Gorny                        (lldb::LanguageType));
1703ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory,
1704ae211eceSMichal Gorny                        (const char *));
1705ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteCategory, (const char *));
1706ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumCategories, ());
1707ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex,
1708ae211eceSMichal Gorny                        (uint32_t));
1709ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetDefaultCategory,
1710ae211eceSMichal Gorny                        ());
1711ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType,
1712ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1713ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType,
1714ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1715ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType,
1716ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1717ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType,
1718ae211eceSMichal Gorny                        (lldb::SBTypeNameSpecifier));
1719ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBDebugger, EnableLog,
1720ae211eceSMichal Gorny                        (const char *, const char **));
1721ae211eceSMichal Gorny }
1722ae211eceSMichal Gorny 
1723ae211eceSMichal Gorny }
1724ae211eceSMichal Gorny }
1725