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