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