130fdc8d8SChris Lattner //===-- SBDebugger.cpp ------------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 630fdc8d8SChris Lattner // 730fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 830fdc8d8SChris Lattner 9baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h" 10d17cd902SAlex Langford #include "SystemInitializerFull.h" 11d17cd902SAlex Langford 12ca93cc1dSEli Friedman #include "lldb/API/SBDebugger.h" 1330fdc8d8SChris Lattner 14e0d378b3SGreg Clayton #include "lldb/lldb-private.h" 1530fdc8d8SChris Lattner 16ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h" 17ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h" 18ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h" 192289fa48SGreg Clayton #include "lldb/API/SBError.h" 20ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h" 2196898eb6SLawrence D'Anna #include "lldb/API/SBFile.h" 22ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h" 23b9c1b51eSKate Stone #include "lldb/API/SBListener.h" 243df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h" 253df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h" 26dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 273df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h" 28c10e34d0SVadim Macagon #include "lldb/API/SBStructuredData.h" 293df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h" 303df9a8dfSCaroline Tice #include "lldb/API/SBThread.h" 31061858ceSEnrico Granata #include "lldb/API/SBTypeCategory.h" 32061858ceSEnrico Granata #include "lldb/API/SBTypeFilter.h" 33b9c1b51eSKate Stone #include "lldb/API/SBTypeFormat.h" 34061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h" 35061858ceSEnrico Granata #include "lldb/API/SBTypeSummary.h" 36061858ceSEnrico Granata #include "lldb/API/SBTypeSynthetic.h" 37061858ceSEnrico Granata 386eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h" 39c10e34d0SVadim Macagon #include "lldb/Core/PluginManager.h" 4044d93782SGreg Clayton #include "lldb/Core/StreamFile.h" 41c10e34d0SVadim Macagon #include "lldb/Core/StructuredDataImpl.h" 425548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h" 43f1389e92SPavel Labath #include "lldb/Host/XML.h" 44e6e2bb38SZachary Turner #include "lldb/Initialization/SystemLifetimeManager.h" 456eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h" 4647cbf4a0SPavel Labath #include "lldb/Interpreter/OptionArgParser.h" 47cac9c5f9SGreg Clayton #include "lldb/Interpreter/OptionGroupPlatform.h" 486eee5aa0SGreg Clayton #include "lldb/Target/Process.h" 496eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h" 50145d95c9SPavel Labath #include "lldb/Utility/Args.h" 51d821c997SPavel Labath #include "lldb/Utility/State.h" 5230fdc8d8SChris Lattner 53d717cc9fSEnrico Granata #include "llvm/ADT/STLExtras.h" 547b2e5a36SZachary Turner #include "llvm/ADT/StringRef.h" 5558a559c0SZachary Turner #include "llvm/Support/DynamicLibrary.h" 56b9c1b51eSKate Stone #include "llvm/Support/ManagedStatic.h" 5758a559c0SZachary Turner 5830fdc8d8SChris Lattner using namespace lldb; 5930fdc8d8SChris Lattner using namespace lldb_private; 6030fdc8d8SChris Lattner 61b9c1b51eSKate Stone static llvm::sys::DynamicLibrary LoadPlugin(const lldb::DebuggerSP &debugger_sp, 62b9c1b51eSKate Stone const FileSpec &spec, 6397206d57SZachary Turner Status &error) { 64b9c1b51eSKate Stone llvm::sys::DynamicLibrary dynlib = 65b9c1b51eSKate Stone llvm::sys::DynamicLibrary::getPermanentLibrary(spec.GetPath().c_str()); 66b9c1b51eSKate Stone if (dynlib.isValid()) { 675fb8f797SGreg Clayton typedef bool (*LLDBCommandPluginInit)(lldb::SBDebugger & debugger); 685fb8f797SGreg Clayton 695fb8f797SGreg Clayton lldb::SBDebugger debugger_sb(debugger_sp); 70b9c1b51eSKate Stone // This calls the bool lldb::PluginInitialize(lldb::SBDebugger debugger) 71b9c1b51eSKate Stone // function. 72b9c1b51eSKate Stone // TODO: mangle this differently for your system - on OSX, the first 73b9c1b51eSKate Stone // underscore needs to be removed and the second one stays 74b9c1b51eSKate Stone LLDBCommandPluginInit init_func = 7522701b2fSStephane Sezer (LLDBCommandPluginInit)(uintptr_t)dynlib.getAddressOfSymbol( 76b9c1b51eSKate Stone "_ZN4lldb16PluginInitializeENS_10SBDebuggerE"); 77b9c1b51eSKate Stone if (init_func) { 785fb8f797SGreg Clayton if (init_func(debugger_sb)) 7958a559c0SZachary Turner return dynlib; 805fb8f797SGreg Clayton else 81b9c1b51eSKate Stone error.SetErrorString("plug-in refused to load " 82b9c1b51eSKate Stone "(lldb::PluginInitialize(lldb::SBDebugger) " 83b9c1b51eSKate Stone "returned false)"); 84b9c1b51eSKate Stone } else { 85b9c1b51eSKate Stone error.SetErrorString("plug-in is missing the required initialization: " 86b9c1b51eSKate Stone "lldb::PluginInitialize(lldb::SBDebugger)"); 875fb8f797SGreg Clayton } 88b9c1b51eSKate Stone } else { 89dbd7fabaSJonas Devlieghere if (FileSystem::Instance().Exists(spec)) 905fb8f797SGreg Clayton error.SetErrorString("this file does not represent a loadable dylib"); 915fb8f797SGreg Clayton else 925fb8f797SGreg Clayton error.SetErrorString("no such file"); 935fb8f797SGreg Clayton } 9458a559c0SZachary Turner return llvm::sys::DynamicLibrary(); 955fb8f797SGreg Clayton } 965fb8f797SGreg Clayton 97e6e2bb38SZachary Turner static llvm::ManagedStatic<SystemLifetimeManager> g_debugger_lifetime; 98e6e2bb38SZachary Turner 99b9c1b51eSKate Stone SBError SBInputReader::Initialize( 100b9c1b51eSKate Stone lldb::SBDebugger &sb_debugger, 1010d7b0c96SJonas Devlieghere unsigned long (*callback)(void *, lldb::SBInputReader *, 1020d7b0c96SJonas Devlieghere lldb::InputReaderAction, char const *, 1030d7b0c96SJonas Devlieghere unsigned long), 1040d7b0c96SJonas Devlieghere void *a, lldb::InputReaderGranularity b, char const *c, char const *d, 1050d7b0c96SJonas Devlieghere bool e) { 1067bc83564SJonas Devlieghere LLDB_RECORD_DUMMY( 1077bc83564SJonas Devlieghere lldb::SBError, SBInputReader, Initialize, 1087bc83564SJonas Devlieghere (lldb::SBDebugger &, 1097bc83564SJonas Devlieghere unsigned long (*)(void *, lldb::SBInputReader *, lldb::InputReaderAction, 1107bc83564SJonas Devlieghere const char *, unsigned long), 1117bc83564SJonas Devlieghere void *, lldb::InputReaderGranularity, const char *, const char *, bool), 1120d7b0c96SJonas Devlieghere sb_debugger, callback, a, b, c, d, e); 1130d7b0c96SJonas Devlieghere 114e6e2bb38SZachary Turner return SBError(); 115e6e2bb38SZachary Turner } 116e6e2bb38SZachary Turner 117baf5664fSJonas Devlieghere void SBInputReader::SetIsDone(bool b) { 118baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBInputReader, SetIsDone, (bool), b); 119baf5664fSJonas Devlieghere } 120dbb0abbfSEugene Zelenko 121baf5664fSJonas Devlieghere bool SBInputReader::IsActive() const { 122baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBInputReader, IsActive); 123e6e2bb38SZachary Turner 124baf5664fSJonas Devlieghere return false; 125baf5664fSJonas Devlieghere } 126baf5664fSJonas Devlieghere 127baf5664fSJonas Devlieghere SBDebugger::SBDebugger() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBDebugger); } 128dbb0abbfSEugene Zelenko 129b9c1b51eSKate Stone SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) 130baf5664fSJonas Devlieghere : m_opaque_sp(debugger_sp) { 131baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &), debugger_sp); 132baf5664fSJonas Devlieghere } 133dbb0abbfSEugene Zelenko 134baf5664fSJonas Devlieghere SBDebugger::SBDebugger(const SBDebugger &rhs) : m_opaque_sp(rhs.m_opaque_sp) { 135baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &), rhs); 136baf5664fSJonas Devlieghere } 137dbb0abbfSEugene Zelenko 138dbb0abbfSEugene Zelenko SBDebugger::~SBDebugger() = default; 139dbb0abbfSEugene Zelenko 140b9c1b51eSKate Stone SBDebugger &SBDebugger::operator=(const SBDebugger &rhs) { 141baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBDebugger &, 142baf5664fSJonas Devlieghere SBDebugger, operator=,(const lldb::SBDebugger &), rhs); 143baf5664fSJonas Devlieghere 144b9c1b51eSKate Stone if (this != &rhs) { 145dbb0abbfSEugene Zelenko m_opaque_sp = rhs.m_opaque_sp; 146dbb0abbfSEugene Zelenko } 147306809f2SJonas Devlieghere return LLDB_RECORD_RESULT(*this); 148dbb0abbfSEugene Zelenko } 149dbb0abbfSEugene Zelenko 150b9c1b51eSKate Stone void SBDebugger::Initialize() { 151baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Initialize); 152936c6242SJonas Devlieghere SBError ignored = SBDebugger::InitializeWithErrorHandling(); 15315eacd74SJonas Devlieghere } 15415eacd74SJonas Devlieghere 155936c6242SJonas Devlieghere lldb::SBError SBDebugger::InitializeWithErrorHandling() { 156baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBError, SBDebugger, 157baf5664fSJonas Devlieghere InitializeWithErrorHandling); 158baf5664fSJonas Devlieghere 15915eacd74SJonas Devlieghere SBError error; 16015eacd74SJonas Devlieghere if (auto e = g_debugger_lifetime->Initialize( 161a8f3ae7cSJonas Devlieghere std::make_unique<SystemInitializerFull>(), LoadPlugin)) { 16215eacd74SJonas Devlieghere error.SetError(Status(std::move(e))); 16315eacd74SJonas Devlieghere } 164baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(error); 16530fdc8d8SChris Lattner } 16630fdc8d8SChris Lattner 167baf5664fSJonas Devlieghere void SBDebugger::Terminate() { 168baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, Terminate); 169baf5664fSJonas Devlieghere 170baf5664fSJonas Devlieghere g_debugger_lifetime->Terminate(); 171baf5664fSJonas Devlieghere } 17230fdc8d8SChris Lattner 173b9c1b51eSKate Stone void SBDebugger::Clear() { 174baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, Clear); 175baf5664fSJonas Devlieghere 1763d6086f6SCaroline Tice if (m_opaque_sp) 17744d93782SGreg Clayton m_opaque_sp->ClearIOHandlers(); 178ceb6b139SCaroline Tice 17948e42549SGreg Clayton m_opaque_sp.reset(); 18048e42549SGreg Clayton } 18148e42549SGreg Clayton 182b9c1b51eSKate Stone SBDebugger SBDebugger::Create() { 183baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBDebugger, SBDebugger, Create); 184baf5664fSJonas Devlieghere 185baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBDebugger::Create(false, nullptr, nullptr)); 18606942690SJim Ingham } 18706942690SJim Ingham 188b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files) { 189baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool), 190baf5664fSJonas Devlieghere source_init_files); 191baf5664fSJonas Devlieghere 192baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT( 193baf5664fSJonas Devlieghere SBDebugger::Create(source_init_files, nullptr, nullptr)); 194228063cdSJim Ingham } 195228063cdSJim Ingham 196b9c1b51eSKate Stone SBDebugger SBDebugger::Create(bool source_init_files, 197b9c1b51eSKate Stone lldb::LogOutputCallback callback, void *baton) 198228063cdSJim Ingham 199228063cdSJim Ingham { 2000d7b0c96SJonas Devlieghere LLDB_RECORD_DUMMY(lldb::SBDebugger, SBDebugger, Create, 2017bc83564SJonas Devlieghere (bool, lldb::LogOutputCallback, void *), source_init_files, 2027bc83564SJonas Devlieghere callback, baton); 203ceb6b139SCaroline Tice 2046611103cSGreg Clayton SBDebugger debugger; 205cb172b10SGreg Clayton 206b9c1b51eSKate Stone // Currently we have issues if this function is called simultaneously on two 20705097246SAdrian Prantl // different threads. The issues mainly revolve around the fact that the 20805097246SAdrian Prantl // lldb_private::FormatManager uses global collections and having two threads 20905097246SAdrian Prantl // parsing the .lldbinit files can cause mayhem. So to get around this for 21005097246SAdrian Prantl // now we need to use a mutex to prevent bad things from happening. 21116ff8604SSaleem Abdulrasool static std::recursive_mutex g_mutex; 21216ff8604SSaleem Abdulrasool std::lock_guard<std::recursive_mutex> guard(g_mutex); 213cb172b10SGreg Clayton 214228063cdSJim Ingham debugger.reset(Debugger::CreateInstance(callback, baton)); 215ceb6b139SCaroline Tice 21606942690SJim Ingham SBCommandInterpreter interp = debugger.GetCommandInterpreter(); 217b9c1b51eSKate Stone if (source_init_files) { 21806942690SJim Ingham interp.get()->SkipLLDBInitFiles(false); 21906942690SJim Ingham interp.get()->SkipAppInitFiles(false); 22006942690SJim Ingham SBCommandReturnObject result; 22106942690SJim Ingham interp.SourceInitFileInHomeDirectory(result); 222b9c1b51eSKate Stone } else { 22306942690SJim Ingham interp.get()->SkipLLDBInitFiles(true); 22406942690SJim Ingham interp.get()->SkipAppInitFiles(true); 22506942690SJim Ingham } 2266611103cSGreg Clayton return debugger; 2276611103cSGreg Clayton } 2286611103cSGreg Clayton 229b9c1b51eSKate Stone void SBDebugger::Destroy(SBDebugger &debugger) { 230baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD(void, SBDebugger, Destroy, (lldb::SBDebugger &), 231baf5664fSJonas Devlieghere debugger); 232baf5664fSJonas Devlieghere 233e02657b1SCaroline Tice Debugger::Destroy(debugger.m_opaque_sp); 234e02657b1SCaroline Tice 235dbb0abbfSEugene Zelenko if (debugger.m_opaque_sp.get() != nullptr) 236e02657b1SCaroline Tice debugger.m_opaque_sp.reset(); 237e02657b1SCaroline Tice } 238e02657b1SCaroline Tice 239b9c1b51eSKate Stone void SBDebugger::MemoryPressureDetected() { 240baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBDebugger, MemoryPressureDetected); 241baf5664fSJonas Devlieghere 24205097246SAdrian Prantl // Since this function can be call asynchronously, we allow it to be non- 24305097246SAdrian Prantl // mandatory. We have seen deadlocks with this function when called so we 24405097246SAdrian Prantl // need to safeguard against this until we can determine what is causing the 24505097246SAdrian Prantl // deadlocks. 246aebdf1beSJim Ingham 2470cd70866SGreg Clayton const bool mandatory = false; 248aebdf1beSJim Ingham 2490cd70866SGreg Clayton ModuleList::RemoveOrphanSharedModules(mandatory); 250f9322415SGreg Clayton } 251f9322415SGreg Clayton 252baf5664fSJonas Devlieghere bool SBDebugger::IsValid() const { 253baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, IsValid); 2547f5237bcSPavel Labath return this->operator bool(); 2557f5237bcSPavel Labath } 2567f5237bcSPavel Labath SBDebugger::operator bool() const { 2577f5237bcSPavel Labath LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, operator bool); 258baf5664fSJonas Devlieghere 259baf5664fSJonas Devlieghere return m_opaque_sp.get() != nullptr; 260baf5664fSJonas Devlieghere } 2616611103cSGreg Clayton 262b9c1b51eSKate Stone void SBDebugger::SetAsync(bool b) { 263baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SetAsync, (bool), b); 264baf5664fSJonas Devlieghere 2656611103cSGreg Clayton if (m_opaque_sp) 2666611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 26730fdc8d8SChris Lattner } 26830fdc8d8SChris Lattner 269b9c1b51eSKate Stone bool SBDebugger::GetAsync() { 270baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetAsync); 271baf5664fSJonas Devlieghere 272dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->GetAsyncExecution() : false); 273e64f0dc7SJim Ingham } 274e64f0dc7SJim Ingham 275b9c1b51eSKate Stone void SBDebugger::SkipLLDBInitFiles(bool b) { 276baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool), b); 277baf5664fSJonas Devlieghere 2786eee5aa0SGreg Clayton if (m_opaque_sp) 2796eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles(b); 2806eee5aa0SGreg Clayton } 2816eee5aa0SGreg Clayton 282b9c1b51eSKate Stone void SBDebugger::SkipAppInitFiles(bool b) { 283baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SkipAppInitFiles, (bool), b); 284baf5664fSJonas Devlieghere 28516e0c686SJim Ingham if (m_opaque_sp) 28616e0c686SJim Ingham m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles(b); 28716e0c686SJim Ingham } 28816e0c686SJim Ingham 289b9c1b51eSKate Stone void SBDebugger::SetInputFileHandle(FILE *fh, bool transfer_ownership) { 290baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool), fh, 291baf5664fSJonas Devlieghere transfer_ownership); 292f913fd6eSLawrence D'Anna SetInputFile((FileSP)std::make_shared<NativeFile>(fh, transfer_ownership)); 29396898eb6SLawrence D'Anna } 294baf5664fSJonas Devlieghere 295c040b30fSLawrence D'Anna SBError SBDebugger::SetInputFile(FileSP file_sp) { 296c040b30fSLawrence D'Anna LLDB_RECORD_METHOD(SBError, SBDebugger, SetInputFile, (FileSP), file_sp); 297*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(SetInputFile(SBFile(file_sp))); 298c040b30fSLawrence D'Anna } 299c040b30fSLawrence D'Anna 30096898eb6SLawrence D'Anna // Shouldn't really be settable after initialization as this could cause lots 30196898eb6SLawrence D'Anna // of problems; don't want users trying to switch modes in the middle of a 30296898eb6SLawrence D'Anna // debugging session. 30396898eb6SLawrence D'Anna SBError SBDebugger::SetInputFile(SBFile file) { 30496898eb6SLawrence D'Anna LLDB_RECORD_METHOD(SBError, SBDebugger, SetInputFile, (SBFile), file); 30596898eb6SLawrence D'Anna 30696898eb6SLawrence D'Anna SBError error; 30796898eb6SLawrence D'Anna if (!m_opaque_sp) { 30896898eb6SLawrence D'Anna error.ref().SetErrorString("invalid debugger"); 309*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(error); 31096898eb6SLawrence D'Anna } 311d77c2e09SJonas Devlieghere 312d77c2e09SJonas Devlieghere repro::DataRecorder *recorder = nullptr; 313d77c2e09SJonas Devlieghere if (repro::Generator *g = repro::Reproducer::Instance().GetGenerator()) 314d77c2e09SJonas Devlieghere recorder = g->GetOrCreate<repro::CommandProvider>().GetNewDataRecorder(); 315d77c2e09SJonas Devlieghere 31696898eb6SLawrence D'Anna FileSP file_sp = file.m_opaque_sp; 31796898eb6SLawrence D'Anna 3184a491ec4SJonas Devlieghere static std::unique_ptr<repro::CommandLoader> loader = 3194a491ec4SJonas Devlieghere repro::CommandLoader::Create(repro::Reproducer::Instance().GetLoader()); 3204a491ec4SJonas Devlieghere if (loader) { 32196898eb6SLawrence D'Anna llvm::Optional<std::string> nextfile = loader->GetNextFile(); 32296898eb6SLawrence D'Anna FILE *fh = nextfile ? FileSystem::Instance().Fopen(nextfile->c_str(), "r") 32396898eb6SLawrence D'Anna : nullptr; 32496898eb6SLawrence D'Anna // FIXME Jonas Devlieghere: shouldn't this error be propagated out to the 32596898eb6SLawrence D'Anna // reproducer somehow if fh is NULL? 32696898eb6SLawrence D'Anna if (fh) { 327f913fd6eSLawrence D'Anna file_sp = std::make_shared<NativeFile>(fh, true); 32896898eb6SLawrence D'Anna } 3294a491ec4SJonas Devlieghere } 330d77c2e09SJonas Devlieghere 33196898eb6SLawrence D'Anna if (!file_sp || !file_sp->IsValid()) { 33296898eb6SLawrence D'Anna error.ref().SetErrorString("invalid file"); 333*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(error); 33496898eb6SLawrence D'Anna } 33596898eb6SLawrence D'Anna 33696898eb6SLawrence D'Anna m_opaque_sp->SetInputFile(file_sp, recorder); 337*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(error); 33830fdc8d8SChris Lattner } 33930fdc8d8SChris Lattner 340c040b30fSLawrence D'Anna SBError SBDebugger::SetOutputFile(FileSP file_sp) { 341c040b30fSLawrence D'Anna LLDB_RECORD_METHOD(SBError, SBDebugger, SetOutputFile, (FileSP), file_sp); 342*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(SetOutputFile(SBFile(file_sp))); 343c040b30fSLawrence D'Anna } 344c040b30fSLawrence D'Anna 345b9c1b51eSKate Stone void SBDebugger::SetOutputFileHandle(FILE *fh, bool transfer_ownership) { 346baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SetOutputFileHandle, (FILE *, bool), fh, 347baf5664fSJonas Devlieghere transfer_ownership); 348f913fd6eSLawrence D'Anna SetOutputFile((FileSP)std::make_shared<NativeFile>(fh, transfer_ownership)); 34996898eb6SLawrence D'Anna } 350baf5664fSJonas Devlieghere 35196898eb6SLawrence D'Anna SBError SBDebugger::SetOutputFile(SBFile file) { 35296898eb6SLawrence D'Anna LLDB_RECORD_METHOD(SBError, SBDebugger, SetOutputFile, (SBFile file), file); 35396898eb6SLawrence D'Anna SBError error; 35496898eb6SLawrence D'Anna if (!m_opaque_sp) { 35596898eb6SLawrence D'Anna error.ref().SetErrorString("invalid debugger"); 356*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(error); 35796898eb6SLawrence D'Anna } 35896898eb6SLawrence D'Anna if (!file) { 35996898eb6SLawrence D'Anna error.ref().SetErrorString("invalid file"); 360*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(error); 36196898eb6SLawrence D'Anna } 36296898eb6SLawrence D'Anna m_opaque_sp->SetOutputFile(file.m_opaque_sp); 363*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(error); 36430fdc8d8SChris Lattner } 36530fdc8d8SChris Lattner 366b9c1b51eSKate Stone void SBDebugger::SetErrorFileHandle(FILE *fh, bool transfer_ownership) { 367baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SetErrorFileHandle, (FILE *, bool), fh, 368baf5664fSJonas Devlieghere transfer_ownership); 369f913fd6eSLawrence D'Anna SetErrorFile((FileSP)std::make_shared<NativeFile>(fh, transfer_ownership)); 37096898eb6SLawrence D'Anna } 371baf5664fSJonas Devlieghere 372c040b30fSLawrence D'Anna SBError SBDebugger::SetErrorFile(FileSP file_sp) { 373c040b30fSLawrence D'Anna LLDB_RECORD_METHOD(SBError, SBDebugger, SetErrorFile, (FileSP), file_sp); 374*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(SetErrorFile(SBFile(file_sp))); 375c040b30fSLawrence D'Anna } 376c040b30fSLawrence D'Anna 37796898eb6SLawrence D'Anna SBError SBDebugger::SetErrorFile(SBFile file) { 37896898eb6SLawrence D'Anna LLDB_RECORD_METHOD(SBError, SBDebugger, SetErrorFile, (SBFile file), file); 37996898eb6SLawrence D'Anna SBError error; 38096898eb6SLawrence D'Anna if (!m_opaque_sp) { 38196898eb6SLawrence D'Anna error.ref().SetErrorString("invalid debugger"); 382*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(error); 38396898eb6SLawrence D'Anna } 38496898eb6SLawrence D'Anna if (!file) { 38596898eb6SLawrence D'Anna error.ref().SetErrorString("invalid file"); 386*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(error); 38796898eb6SLawrence D'Anna } 38896898eb6SLawrence D'Anna m_opaque_sp->SetErrorFile(file.m_opaque_sp); 389*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(error); 39030fdc8d8SChris Lattner } 39130fdc8d8SChris Lattner 392b9c1b51eSKate Stone FILE *SBDebugger::GetInputFileHandle() { 393baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetInputFileHandle); 394b9c1b51eSKate Stone if (m_opaque_sp) { 3957ca15ba7SLawrence D'Anna File &file_sp = m_opaque_sp->GetInputFile(); 3967ca15ba7SLawrence D'Anna return LLDB_RECORD_RESULT(file_sp.GetStream()); 39744d93782SGreg Clayton } 398*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(nullptr); 39930fdc8d8SChris Lattner } 40030fdc8d8SChris Lattner 40196898eb6SLawrence D'Anna SBFile SBDebugger::GetInputFile() { 40296898eb6SLawrence D'Anna LLDB_RECORD_METHOD_NO_ARGS(SBFile, SBDebugger, GetInputFile); 40396898eb6SLawrence D'Anna if (m_opaque_sp) { 40496898eb6SLawrence D'Anna return LLDB_RECORD_RESULT(SBFile(m_opaque_sp->GetInputFileSP())); 40596898eb6SLawrence D'Anna } 40696898eb6SLawrence D'Anna return LLDB_RECORD_RESULT(SBFile()); 40796898eb6SLawrence D'Anna } 40896898eb6SLawrence D'Anna 409b9c1b51eSKate Stone FILE *SBDebugger::GetOutputFileHandle() { 410baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetOutputFileHandle); 411b9c1b51eSKate Stone if (m_opaque_sp) { 4127ca15ba7SLawrence D'Anna StreamFile &stream_file = m_opaque_sp->GetOutputStream(); 4137ca15ba7SLawrence D'Anna return LLDB_RECORD_RESULT(stream_file.GetFile().GetStream()); 41444d93782SGreg Clayton } 415*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(nullptr); 41630fdc8d8SChris Lattner } 41730fdc8d8SChris Lattner 41896898eb6SLawrence D'Anna SBFile SBDebugger::GetOutputFile() { 41996898eb6SLawrence D'Anna LLDB_RECORD_METHOD_NO_ARGS(SBFile, SBDebugger, GetOutputFile); 42096898eb6SLawrence D'Anna if (m_opaque_sp) { 42196898eb6SLawrence D'Anna SBFile file(m_opaque_sp->GetOutputStream().GetFileSP()); 42296898eb6SLawrence D'Anna return LLDB_RECORD_RESULT(file); 42396898eb6SLawrence D'Anna } 42496898eb6SLawrence D'Anna return LLDB_RECORD_RESULT(SBFile()); 42596898eb6SLawrence D'Anna } 42696898eb6SLawrence D'Anna 427b9c1b51eSKate Stone FILE *SBDebugger::GetErrorFileHandle() { 428baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(FILE *, SBDebugger, GetErrorFileHandle); 429baf5664fSJonas Devlieghere 430b9c1b51eSKate Stone if (m_opaque_sp) { 4317ca15ba7SLawrence D'Anna StreamFile &stream_file = m_opaque_sp->GetErrorStream(); 4327ca15ba7SLawrence D'Anna return LLDB_RECORD_RESULT(stream_file.GetFile().GetStream()); 43344d93782SGreg Clayton } 434*fe5ab6d2SJonas Devlieghere return LLDB_RECORD_RESULT(nullptr); 43530fdc8d8SChris Lattner } 43630fdc8d8SChris Lattner 43796898eb6SLawrence D'Anna SBFile SBDebugger::GetErrorFile() { 43896898eb6SLawrence D'Anna LLDB_RECORD_METHOD_NO_ARGS(SBFile, SBDebugger, GetErrorFile); 43996898eb6SLawrence D'Anna SBFile file; 44096898eb6SLawrence D'Anna if (m_opaque_sp) { 44196898eb6SLawrence D'Anna SBFile file(m_opaque_sp->GetErrorStream().GetFileSP()); 44296898eb6SLawrence D'Anna return LLDB_RECORD_RESULT(file); 44396898eb6SLawrence D'Anna } 44496898eb6SLawrence D'Anna return LLDB_RECORD_RESULT(SBFile()); 44596898eb6SLawrence D'Anna } 44696898eb6SLawrence D'Anna 447b9c1b51eSKate Stone void SBDebugger::SaveInputTerminalState() { 448b328dcbfSJonas Devlieghere LLDB_RECORD_DUMMY_NO_ARGS(void, SBDebugger, SaveInputTerminalState); 449baf5664fSJonas Devlieghere 450c5917d9aSJim Ingham if (m_opaque_sp) 451c5917d9aSJim Ingham m_opaque_sp->SaveInputTerminalState(); 452c5917d9aSJim Ingham } 453c5917d9aSJim Ingham 454b9c1b51eSKate Stone void SBDebugger::RestoreInputTerminalState() { 455b328dcbfSJonas Devlieghere LLDB_RECORD_DUMMY_NO_ARGS(void, SBDebugger, RestoreInputTerminalState); 456baf5664fSJonas Devlieghere 457c5917d9aSJim Ingham if (m_opaque_sp) 458c5917d9aSJim Ingham m_opaque_sp->RestoreInputTerminalState(); 459c5917d9aSJim Ingham } 460b9c1b51eSKate Stone SBCommandInterpreter SBDebugger::GetCommandInterpreter() { 461baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBCommandInterpreter, SBDebugger, 462baf5664fSJonas Devlieghere GetCommandInterpreter); 463baf5664fSJonas Devlieghere 4646611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 4656611103cSGreg Clayton if (m_opaque_sp) 4666611103cSGreg Clayton sb_interpreter.reset(&m_opaque_sp->GetCommandInterpreter()); 467ceb6b139SCaroline Tice 468baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_interpreter); 46930fdc8d8SChris Lattner } 47030fdc8d8SChris Lattner 471b9c1b51eSKate Stone void SBDebugger::HandleCommand(const char *command) { 472baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, HandleCommand, (const char *), command); 473baf5664fSJonas Devlieghere 474b9c1b51eSKate Stone if (m_opaque_sp) { 475af67cecdSGreg Clayton TargetSP target_sp(m_opaque_sp->GetSelectedTarget()); 476bb19a13cSSaleem Abdulrasool std::unique_lock<std::recursive_mutex> lock; 477af67cecdSGreg Clayton if (target_sp) 478bb19a13cSSaleem Abdulrasool lock = std::unique_lock<std::recursive_mutex>(target_sp->GetAPIMutex()); 479af67cecdSGreg Clayton 4806611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter()); 48130fdc8d8SChris Lattner SBCommandReturnObject result; 48230fdc8d8SChris Lattner 48330fdc8d8SChris Lattner sb_interpreter.HandleCommand(command, result, false); 48430fdc8d8SChris Lattner 4855da2bc22SLawrence D'Anna result.PutError(m_opaque_sp->GetErrorStream().GetFileSP()); 4865da2bc22SLawrence D'Anna result.PutOutput(m_opaque_sp->GetOutputStream().GetFileSP()); 48730fdc8d8SChris Lattner 488b9c1b51eSKate Stone if (!m_opaque_sp->GetAsyncExecution()) { 4896611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess()); 490b9556accSGreg Clayton ProcessSP process_sp(process.GetSP()); 491b9c1b51eSKate Stone if (process_sp) { 49230fdc8d8SChris Lattner EventSP event_sp; 493583bbb1dSJim Ingham ListenerSP lldb_listener_sp = m_opaque_sp->GetListener(); 494d35031e1SPavel Labath while (lldb_listener_sp->GetEventForBroadcaster( 495d35031e1SPavel Labath process_sp.get(), event_sp, std::chrono::seconds(0))) { 49630fdc8d8SChris Lattner SBEvent event(event_sp); 497322f12afSLawrence D'Anna HandleProcessEvent(process, event, GetOutputFile(), GetErrorFile()); 49830fdc8d8SChris Lattner } 49930fdc8d8SChris Lattner } 50030fdc8d8SChris Lattner } 50130fdc8d8SChris Lattner } 5026611103cSGreg Clayton } 50330fdc8d8SChris Lattner 504b9c1b51eSKate Stone SBListener SBDebugger::GetListener() { 505baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBListener, SBDebugger, GetListener); 506baf5664fSJonas Devlieghere 5076611103cSGreg Clayton SBListener sb_listener; 5086611103cSGreg Clayton if (m_opaque_sp) 509583bbb1dSJim Ingham sb_listener.reset(m_opaque_sp->GetListener()); 510ceb6b139SCaroline Tice 511baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_listener); 51230fdc8d8SChris Lattner } 51330fdc8d8SChris Lattner 514b9c1b51eSKate Stone void SBDebugger::HandleProcessEvent(const SBProcess &process, 515322f12afSLawrence D'Anna const SBEvent &event, SBFile out, 516322f12afSLawrence D'Anna SBFile err) { 517322f12afSLawrence D'Anna LLDB_RECORD_METHOD( 518322f12afSLawrence D'Anna void, SBDebugger, HandleProcessEvent, 519322f12afSLawrence D'Anna (const lldb::SBProcess &, const lldb::SBEvent &, SBFile, SBFile), process, 520322f12afSLawrence D'Anna event, out, err); 521322f12afSLawrence D'Anna 522322f12afSLawrence D'Anna return HandleProcessEvent(process, event, out.m_opaque_sp, err.m_opaque_sp); 523322f12afSLawrence D'Anna } 524322f12afSLawrence D'Anna 525322f12afSLawrence D'Anna void SBDebugger::HandleProcessEvent(const SBProcess &process, 526b9c1b51eSKate Stone const SBEvent &event, FILE *out, 527b9c1b51eSKate Stone FILE *err) { 528baf5664fSJonas Devlieghere LLDB_RECORD_METHOD( 529baf5664fSJonas Devlieghere void, SBDebugger, HandleProcessEvent, 530baf5664fSJonas Devlieghere (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *), process, 531baf5664fSJonas Devlieghere event, out, err); 532baf5664fSJonas Devlieghere 533322f12afSLawrence D'Anna FileSP outfile = std::make_shared<NativeFile>(out, false); 534322f12afSLawrence D'Anna FileSP errfile = std::make_shared<NativeFile>(err, false); 535322f12afSLawrence D'Anna return HandleProcessEvent(process, event, outfile, errfile); 536322f12afSLawrence D'Anna } 537322f12afSLawrence D'Anna 538322f12afSLawrence D'Anna void SBDebugger::HandleProcessEvent(const SBProcess &process, 539322f12afSLawrence D'Anna const SBEvent &event, FileSP out_sp, 540322f12afSLawrence D'Anna FileSP err_sp) { 541322f12afSLawrence D'Anna 542322f12afSLawrence D'Anna LLDB_RECORD_METHOD( 543322f12afSLawrence D'Anna void, SBDebugger, HandleProcessEvent, 544322f12afSLawrence D'Anna (const lldb::SBProcess &, const lldb::SBEvent &, FileSP, FileSP), process, 545322f12afSLawrence D'Anna event, out_sp, err_sp); 546322f12afSLawrence D'Anna 547af67cecdSGreg Clayton if (!process.IsValid()) 548af67cecdSGreg Clayton return; 549af67cecdSGreg Clayton 550b9556accSGreg Clayton TargetSP target_sp(process.GetTarget().GetSP()); 551b9556accSGreg Clayton if (!target_sp) 552b9556accSGreg Clayton return; 553b9556accSGreg Clayton 55430fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 55530fdc8d8SChris Lattner char stdio_buffer[1024]; 55630fdc8d8SChris Lattner size_t len; 55730fdc8d8SChris Lattner 558bb19a13cSSaleem Abdulrasool std::lock_guard<std::recursive_mutex> guard(target_sp->GetAPIMutex()); 559af67cecdSGreg Clayton 560b9c1b51eSKate Stone if (event_type & 561b9c1b51eSKate Stone (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) { 562af67cecdSGreg Clayton // Drain stdout when we stop just in case we have any bytes 56330fdc8d8SChris Lattner while ((len = process.GetSTDOUT(stdio_buffer, sizeof(stdio_buffer))) > 0) 564322f12afSLawrence D'Anna if (out_sp) 565322f12afSLawrence D'Anna out_sp->Write(stdio_buffer, len); 56630fdc8d8SChris Lattner } 567af67cecdSGreg Clayton 568b9c1b51eSKate Stone if (event_type & 569b9c1b51eSKate Stone (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) { 570af67cecdSGreg Clayton // Drain stderr when we stop just in case we have any bytes 57130fdc8d8SChris Lattner while ((len = process.GetSTDERR(stdio_buffer, sizeof(stdio_buffer))) > 0) 572322f12afSLawrence D'Anna if (err_sp) 573322f12afSLawrence D'Anna err_sp->Write(stdio_buffer, len); 57430fdc8d8SChris Lattner } 575af67cecdSGreg Clayton 576b9c1b51eSKate Stone if (event_type & Process::eBroadcastBitStateChanged) { 57730fdc8d8SChris Lattner StateType event_state = SBProcess::GetStateFromEvent(event); 57830fdc8d8SChris Lattner 57930fdc8d8SChris Lattner if (event_state == eStateInvalid) 58030fdc8d8SChris Lattner return; 58130fdc8d8SChris Lattner 58230fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState(event_state); 58330fdc8d8SChris Lattner if (!is_stopped) 584322f12afSLawrence D'Anna process.ReportEventState(event, out_sp); 58530fdc8d8SChris Lattner } 58630fdc8d8SChris Lattner } 58730fdc8d8SChris Lattner 588b9c1b51eSKate Stone SBSourceManager SBDebugger::GetSourceManager() { 589baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBSourceManager, SBDebugger, 590baf5664fSJonas Devlieghere GetSourceManager); 591baf5664fSJonas Devlieghere 592e37d605eSJim Ingham SBSourceManager sb_source_manager(*this); 593baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_source_manager); 59430fdc8d8SChris Lattner } 59530fdc8d8SChris Lattner 596b9c1b51eSKate Stone bool SBDebugger::GetDefaultArchitecture(char *arch_name, size_t arch_name_len) { 597baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, GetDefaultArchitecture, 598baf5664fSJonas Devlieghere (char *, size_t), "", arch_name_len); 599baf5664fSJonas Devlieghere 600b9c1b51eSKate Stone if (arch_name && arch_name_len) { 601431ce678SGreg Clayton ArchSpec default_arch = Target::GetDefaultArchitecture(); 602daccaa9eSCaroline Tice 603b9c1b51eSKate Stone if (default_arch.IsValid()) { 604431ce678SGreg Clayton const std::string &triple_str = default_arch.GetTriple().str(); 605431ce678SGreg Clayton if (!triple_str.empty()) 606431ce678SGreg Clayton ::snprintf(arch_name, arch_name_len, "%s", triple_str.c_str()); 607431ce678SGreg Clayton else 608b9c1b51eSKate Stone ::snprintf(arch_name, arch_name_len, "%s", 609b9c1b51eSKate Stone default_arch.GetArchitectureName()); 61030fdc8d8SChris Lattner return true; 61130fdc8d8SChris Lattner } 61230fdc8d8SChris Lattner } 61330fdc8d8SChris Lattner if (arch_name && arch_name_len) 61430fdc8d8SChris Lattner arch_name[0] = '\0'; 61530fdc8d8SChris Lattner return false; 61630fdc8d8SChris Lattner } 61730fdc8d8SChris Lattner 618b9c1b51eSKate Stone bool SBDebugger::SetDefaultArchitecture(const char *arch_name) { 619baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture, 620baf5664fSJonas Devlieghere (const char *), arch_name); 621baf5664fSJonas Devlieghere 622b9c1b51eSKate Stone if (arch_name) { 62370512317SGreg Clayton ArchSpec arch(arch_name); 624b9c1b51eSKate Stone if (arch.IsValid()) { 625431ce678SGreg Clayton Target::SetDefaultArchitecture(arch); 62630fdc8d8SChris Lattner return true; 62730fdc8d8SChris Lattner } 62830fdc8d8SChris Lattner } 62930fdc8d8SChris Lattner return false; 63030fdc8d8SChris Lattner } 63130fdc8d8SChris Lattner 63230fdc8d8SChris Lattner ScriptLanguage 633b9c1b51eSKate Stone SBDebugger::GetScriptingLanguage(const char *script_language_name) { 634baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage, 635baf5664fSJonas Devlieghere (const char *), script_language_name); 636baf5664fSJonas Devlieghere 637d9aec34bSJonas Devlieghere if (!script_language_name) 638d9aec34bSJonas Devlieghere return eScriptLanguageDefault; 63947cbf4a0SPavel Labath return OptionArgParser::ToScriptLanguage( 64047cbf4a0SPavel Labath llvm::StringRef(script_language_name), eScriptLanguageDefault, nullptr); 64130fdc8d8SChris Lattner } 64230fdc8d8SChris Lattner 643b9c1b51eSKate Stone const char *SBDebugger::GetVersionString() { 644baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD_NO_ARGS(const char *, SBDebugger, GetVersionString); 645baf5664fSJonas Devlieghere 646b2f1fb29SVirgile Bello return lldb_private::GetVersion(); 64730fdc8d8SChris Lattner } 64830fdc8d8SChris Lattner 649b9c1b51eSKate Stone const char *SBDebugger::StateAsCString(StateType state) { 650baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD(const char *, SBDebugger, StateAsCString, 651baf5664fSJonas Devlieghere (lldb::StateType), state); 652baf5664fSJonas Devlieghere 653c2bbb49aSCaroline Tice return lldb_private::StateAsCString(state); 65430fdc8d8SChris Lattner } 65530fdc8d8SChris Lattner 656f1389e92SPavel Labath static void AddBoolConfigEntry(StructuredData::Dictionary &dict, 657f1389e92SPavel Labath llvm::StringRef name, bool value, 658f1389e92SPavel Labath llvm::StringRef description) { 659a8f3ae7cSJonas Devlieghere auto entry_up = std::make_unique<StructuredData::Dictionary>(); 660f1389e92SPavel Labath entry_up->AddBooleanItem("value", value); 661f1389e92SPavel Labath entry_up->AddStringItem("description", description); 662f1389e92SPavel Labath dict.AddItem(name, std::move(entry_up)); 663f1389e92SPavel Labath } 664f1389e92SPavel Labath 665abc0c6adSPavel Labath static void AddLLVMTargets(StructuredData::Dictionary &dict) { 666a8f3ae7cSJonas Devlieghere auto array_up = std::make_unique<StructuredData::Array>(); 667abc0c6adSPavel Labath #define LLVM_TARGET(target) \ 668a8f3ae7cSJonas Devlieghere array_up->AddItem(std::make_unique<StructuredData::String>(#target)); 669abc0c6adSPavel Labath #include "llvm/Config/Targets.def" 670a8f3ae7cSJonas Devlieghere auto entry_up = std::make_unique<StructuredData::Dictionary>(); 671abc0c6adSPavel Labath entry_up->AddItem("value", std::move(array_up)); 672abc0c6adSPavel Labath entry_up->AddStringItem("description", "A list of configured LLVM targets."); 673abc0c6adSPavel Labath dict.AddItem("targets", std::move(entry_up)); 674abc0c6adSPavel Labath } 675abc0c6adSPavel Labath 676f1389e92SPavel Labath SBStructuredData SBDebugger::GetBuildConfiguration() { 677baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBStructuredData, SBDebugger, 678baf5664fSJonas Devlieghere GetBuildConfiguration); 679baf5664fSJonas Devlieghere 680a8f3ae7cSJonas Devlieghere auto config_up = std::make_unique<StructuredData::Dictionary>(); 681f1389e92SPavel Labath AddBoolConfigEntry( 682f1389e92SPavel Labath *config_up, "xml", XMLDocument::XMLEnabled(), 683f1389e92SPavel Labath "A boolean value that indicates if XML support is enabled in LLDB"); 684eafede2aSPavel Labath bool have_curses = true; 685eafede2aSPavel Labath #ifdef LLDB_DISABLE_CURSES 686eafede2aSPavel Labath have_curses = false; 687eafede2aSPavel Labath #endif 688eafede2aSPavel Labath AddBoolConfigEntry( 689eafede2aSPavel Labath *config_up, "curses", have_curses, 690eafede2aSPavel Labath "A boolean value that indicates if curses support is enabled in LLDB"); 691abc0c6adSPavel Labath AddLLVMTargets(*config_up); 692f1389e92SPavel Labath 693f1389e92SPavel Labath SBStructuredData data; 694f1389e92SPavel Labath data.m_impl_up->SetObjectSP(std::move(config_up)); 695baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(data); 696f1389e92SPavel Labath } 697f1389e92SPavel Labath 698b9c1b51eSKate Stone bool SBDebugger::StateIsRunningState(StateType state) { 699baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsRunningState, 700baf5664fSJonas Devlieghere (lldb::StateType), state); 701baf5664fSJonas Devlieghere 702c2bbb49aSCaroline Tice const bool result = lldb_private::StateIsRunningState(state); 7034838131bSGreg Clayton 7044838131bSGreg Clayton return result; 70530fdc8d8SChris Lattner } 70630fdc8d8SChris Lattner 707b9c1b51eSKate Stone bool SBDebugger::StateIsStoppedState(StateType state) { 708baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState, 709baf5664fSJonas Devlieghere (lldb::StateType), state); 710baf5664fSJonas Devlieghere 7112637f825SGreg Clayton const bool result = lldb_private::StateIsStoppedState(state, false); 712ceb6b139SCaroline Tice 7134838131bSGreg Clayton return result; 71430fdc8d8SChris Lattner } 71530fdc8d8SChris Lattner 716b9c1b51eSKate Stone lldb::SBTarget SBDebugger::CreateTarget(const char *filename, 717cac9c5f9SGreg Clayton const char *target_triple, 718cac9c5f9SGreg Clayton const char *platform_name, 719cac9c5f9SGreg Clayton bool add_dependent_modules, 720b9c1b51eSKate Stone lldb::SBError &sb_error) { 721baf5664fSJonas Devlieghere LLDB_RECORD_METHOD( 722baf5664fSJonas Devlieghere lldb::SBTarget, SBDebugger, CreateTarget, 723baf5664fSJonas Devlieghere (const char *, const char *, const char *, bool, lldb::SBError &), 724baf5664fSJonas Devlieghere filename, target_triple, platform_name, add_dependent_modules, sb_error); 725baf5664fSJonas Devlieghere 726cac9c5f9SGreg Clayton SBTarget sb_target; 727b9556accSGreg Clayton TargetSP target_sp; 728b9c1b51eSKate Stone if (m_opaque_sp) { 729cac9c5f9SGreg Clayton sb_error.Clear(); 730cac9c5f9SGreg Clayton OptionGroupPlatform platform_options(false); 731cac9c5f9SGreg Clayton platform_options.SetPlatformName(platform_name); 732cac9c5f9SGreg Clayton 733b9c1b51eSKate Stone sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget( 734f9a07e9fSJonas Devlieghere *m_opaque_sp, filename, target_triple, 735f9a07e9fSJonas Devlieghere add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, 736b9c1b51eSKate Stone &platform_options, target_sp); 737cac9c5f9SGreg Clayton 738cac9c5f9SGreg Clayton if (sb_error.Success()) 739b9556accSGreg Clayton sb_target.SetSP(target_sp); 740b9c1b51eSKate Stone } else { 7419f521f22SJim Ingham sb_error.SetErrorString("invalid debugger"); 742cac9c5f9SGreg Clayton } 743cac9c5f9SGreg Clayton 7445160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 74563e5fb76SJonas Devlieghere LLDB_LOGF(log, 74663e5fb76SJonas Devlieghere "SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, " 747b9c1b51eSKate Stone "platform_name=%s, add_dependent_modules=%u, error=%s) => " 748b9c1b51eSKate Stone "SBTarget(%p)", 749b9c1b51eSKate Stone static_cast<void *>(m_opaque_sp.get()), filename, target_triple, 750b9c1b51eSKate Stone platform_name, add_dependent_modules, sb_error.GetCString(), 751b9c1b51eSKate Stone static_cast<void *>(target_sp.get())); 752cac9c5f9SGreg Clayton 753baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_target); 754cac9c5f9SGreg Clayton } 75530fdc8d8SChris Lattner 75630fdc8d8SChris Lattner SBTarget 75730fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple(const char *filename, 758b9c1b51eSKate Stone const char *target_triple) { 759baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, 760baf5664fSJonas Devlieghere CreateTargetWithFileAndTargetTriple, 761baf5664fSJonas Devlieghere (const char *, const char *), filename, target_triple); 762baf5664fSJonas Devlieghere 763b9556accSGreg Clayton SBTarget sb_target; 764b9556accSGreg Clayton TargetSP target_sp; 765b9c1b51eSKate Stone if (m_opaque_sp) { 766cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 76797206d57SZachary Turner Status error(m_opaque_sp->GetTargetList().CreateTarget( 768f9a07e9fSJonas Devlieghere *m_opaque_sp, filename, target_triple, 769f9a07e9fSJonas Devlieghere add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr, 770cac9c5f9SGreg Clayton target_sp)); 771b9556accSGreg Clayton sb_target.SetSP(target_sp); 7726611103cSGreg Clayton } 7734838131bSGreg Clayton 7745160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 77563e5fb76SJonas Devlieghere LLDB_LOGF(log, 77663e5fb76SJonas Devlieghere "SBDebugger(%p)::CreateTargetWithFileAndTargetTriple " 777b9c1b51eSKate Stone "(filename=\"%s\", triple=%s) => SBTarget(%p)", 778b9c1b51eSKate Stone static_cast<void *>(m_opaque_sp.get()), filename, target_triple, 779b9c1b51eSKate Stone static_cast<void *>(target_sp.get())); 7804838131bSGreg Clayton 781baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_target); 78230fdc8d8SChris Lattner } 78330fdc8d8SChris Lattner 784b9c1b51eSKate Stone SBTarget SBDebugger::CreateTargetWithFileAndArch(const char *filename, 785b9c1b51eSKate Stone const char *arch_cstr) { 786baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTargetWithFileAndArch, 787baf5664fSJonas Devlieghere (const char *, const char *), filename, arch_cstr); 788baf5664fSJonas Devlieghere 7895160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 790ceb6b139SCaroline Tice 791b9556accSGreg Clayton SBTarget sb_target; 792b9556accSGreg Clayton TargetSP target_sp; 793b9c1b51eSKate Stone if (m_opaque_sp) { 79497206d57SZachary Turner Status error; 795cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 79630fdc8d8SChris Lattner 797b9c1b51eSKate Stone error = m_opaque_sp->GetTargetList().CreateTarget( 798f9a07e9fSJonas Devlieghere *m_opaque_sp, filename, arch_cstr, 799f9a07e9fSJonas Devlieghere add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr, 800cac9c5f9SGreg Clayton target_sp); 80130fdc8d8SChris Lattner 802b9c1b51eSKate Stone if (error.Success()) { 8032976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get()); 804b9556accSGreg Clayton sb_target.SetSP(target_sp); 8056611103cSGreg Clayton } 8066611103cSGreg Clayton } 807ceb6b139SCaroline Tice 80863e5fb76SJonas Devlieghere LLDB_LOGF(log, 80963e5fb76SJonas Devlieghere "SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", " 810b9c1b51eSKate Stone "arch=%s) => SBTarget(%p)", 811324a1036SSaleem Abdulrasool static_cast<void *>(m_opaque_sp.get()), filename, arch_cstr, 812324a1036SSaleem Abdulrasool static_cast<void *>(target_sp.get())); 813ceb6b139SCaroline Tice 814baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_target); 81530fdc8d8SChris Lattner } 81630fdc8d8SChris Lattner 817b9c1b51eSKate Stone SBTarget SBDebugger::CreateTarget(const char *filename) { 818baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, CreateTarget, (const char *), 819baf5664fSJonas Devlieghere filename); 820baf5664fSJonas Devlieghere 821b9556accSGreg Clayton SBTarget sb_target; 822b9556accSGreg Clayton TargetSP target_sp; 823b9c1b51eSKate Stone if (m_opaque_sp) { 82497206d57SZachary Turner Status error; 825cac9c5f9SGreg Clayton const bool add_dependent_modules = true; 826b9c1b51eSKate Stone error = m_opaque_sp->GetTargetList().CreateTarget( 827f9a07e9fSJonas Devlieghere *m_opaque_sp, filename, "", 828f9a07e9fSJonas Devlieghere add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr, 829f9a07e9fSJonas Devlieghere target_sp); 83030fdc8d8SChris Lattner 831b9c1b51eSKate Stone if (error.Success()) { 8322976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get()); 833b9556accSGreg Clayton sb_target.SetSP(target_sp); 8346611103cSGreg Clayton } 8356611103cSGreg Clayton } 8365160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 83763e5fb76SJonas Devlieghere LLDB_LOGF(log, 838b9c1b51eSKate Stone "SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)", 839324a1036SSaleem Abdulrasool static_cast<void *>(m_opaque_sp.get()), filename, 840324a1036SSaleem Abdulrasool static_cast<void *>(target_sp.get())); 841baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_target); 84230fdc8d8SChris Lattner } 84330fdc8d8SChris Lattner 844b842f2ecSJim Ingham SBTarget SBDebugger::GetDummyTarget() { 845baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetDummyTarget); 846baf5664fSJonas Devlieghere 847b842f2ecSJim Ingham SBTarget sb_target; 848b842f2ecSJim Ingham if (m_opaque_sp) { 849b842f2ecSJim Ingham sb_target.SetSP(m_opaque_sp->GetDummyTarget()->shared_from_this()); 850b842f2ecSJim Ingham } 851b842f2ecSJim Ingham Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 85263e5fb76SJonas Devlieghere LLDB_LOGF(log, "SBDebugger(%p)::GetDummyTarget() => SBTarget(%p)", 853b842f2ecSJim Ingham static_cast<void *>(m_opaque_sp.get()), 854b842f2ecSJim Ingham static_cast<void *>(sb_target.GetSP().get())); 855baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_target); 856b842f2ecSJim Ingham } 857b842f2ecSJim Ingham 858b9c1b51eSKate Stone bool SBDebugger::DeleteTarget(lldb::SBTarget &target) { 859baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &), 860baf5664fSJonas Devlieghere target); 861baf5664fSJonas Devlieghere 8623794ad95SJohnny Chen bool result = false; 863b9c1b51eSKate Stone if (m_opaque_sp) { 864b9556accSGreg Clayton TargetSP target_sp(target.GetSP()); 865b9c1b51eSKate Stone if (target_sp) { 8663794ad95SJohnny Chen // No need to lock, the target list is thread safe 867b9556accSGreg Clayton result = m_opaque_sp->GetTargetList().DeleteTarget(target_sp); 868b9556accSGreg Clayton target_sp->Destroy(); 86975340622SGreg Clayton target.Clear(); 8700cd70866SGreg Clayton const bool mandatory = true; 8710cd70866SGreg Clayton ModuleList::RemoveOrphanSharedModules(mandatory); 8723794ad95SJohnny Chen } 873b9556accSGreg Clayton } 8743794ad95SJohnny Chen 8755160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 87663e5fb76SJonas Devlieghere LLDB_LOGF(log, "SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", 877324a1036SSaleem Abdulrasool static_cast<void *>(m_opaque_sp.get()), 878324a1036SSaleem Abdulrasool static_cast<void *>(target.m_opaque_sp.get()), result); 8793794ad95SJohnny Chen 8803794ad95SJohnny Chen return result; 8813794ad95SJohnny Chen } 882dbb0abbfSEugene Zelenko 883b9c1b51eSKate Stone SBTarget SBDebugger::GetTargetAtIndex(uint32_t idx) { 884baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex, (uint32_t), 885baf5664fSJonas Devlieghere idx); 886baf5664fSJonas Devlieghere 8876611103cSGreg Clayton SBTarget sb_target; 888b9c1b51eSKate Stone if (m_opaque_sp) { 889af67cecdSGreg Clayton // No need to lock, the target list is thread safe 890b9556accSGreg Clayton sb_target.SetSP(m_opaque_sp->GetTargetList().GetTargetAtIndex(idx)); 891af67cecdSGreg Clayton } 892baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_target); 89330fdc8d8SChris Lattner } 89430fdc8d8SChris Lattner 895b9c1b51eSKate Stone uint32_t SBDebugger::GetIndexOfTarget(lldb::SBTarget target) { 896baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(uint32_t, SBDebugger, GetIndexOfTarget, (lldb::SBTarget), 897baf5664fSJonas Devlieghere target); 8988499e1a4SJim Ingham 8998499e1a4SJim Ingham lldb::TargetSP target_sp = target.GetSP(); 9008499e1a4SJim Ingham if (!target_sp) 9018499e1a4SJim Ingham return UINT32_MAX; 9028499e1a4SJim Ingham 9038499e1a4SJim Ingham if (!m_opaque_sp) 9048499e1a4SJim Ingham return UINT32_MAX; 9058499e1a4SJim Ingham 9068499e1a4SJim Ingham return m_opaque_sp->GetTargetList().GetIndexOfTarget(target.GetSP()); 9078499e1a4SJim Ingham } 9088499e1a4SJim Ingham 909b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithProcessID(lldb::pid_t pid) { 910baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID, 911baf5664fSJonas Devlieghere (lldb::pid_t), pid); 912baf5664fSJonas Devlieghere 9136611103cSGreg Clayton SBTarget sb_target; 914b9c1b51eSKate Stone if (m_opaque_sp) { 915af67cecdSGreg Clayton // No need to lock, the target list is thread safe 916b9556accSGreg Clayton sb_target.SetSP(m_opaque_sp->GetTargetList().FindTargetWithProcessID(pid)); 917af67cecdSGreg Clayton } 918baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_target); 91930fdc8d8SChris Lattner } 92030fdc8d8SChris Lattner 921b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithFileAndArch(const char *filename, 922b9c1b51eSKate Stone const char *arch_name) { 923baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch, 924baf5664fSJonas Devlieghere (const char *, const char *), filename, arch_name); 925baf5664fSJonas Devlieghere 9266611103cSGreg Clayton SBTarget sb_target; 927b9c1b51eSKate Stone if (m_opaque_sp && filename && filename[0]) { 928af67cecdSGreg Clayton // No need to lock, the target list is thread safe 9297263f1bdSPavel Labath ArchSpec arch = Platform::GetAugmentedArchSpec( 9307263f1bdSPavel Labath m_opaque_sp->GetPlatformList().GetSelectedPlatform().get(), arch_name); 931b9c1b51eSKate Stone TargetSP target_sp( 932b9c1b51eSKate Stone m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture( 9338f3be7a3SJonas Devlieghere FileSpec(filename), arch_name ? &arch : nullptr)); 934b9556accSGreg Clayton sb_target.SetSP(target_sp); 9356611103cSGreg Clayton } 936baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_target); 93730fdc8d8SChris Lattner } 93830fdc8d8SChris Lattner 939b9c1b51eSKate Stone SBTarget SBDebugger::FindTargetWithLLDBProcess(const ProcessSP &process_sp) { 9406611103cSGreg Clayton SBTarget sb_target; 941b9c1b51eSKate Stone if (m_opaque_sp) { 942af67cecdSGreg Clayton // No need to lock, the target list is thread safe 943b9c1b51eSKate Stone sb_target.SetSP( 944b9c1b51eSKate Stone m_opaque_sp->GetTargetList().FindTargetWithProcess(process_sp.get())); 945af67cecdSGreg Clayton } 94630fdc8d8SChris Lattner return sb_target; 94730fdc8d8SChris Lattner } 94830fdc8d8SChris Lattner 949b9c1b51eSKate Stone uint32_t SBDebugger::GetNumTargets() { 950baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumTargets); 951baf5664fSJonas Devlieghere 952b9c1b51eSKate Stone if (m_opaque_sp) { 953af67cecdSGreg Clayton // No need to lock, the target list is thread safe 9546611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets(); 955af67cecdSGreg Clayton } 9566611103cSGreg Clayton return 0; 9576611103cSGreg Clayton } 95830fdc8d8SChris Lattner 959b9c1b51eSKate Stone SBTarget SBDebugger::GetSelectedTarget() { 960baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTarget, SBDebugger, GetSelectedTarget); 961baf5664fSJonas Devlieghere 9625160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 963ceb6b139SCaroline Tice 9646611103cSGreg Clayton SBTarget sb_target; 965b9556accSGreg Clayton TargetSP target_sp; 966b9c1b51eSKate Stone if (m_opaque_sp) { 967af67cecdSGreg Clayton // No need to lock, the target list is thread safe 968b9556accSGreg Clayton target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget(); 969b9556accSGreg Clayton sb_target.SetSP(target_sp); 970af67cecdSGreg Clayton } 971ceb6b139SCaroline Tice 972b9c1b51eSKate Stone if (log) { 973ceb6b139SCaroline Tice SBStream sstr; 974431ce678SGreg Clayton sb_target.GetDescription(sstr, eDescriptionLevelBrief); 97563e5fb76SJonas Devlieghere LLDB_LOGF(log, "SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", 976324a1036SSaleem Abdulrasool static_cast<void *>(m_opaque_sp.get()), 977324a1036SSaleem Abdulrasool static_cast<void *>(target_sp.get()), sstr.GetData()); 978ceb6b139SCaroline Tice } 979ceb6b139SCaroline Tice 980baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_target); 98130fdc8d8SChris Lattner } 98230fdc8d8SChris Lattner 983b9c1b51eSKate Stone void SBDebugger::SetSelectedTarget(SBTarget &sb_target) { 984baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedTarget, (lldb::SBTarget &), 985baf5664fSJonas Devlieghere sb_target); 986baf5664fSJonas Devlieghere 9875160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 988e64f0dc7SJim Ingham 989b9556accSGreg Clayton TargetSP target_sp(sb_target.GetSP()); 990b9c1b51eSKate Stone if (m_opaque_sp) { 991b9556accSGreg Clayton m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get()); 992e64f0dc7SJim Ingham } 993b9c1b51eSKate Stone if (log) { 994e64f0dc7SJim Ingham SBStream sstr; 995e64f0dc7SJim Ingham sb_target.GetDescription(sstr, eDescriptionLevelBrief); 99663e5fb76SJonas Devlieghere LLDB_LOGF(log, "SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", 997324a1036SSaleem Abdulrasool static_cast<void *>(m_opaque_sp.get()), 998324a1036SSaleem Abdulrasool static_cast<void *>(target_sp.get()), sstr.GetData()); 999e64f0dc7SJim Ingham } 1000e64f0dc7SJim Ingham } 1001e64f0dc7SJim Ingham 1002b9c1b51eSKate Stone SBPlatform SBDebugger::GetSelectedPlatform() { 1003baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBPlatform, SBDebugger, GetSelectedPlatform); 1004baf5664fSJonas Devlieghere 1005fbb76349SGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 1006fbb76349SGreg Clayton 1007fbb76349SGreg Clayton SBPlatform sb_platform; 1008fbb76349SGreg Clayton DebuggerSP debugger_sp(m_opaque_sp); 1009b9c1b51eSKate Stone if (debugger_sp) { 1010fbb76349SGreg Clayton sb_platform.SetSP(debugger_sp->GetPlatformList().GetSelectedPlatform()); 1011fbb76349SGreg Clayton } 101263e5fb76SJonas Devlieghere LLDB_LOGF(log, "SBDebugger(%p)::GetSelectedPlatform () => SBPlatform(%p): %s", 1013324a1036SSaleem Abdulrasool static_cast<void *>(m_opaque_sp.get()), 1014324a1036SSaleem Abdulrasool static_cast<void *>(sb_platform.GetSP().get()), 1015324a1036SSaleem Abdulrasool sb_platform.GetName()); 1016baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_platform); 1017fbb76349SGreg Clayton } 1018fbb76349SGreg Clayton 1019b9c1b51eSKate Stone void SBDebugger::SetSelectedPlatform(SBPlatform &sb_platform) { 1020baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SetSelectedPlatform, 1021baf5664fSJonas Devlieghere (lldb::SBPlatform &), sb_platform); 1022baf5664fSJonas Devlieghere 1023fbb76349SGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 1024fbb76349SGreg Clayton 1025fbb76349SGreg Clayton DebuggerSP debugger_sp(m_opaque_sp); 1026b9c1b51eSKate Stone if (debugger_sp) { 1027fbb76349SGreg Clayton debugger_sp->GetPlatformList().SetSelectedPlatform(sb_platform.GetSP()); 1028fbb76349SGreg Clayton } 1029324a1036SSaleem Abdulrasool 103063e5fb76SJonas Devlieghere LLDB_LOGF(log, "SBDebugger(%p)::SetSelectedPlatform (SBPlatform(%p) %s)", 1031324a1036SSaleem Abdulrasool static_cast<void *>(m_opaque_sp.get()), 1032324a1036SSaleem Abdulrasool static_cast<void *>(sb_platform.GetSP().get()), 1033324a1036SSaleem Abdulrasool sb_platform.GetName()); 1034fbb76349SGreg Clayton } 1035fbb76349SGreg Clayton 1036c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumPlatforms() { 1037baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumPlatforms); 1038baf5664fSJonas Devlieghere 1039c10e34d0SVadim Macagon if (m_opaque_sp) { 1040c10e34d0SVadim Macagon // No need to lock, the platform list is thread safe 1041c10e34d0SVadim Macagon return m_opaque_sp->GetPlatformList().GetSize(); 1042c10e34d0SVadim Macagon } 1043c10e34d0SVadim Macagon return 0; 1044c10e34d0SVadim Macagon } 1045c10e34d0SVadim Macagon 1046c10e34d0SVadim Macagon SBPlatform SBDebugger::GetPlatformAtIndex(uint32_t idx) { 1047baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex, 1048baf5664fSJonas Devlieghere (uint32_t), idx); 1049baf5664fSJonas Devlieghere 1050c10e34d0SVadim Macagon SBPlatform sb_platform; 1051c10e34d0SVadim Macagon if (m_opaque_sp) { 1052c10e34d0SVadim Macagon // No need to lock, the platform list is thread safe 1053c10e34d0SVadim Macagon sb_platform.SetSP(m_opaque_sp->GetPlatformList().GetAtIndex(idx)); 1054c10e34d0SVadim Macagon } 1055baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_platform); 1056c10e34d0SVadim Macagon } 1057c10e34d0SVadim Macagon 1058c10e34d0SVadim Macagon uint32_t SBDebugger::GetNumAvailablePlatforms() { 1059baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumAvailablePlatforms); 1060baf5664fSJonas Devlieghere 1061c10e34d0SVadim Macagon uint32_t idx = 0; 1062c10e34d0SVadim Macagon while (true) { 1063c10e34d0SVadim Macagon if (!PluginManager::GetPlatformPluginNameAtIndex(idx)) { 1064c10e34d0SVadim Macagon break; 1065c10e34d0SVadim Macagon } 1066c10e34d0SVadim Macagon ++idx; 1067c10e34d0SVadim Macagon } 1068c10e34d0SVadim Macagon // +1 for the host platform, which should always appear first in the list. 1069c10e34d0SVadim Macagon return idx + 1; 1070c10e34d0SVadim Macagon } 1071c10e34d0SVadim Macagon 1072c10e34d0SVadim Macagon SBStructuredData SBDebugger::GetAvailablePlatformInfoAtIndex(uint32_t idx) { 1073baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBStructuredData, SBDebugger, 1074baf5664fSJonas Devlieghere GetAvailablePlatformInfoAtIndex, (uint32_t), idx); 1075baf5664fSJonas Devlieghere 1076c10e34d0SVadim Macagon SBStructuredData data; 1077a8f3ae7cSJonas Devlieghere auto platform_dict = std::make_unique<StructuredData::Dictionary>(); 1078c10e34d0SVadim Macagon llvm::StringRef name_str("name"), desc_str("description"); 1079c10e34d0SVadim Macagon 1080c10e34d0SVadim Macagon if (idx == 0) { 1081c10e34d0SVadim Macagon PlatformSP host_platform_sp(Platform::GetHostPlatform()); 1082c10e34d0SVadim Macagon platform_dict->AddStringItem( 1083c10e34d0SVadim Macagon name_str, host_platform_sp->GetPluginName().GetStringRef()); 1084c10e34d0SVadim Macagon platform_dict->AddStringItem( 1085c10e34d0SVadim Macagon desc_str, llvm::StringRef(host_platform_sp->GetDescription())); 1086c10e34d0SVadim Macagon } else if (idx > 0) { 1087c10e34d0SVadim Macagon const char *plugin_name = 1088c10e34d0SVadim Macagon PluginManager::GetPlatformPluginNameAtIndex(idx - 1); 1089c10e34d0SVadim Macagon if (!plugin_name) { 1090baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(data); 1091c10e34d0SVadim Macagon } 1092c10e34d0SVadim Macagon platform_dict->AddStringItem(name_str, llvm::StringRef(plugin_name)); 1093c10e34d0SVadim Macagon 1094c10e34d0SVadim Macagon const char *plugin_desc = 1095c10e34d0SVadim Macagon PluginManager::GetPlatformPluginDescriptionAtIndex(idx - 1); 1096c10e34d0SVadim Macagon if (!plugin_desc) { 1097baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(data); 1098c10e34d0SVadim Macagon } 1099c10e34d0SVadim Macagon platform_dict->AddStringItem(desc_str, llvm::StringRef(plugin_desc)); 1100c10e34d0SVadim Macagon } 1101c10e34d0SVadim Macagon 1102c10e34d0SVadim Macagon data.m_impl_up->SetObjectSP( 1103c10e34d0SVadim Macagon StructuredData::ObjectSP(platform_dict.release())); 1104baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(data); 1105c10e34d0SVadim Macagon } 1106c10e34d0SVadim Macagon 1107b9c1b51eSKate Stone void SBDebugger::DispatchInput(void *baton, const void *data, size_t data_len) { 11080d7b0c96SJonas Devlieghere LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput, 11090d7b0c96SJonas Devlieghere (void *, const void *, size_t), baton, data, data_len); 11100d7b0c96SJonas Devlieghere 11116b09d423SEnrico Granata DispatchInput(data, data_len); 11126b09d423SEnrico Granata } 11136b09d423SEnrico Granata 1114b9c1b51eSKate Stone void SBDebugger::DispatchInput(const void *data, size_t data_len) { 11150d7b0c96SJonas Devlieghere LLDB_RECORD_DUMMY(void, SBDebugger, DispatchInput, (const void *, size_t), 11160d7b0c96SJonas Devlieghere data, data_len); 11170d7b0c96SJonas Devlieghere 111844d93782SGreg Clayton // Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 111944d93782SGreg Clayton // 112044d93782SGreg Clayton // if (log) 112163e5fb76SJonas Devlieghere // LLDB_LOGF(log, "SBDebugger(%p)::DispatchInput (data=\"%.*s\", 1122b9c1b51eSKate Stone // size_t=%" PRIu64 ")", 112344d93782SGreg Clayton // m_opaque_sp.get(), 112444d93782SGreg Clayton // (int) data_len, 112544d93782SGreg Clayton // (const char *) data, 112644d93782SGreg Clayton // (uint64_t)data_len); 112744d93782SGreg Clayton // 112844d93782SGreg Clayton // if (m_opaque_sp) 112944d93782SGreg Clayton // m_opaque_sp->DispatchInput ((const char *) data, data_len); 113030fdc8d8SChris Lattner } 113130fdc8d8SChris Lattner 1132b9c1b51eSKate Stone void SBDebugger::DispatchInputInterrupt() { 1133b328dcbfSJonas Devlieghere LLDB_RECORD_DUMMY_NO_ARGS(void, SBDebugger, DispatchInputInterrupt); 1134baf5664fSJonas Devlieghere 1135efed6131SCaroline Tice if (m_opaque_sp) 1136efed6131SCaroline Tice m_opaque_sp->DispatchInputInterrupt(); 1137efed6131SCaroline Tice } 1138efed6131SCaroline Tice 1139b9c1b51eSKate Stone void SBDebugger::DispatchInputEndOfFile() { 1140baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBDebugger, DispatchInputEndOfFile); 1141baf5664fSJonas Devlieghere 1142efed6131SCaroline Tice if (m_opaque_sp) 1143efed6131SCaroline Tice m_opaque_sp->DispatchInputEndOfFile(); 1144efed6131SCaroline Tice } 11459088b068SCaroline Tice 1146baf5664fSJonas Devlieghere void SBDebugger::PushInputReader(SBInputReader &reader) { 1147baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, PushInputReader, (lldb::SBInputReader &), 1148baf5664fSJonas Devlieghere reader); 1149baf5664fSJonas Devlieghere } 11506611103cSGreg Clayton 1151b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events, 1152b9c1b51eSKate Stone bool spawn_thread) { 1153baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool), 1154baf5664fSJonas Devlieghere auto_handle_events, spawn_thread); 1155baf5664fSJonas Devlieghere 1156b9c1b51eSKate Stone if (m_opaque_sp) { 115726c7bf93SJim Ingham CommandInterpreterRunOptions options; 115826c7bf93SJim Ingham 1159b9c1b51eSKate Stone m_opaque_sp->GetCommandInterpreter().RunCommandInterpreter( 1160b9c1b51eSKate Stone auto_handle_events, spawn_thread, options); 116126c7bf93SJim Ingham } 116226c7bf93SJim Ingham } 116326c7bf93SJim Ingham 1164b9c1b51eSKate Stone void SBDebugger::RunCommandInterpreter(bool auto_handle_events, 116526c7bf93SJim Ingham bool spawn_thread, 116626c7bf93SJim Ingham SBCommandInterpreterRunOptions &options, 1167b9c1b51eSKate Stone int &num_errors, bool &quit_requested, 1168ffc9f1deSJim Ingham bool &stopped_for_crash) 116926c7bf93SJim Ingham 117026c7bf93SJim Ingham { 1171baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, RunCommandInterpreter, 1172baf5664fSJonas Devlieghere (bool, bool, lldb::SBCommandInterpreterRunOptions &, int &, 1173baf5664fSJonas Devlieghere bool &, bool &), 1174baf5664fSJonas Devlieghere auto_handle_events, spawn_thread, options, num_errors, 1175baf5664fSJonas Devlieghere quit_requested, stopped_for_crash); 1176baf5664fSJonas Devlieghere 1177b9c1b51eSKate Stone if (m_opaque_sp) { 117826c7bf93SJim Ingham CommandInterpreter &interp = m_opaque_sp->GetCommandInterpreter(); 1179b9c1b51eSKate Stone interp.RunCommandInterpreter(auto_handle_events, spawn_thread, 1180b9c1b51eSKate Stone options.ref()); 118126c7bf93SJim Ingham num_errors = interp.GetNumErrors(); 118226c7bf93SJim Ingham quit_requested = interp.GetQuitRequested(); 1183ffc9f1deSJim Ingham stopped_for_crash = interp.GetStoppedForCrash(); 118426c7bf93SJim Ingham } 1185969ed3d1SCaroline Tice } 1186969ed3d1SCaroline Tice 1187b9c1b51eSKate Stone SBError SBDebugger::RunREPL(lldb::LanguageType language, 1188b9c1b51eSKate Stone const char *repl_options) { 1189baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, RunREPL, 1190baf5664fSJonas Devlieghere (lldb::LanguageType, const char *), language, 1191baf5664fSJonas Devlieghere repl_options); 1192baf5664fSJonas Devlieghere 11933e7e915dSSean Callanan SBError error; 11943e7e915dSSean Callanan if (m_opaque_sp) 11953e7e915dSSean Callanan error.ref() = m_opaque_sp->RunREPL(language, repl_options); 11963e7e915dSSean Callanan else 11973e7e915dSSean Callanan error.SetErrorString("invalid debugger"); 1198baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(error); 11993e7e915dSSean Callanan } 12003e7e915dSSean Callanan 1201b9c1b51eSKate Stone void SBDebugger::reset(const DebuggerSP &debugger_sp) { 12026611103cSGreg Clayton m_opaque_sp = debugger_sp; 12036611103cSGreg Clayton } 12046611103cSGreg Clayton 1205b9c1b51eSKate Stone Debugger *SBDebugger::get() const { return m_opaque_sp.get(); } 12066611103cSGreg Clayton 1207b9c1b51eSKate Stone Debugger &SBDebugger::ref() const { 12086611103cSGreg Clayton assert(m_opaque_sp.get()); 12096611103cSGreg Clayton return *m_opaque_sp; 12106611103cSGreg Clayton } 12116611103cSGreg Clayton 1212b9c1b51eSKate Stone const lldb::DebuggerSP &SBDebugger::get_sp() const { return m_opaque_sp; } 12136611103cSGreg Clayton 1214b9c1b51eSKate Stone SBDebugger SBDebugger::FindDebuggerWithID(int id) { 1215baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD(lldb::SBDebugger, SBDebugger, FindDebuggerWithID, 1216baf5664fSJonas Devlieghere (int), id); 1217baf5664fSJonas Devlieghere 1218af67cecdSGreg Clayton // No need to lock, the debugger list is thread safe 1219ebc1bb27SCaroline Tice SBDebugger sb_debugger; 1220431ce678SGreg Clayton DebuggerSP debugger_sp = Debugger::FindDebuggerWithID(id); 1221ebc1bb27SCaroline Tice if (debugger_sp) 1222ebc1bb27SCaroline Tice sb_debugger.reset(debugger_sp); 1223baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_debugger); 1224ebc1bb27SCaroline Tice } 1225e40e4218SJim Ingham 1226b9c1b51eSKate Stone const char *SBDebugger::GetInstanceName() { 1227baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBDebugger, GetInstanceName); 1228baf5664fSJonas Devlieghere 1229dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->GetInstanceName().AsCString() : nullptr); 1230dd759857SCaroline Tice } 1231dd759857SCaroline Tice 1232b9c1b51eSKate Stone SBError SBDebugger::SetInternalVariable(const char *var_name, const char *value, 1233b9c1b51eSKate Stone const char *debugger_instance_name) { 1234baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable, 1235baf5664fSJonas Devlieghere (const char *, const char *, const char *), 1236baf5664fSJonas Devlieghere var_name, value, debugger_instance_name); 1237baf5664fSJonas Devlieghere 12386920b52bSGreg Clayton SBError sb_error; 1239b9c1b51eSKate Stone DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName( 1240b9c1b51eSKate Stone ConstString(debugger_instance_name))); 124197206d57SZachary Turner Status error; 1242b9c1b51eSKate Stone if (debugger_sp) { 1243b9c1b51eSKate Stone ExecutionContext exe_ctx( 1244b9c1b51eSKate Stone debugger_sp->GetCommandInterpreter().GetExecutionContext()); 1245b9c1b51eSKate Stone error = debugger_sp->SetPropertyValue(&exe_ctx, eVarSetOperationAssign, 1246b9c1b51eSKate Stone var_name, value); 1247b9c1b51eSKate Stone } else { 1248b9c1b51eSKate Stone error.SetErrorStringWithFormat("invalid debugger instance name '%s'", 1249b9c1b51eSKate Stone debugger_instance_name); 12506920b52bSGreg Clayton } 12516920b52bSGreg Clayton if (error.Fail()) 12526920b52bSGreg Clayton sb_error.SetError(error); 1253baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_error); 12543df9a8dfSCaroline Tice } 12553df9a8dfSCaroline Tice 1256431ce678SGreg Clayton SBStringList 1257b9c1b51eSKate Stone SBDebugger::GetInternalVariableValue(const char *var_name, 1258b9c1b51eSKate Stone const char *debugger_instance_name) { 1259baf5664fSJonas Devlieghere LLDB_RECORD_STATIC_METHOD( 1260baf5664fSJonas Devlieghere lldb::SBStringList, SBDebugger, GetInternalVariableValue, 1261baf5664fSJonas Devlieghere (const char *, const char *), var_name, debugger_instance_name); 1262baf5664fSJonas Devlieghere 12633df9a8dfSCaroline Tice SBStringList ret_value; 1264b9c1b51eSKate Stone DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName( 1265b9c1b51eSKate Stone ConstString(debugger_instance_name))); 126697206d57SZachary Turner Status error; 1267b9c1b51eSKate Stone if (debugger_sp) { 1268b9c1b51eSKate Stone ExecutionContext exe_ctx( 1269b9c1b51eSKate Stone debugger_sp->GetCommandInterpreter().GetExecutionContext()); 1270b9c1b51eSKate Stone lldb::OptionValueSP value_sp( 1271b9c1b51eSKate Stone debugger_sp->GetPropertyValue(&exe_ctx, var_name, false, error)); 1272b9c1b51eSKate Stone if (value_sp) { 12736920b52bSGreg Clayton StreamString value_strm; 12746920b52bSGreg Clayton value_sp->DumpValue(&exe_ctx, value_strm, OptionValue::eDumpOptionValue); 12756920b52bSGreg Clayton const std::string &value_str = value_strm.GetString(); 1276b9c1b51eSKate Stone if (!value_str.empty()) { 12776920b52bSGreg Clayton StringList string_list; 127844d93782SGreg Clayton string_list.SplitIntoLines(value_str); 1279baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBStringList(&string_list)); 12806920b52bSGreg Clayton } 12816920b52bSGreg Clayton } 12826920b52bSGreg Clayton } 1283baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBStringList()); 12843df9a8dfSCaroline Tice } 12853df9a8dfSCaroline Tice 1286b9c1b51eSKate Stone uint32_t SBDebugger::GetTerminalWidth() const { 1287baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBDebugger, GetTerminalWidth); 1288baf5664fSJonas Devlieghere 1289dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->GetTerminalWidth() : 0); 1290a7015092SGreg Clayton } 1291a7015092SGreg Clayton 1292b9c1b51eSKate Stone void SBDebugger::SetTerminalWidth(uint32_t term_width) { 1293b328dcbfSJonas Devlieghere LLDB_RECORD_DUMMY(void, SBDebugger, SetTerminalWidth, (uint32_t), term_width); 1294baf5664fSJonas Devlieghere 1295a7015092SGreg Clayton if (m_opaque_sp) 1296a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth(term_width); 1297a7015092SGreg Clayton } 1298a7015092SGreg Clayton 1299b9c1b51eSKate Stone const char *SBDebugger::GetPrompt() const { 1300baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetPrompt); 1301baf5664fSJonas Devlieghere 13025160ce5cSGreg Clayton Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 1303ceb6b139SCaroline Tice 130463e5fb76SJonas Devlieghere LLDB_LOGF(log, "SBDebugger(%p)::GetPrompt () => \"%s\"", 1305324a1036SSaleem Abdulrasool static_cast<void *>(m_opaque_sp.get()), 1306514d8cd8SZachary Turner (m_opaque_sp ? m_opaque_sp->GetPrompt().str().c_str() : "")); 1307ceb6b139SCaroline Tice 1308514d8cd8SZachary Turner return (m_opaque_sp ? ConstString(m_opaque_sp->GetPrompt()).GetCString() 1309514d8cd8SZachary Turner : nullptr); 1310a7015092SGreg Clayton } 1311a7015092SGreg Clayton 1312b9c1b51eSKate Stone void SBDebugger::SetPrompt(const char *prompt) { 1313baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SetPrompt, (const char *), prompt); 1314baf5664fSJonas Devlieghere 1315a7015092SGreg Clayton if (m_opaque_sp) 1316514d8cd8SZachary Turner m_opaque_sp->SetPrompt(llvm::StringRef::withNullAsEmpty(prompt)); 1317a7015092SGreg Clayton } 1318a7015092SGreg Clayton 13199e046f02SJonas Devlieghere const char *SBDebugger::GetReproducerPath() const { 1320baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBDebugger, GetReproducerPath); 1321baf5664fSJonas Devlieghere 13229e046f02SJonas Devlieghere return (m_opaque_sp 13239e046f02SJonas Devlieghere ? ConstString(m_opaque_sp->GetReproducerPath()).GetCString() 13249e046f02SJonas Devlieghere : nullptr); 13259e046f02SJonas Devlieghere } 13269e046f02SJonas Devlieghere 1327b9c1b51eSKate Stone ScriptLanguage SBDebugger::GetScriptLanguage() const { 1328baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::ScriptLanguage, SBDebugger, 1329baf5664fSJonas Devlieghere GetScriptLanguage); 1330baf5664fSJonas Devlieghere 1331dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->GetScriptLanguage() : eScriptLanguageNone); 1332a7015092SGreg Clayton } 1333a7015092SGreg Clayton 1334b9c1b51eSKate Stone void SBDebugger::SetScriptLanguage(ScriptLanguage script_lang) { 1335baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SetScriptLanguage, 1336baf5664fSJonas Devlieghere (lldb::ScriptLanguage), script_lang); 1337baf5664fSJonas Devlieghere 1338b9c1b51eSKate Stone if (m_opaque_sp) { 1339a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage(script_lang); 1340a7015092SGreg Clayton } 1341af67cecdSGreg Clayton } 1342a7015092SGreg Clayton 1343b9c1b51eSKate Stone bool SBDebugger::SetUseExternalEditor(bool value) { 1344baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool), value); 1345baf5664fSJonas Devlieghere 1346dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->SetUseExternalEditor(value) : false); 1347e40e4218SJim Ingham } 1348e40e4218SJim Ingham 1349b9c1b51eSKate Stone bool SBDebugger::GetUseExternalEditor() { 1350baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(bool, SBDebugger, GetUseExternalEditor); 1351baf5664fSJonas Devlieghere 1352dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->GetUseExternalEditor() : false); 1353e40e4218SJim Ingham } 1354e40e4218SJim Ingham 1355b9c1b51eSKate Stone bool SBDebugger::SetUseColor(bool value) { 1356baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBDebugger, SetUseColor, (bool), value); 1357baf5664fSJonas Devlieghere 1358dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->SetUseColor(value) : false); 1359c3ce7f27SMichael Sartain } 1360c3ce7f27SMichael Sartain 1361b9c1b51eSKate Stone bool SBDebugger::GetUseColor() const { 1362baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetUseColor); 1363baf5664fSJonas Devlieghere 1364dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->GetUseColor() : false); 1365c3ce7f27SMichael Sartain } 1366c3ce7f27SMichael Sartain 1367b9c1b51eSKate Stone bool SBDebugger::GetDescription(SBStream &description) { 1368baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &), 1369baf5664fSJonas Devlieghere description); 1370baf5664fSJonas Devlieghere 1371da7bc7d0SGreg Clayton Stream &strm = description.ref(); 1372da7bc7d0SGreg Clayton 1373b9c1b51eSKate Stone if (m_opaque_sp) { 1374dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 1375431ce678SGreg Clayton user_id_t id = m_opaque_sp->GetID(); 1376d01b2953SDaniel Malea strm.Printf("Debugger (instance: \"%s\", id: %" PRIu64 ")", name, id); 1377b9c1b51eSKate Stone } else 1378da7bc7d0SGreg Clayton strm.PutCString("No value"); 1379dde9cff3SCaroline Tice 1380dde9cff3SCaroline Tice return true; 1381dde9cff3SCaroline Tice } 1382efed6131SCaroline Tice 1383b9c1b51eSKate Stone user_id_t SBDebugger::GetID() { 1384baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::user_id_t, SBDebugger, GetID); 1385baf5664fSJonas Devlieghere 1386dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->GetID() : LLDB_INVALID_UID); 1387efed6131SCaroline Tice } 13882289fa48SGreg Clayton 1389b9c1b51eSKate Stone SBError SBDebugger::SetCurrentPlatform(const char *platform_name_cstr) { 1390baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform, 1391baf5664fSJonas Devlieghere (const char *), platform_name_cstr); 1392baf5664fSJonas Devlieghere 13932289fa48SGreg Clayton SBError sb_error; 1394b9c1b51eSKate Stone if (m_opaque_sp) { 1395b9c1b51eSKate Stone if (platform_name_cstr && platform_name_cstr[0]) { 1396615eb7e6SGreg Clayton ConstString platform_name(platform_name_cstr); 1397615eb7e6SGreg Clayton PlatformSP platform_sp(Platform::Find(platform_name)); 13982289fa48SGreg Clayton 1399b9c1b51eSKate Stone if (platform_sp) { 1400615eb7e6SGreg Clayton // Already have a platform with this name, just select it 1401615eb7e6SGreg Clayton m_opaque_sp->GetPlatformList().SetSelectedPlatform(platform_sp); 1402b9c1b51eSKate Stone } else { 1403615eb7e6SGreg Clayton // We don't have a platform by this name yet, create one 1404615eb7e6SGreg Clayton platform_sp = Platform::Create(platform_name, sb_error.ref()); 1405b9c1b51eSKate Stone if (platform_sp) { 1406615eb7e6SGreg Clayton // We created the platform, now append and select it 14072289fa48SGreg Clayton bool make_selected = true; 14082289fa48SGreg Clayton m_opaque_sp->GetPlatformList().Append(platform_sp, make_selected); 14092289fa48SGreg Clayton } 14102289fa48SGreg Clayton } 1411b9c1b51eSKate Stone } else { 1412615eb7e6SGreg Clayton sb_error.ref().SetErrorString("invalid platform name"); 1413615eb7e6SGreg Clayton } 1414b9c1b51eSKate Stone } else { 1415615eb7e6SGreg Clayton sb_error.ref().SetErrorString("invalid debugger"); 1416615eb7e6SGreg Clayton } 1417baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_error); 14182289fa48SGreg Clayton } 14192289fa48SGreg Clayton 1420b9c1b51eSKate Stone bool SBDebugger::SetCurrentPlatformSDKRoot(const char *sysroot) { 1421baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot, 1422baf5664fSJonas Devlieghere (const char *), sysroot); 1423baf5664fSJonas Devlieghere 1424e1cf274bSJason Molenda Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 1425b9c1b51eSKate Stone if (m_opaque_sp) { 1426b9c1b51eSKate Stone PlatformSP platform_sp( 1427b9c1b51eSKate Stone m_opaque_sp->GetPlatformList().GetSelectedPlatform()); 1428f3dd93c8SGreg Clayton 1429b9c1b51eSKate Stone if (platform_sp) { 1430e1cf274bSJason Molenda if (log && sysroot) 143163e5fb76SJonas Devlieghere LLDB_LOGF(log, "SBDebugger::SetCurrentPlatformSDKRoot (\"%s\")", 143263e5fb76SJonas Devlieghere sysroot); 1433f3dd93c8SGreg Clayton platform_sp->SetSDKRootDirectory(ConstString(sysroot)); 1434f3dd93c8SGreg Clayton return true; 1435f3dd93c8SGreg Clayton } 1436f3dd93c8SGreg Clayton } 1437f3dd93c8SGreg Clayton return false; 1438f3dd93c8SGreg Clayton } 1439f3dd93c8SGreg Clayton 1440b9c1b51eSKate Stone bool SBDebugger::GetCloseInputOnEOF() const { 1441baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBDebugger, GetCloseInputOnEOF); 1442baf5664fSJonas Devlieghere 1443dbb0abbfSEugene Zelenko return (m_opaque_sp ? m_opaque_sp->GetCloseInputOnEOF() : false); 1444fc3f027dSGreg Clayton } 1445fc3f027dSGreg Clayton 1446b9c1b51eSKate Stone void SBDebugger::SetCloseInputOnEOF(bool b) { 1447baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool), b); 1448baf5664fSJonas Devlieghere 1449fc3f027dSGreg Clayton if (m_opaque_sp) 1450fc3f027dSGreg Clayton m_opaque_sp->SetCloseInputOnEOF(b); 1451fc3f027dSGreg Clayton } 1452061858ceSEnrico Granata 1453b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(const char *category_name) { 1454baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory, 1455baf5664fSJonas Devlieghere (const char *), category_name); 1456baf5664fSJonas Devlieghere 1457061858ceSEnrico Granata if (!category_name || *category_name == 0) 1458baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeCategory()); 1459061858ceSEnrico Granata 1460061858ceSEnrico Granata TypeCategoryImplSP category_sp; 1461061858ceSEnrico Granata 1462b9c1b51eSKate Stone if (DataVisualization::Categories::GetCategory(ConstString(category_name), 1463baf5664fSJonas Devlieghere category_sp, false)) { 1464baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeCategory(category_sp)); 1465baf5664fSJonas Devlieghere } else { 1466baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeCategory()); 1467baf5664fSJonas Devlieghere } 1468061858ceSEnrico Granata } 1469061858ceSEnrico Granata 1470b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategory(lldb::LanguageType lang_type) { 1471baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory, 1472baf5664fSJonas Devlieghere (lldb::LanguageType), lang_type); 1473baf5664fSJonas Devlieghere 1474e242624cSEnrico Granata TypeCategoryImplSP category_sp; 1475baf5664fSJonas Devlieghere if (DataVisualization::Categories::GetCategory(lang_type, category_sp)) { 1476baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeCategory(category_sp)); 1477baf5664fSJonas Devlieghere } else { 1478baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeCategory()); 1479baf5664fSJonas Devlieghere } 1480e242624cSEnrico Granata } 1481e242624cSEnrico Granata 1482b9c1b51eSKate Stone SBTypeCategory SBDebugger::CreateCategory(const char *category_name) { 1483baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory, 1484baf5664fSJonas Devlieghere (const char *), category_name); 1485baf5664fSJonas Devlieghere 1486061858ceSEnrico Granata if (!category_name || *category_name == 0) 1487baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeCategory()); 1488061858ceSEnrico Granata 1489061858ceSEnrico Granata TypeCategoryImplSP category_sp; 1490061858ceSEnrico Granata 1491b9c1b51eSKate Stone if (DataVisualization::Categories::GetCategory(ConstString(category_name), 1492baf5664fSJonas Devlieghere category_sp, true)) { 1493baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeCategory(category_sp)); 1494baf5664fSJonas Devlieghere } else { 1495baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeCategory()); 1496baf5664fSJonas Devlieghere } 1497061858ceSEnrico Granata } 1498061858ceSEnrico Granata 1499b9c1b51eSKate Stone bool SBDebugger::DeleteCategory(const char *category_name) { 1500baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBDebugger, DeleteCategory, (const char *), 1501baf5664fSJonas Devlieghere category_name); 1502baf5664fSJonas Devlieghere 1503061858ceSEnrico Granata if (!category_name || *category_name == 0) 1504061858ceSEnrico Granata return false; 1505061858ceSEnrico Granata 1506061858ceSEnrico Granata return DataVisualization::Categories::Delete(ConstString(category_name)); 1507061858ceSEnrico Granata } 1508061858ceSEnrico Granata 1509b9c1b51eSKate Stone uint32_t SBDebugger::GetNumCategories() { 1510baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBDebugger, GetNumCategories); 1511baf5664fSJonas Devlieghere 1512061858ceSEnrico Granata return DataVisualization::Categories::GetCount(); 1513061858ceSEnrico Granata } 1514061858ceSEnrico Granata 1515b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetCategoryAtIndex(uint32_t index) { 1516baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex, 1517baf5664fSJonas Devlieghere (uint32_t), index); 1518baf5664fSJonas Devlieghere 1519baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT( 1520baf5664fSJonas Devlieghere SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index))); 1521061858ceSEnrico Granata } 1522061858ceSEnrico Granata 1523b9c1b51eSKate Stone SBTypeCategory SBDebugger::GetDefaultCategory() { 1524baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBTypeCategory, SBDebugger, 1525baf5664fSJonas Devlieghere GetDefaultCategory); 1526baf5664fSJonas Devlieghere 1527baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(GetCategory("default")); 1528061858ceSEnrico Granata } 1529061858ceSEnrico Granata 1530b9c1b51eSKate Stone SBTypeFormat SBDebugger::GetFormatForType(SBTypeNameSpecifier type_name) { 1531baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType, 1532baf5664fSJonas Devlieghere (lldb::SBTypeNameSpecifier), type_name); 1533baf5664fSJonas Devlieghere 1534061858ceSEnrico Granata SBTypeCategory default_category_sb = GetDefaultCategory(); 1535061858ceSEnrico Granata if (default_category_sb.GetEnabled()) 1536baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(default_category_sb.GetFormatForType(type_name)); 1537baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeFormat()); 1538061858ceSEnrico Granata } 1539061858ceSEnrico Granata 1540b9c1b51eSKate Stone SBTypeSummary SBDebugger::GetSummaryForType(SBTypeNameSpecifier type_name) { 1541baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType, 1542baf5664fSJonas Devlieghere (lldb::SBTypeNameSpecifier), type_name); 1543baf5664fSJonas Devlieghere 1544dbb0abbfSEugene Zelenko if (!type_name.IsValid()) 1545baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeSummary()); 1546baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT( 1547baf5664fSJonas Devlieghere SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP()))); 1548061858ceSEnrico Granata } 1549061858ceSEnrico Granata 1550b9c1b51eSKate Stone SBTypeFilter SBDebugger::GetFilterForType(SBTypeNameSpecifier type_name) { 1551baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType, 1552baf5664fSJonas Devlieghere (lldb::SBTypeNameSpecifier), type_name); 1553baf5664fSJonas Devlieghere 1554dbb0abbfSEugene Zelenko if (!type_name.IsValid()) 1555baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeFilter()); 1556baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT( 1557baf5664fSJonas Devlieghere SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP()))); 1558061858ceSEnrico Granata } 1559061858ceSEnrico Granata 1560b9c1b51eSKate Stone SBTypeSynthetic SBDebugger::GetSyntheticForType(SBTypeNameSpecifier type_name) { 1561baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType, 1562baf5664fSJonas Devlieghere (lldb::SBTypeNameSpecifier), type_name); 1563baf5664fSJonas Devlieghere 1564dbb0abbfSEugene Zelenko if (!type_name.IsValid()) 1565baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeSynthetic()); 1566baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBTypeSynthetic( 1567baf5664fSJonas Devlieghere DataVisualization::GetSyntheticForType(type_name.GetSP()))); 1568061858ceSEnrico Granata } 1569061858ceSEnrico Granata 15705e336903SPavel Labath static llvm::ArrayRef<const char *> GetCategoryArray(const char **categories) { 15715e336903SPavel Labath if (categories == nullptr) 15725e336903SPavel Labath return {}; 15735e336903SPavel Labath size_t len = 0; 15745e336903SPavel Labath while (categories[len] != nullptr) 15755e336903SPavel Labath ++len; 15765e336903SPavel Labath return llvm::makeArrayRef(categories, len); 15775e336903SPavel Labath } 15785e336903SPavel Labath 1579b9c1b51eSKate Stone bool SBDebugger::EnableLog(const char *channel, const char **categories) { 1580baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBDebugger, EnableLog, (const char *, const char **), 1581baf5664fSJonas Devlieghere channel, categories); 1582baf5664fSJonas Devlieghere 1583b9c1b51eSKate Stone if (m_opaque_sp) { 1584b9c1b51eSKate Stone uint32_t log_options = 1585b9c1b51eSKate Stone LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME; 1586775588c0SPavel Labath std::string error; 1587775588c0SPavel Labath llvm::raw_string_ostream error_stream(error); 15885e336903SPavel Labath return m_opaque_sp->EnableLog(channel, GetCategoryArray(categories), "", 1589775588c0SPavel Labath log_options, error_stream); 1590b9c1b51eSKate Stone } else 1591228063cdSJim Ingham return false; 1592228063cdSJim Ingham } 15934f02b22dSJim Ingham 1594b9c1b51eSKate Stone void SBDebugger::SetLoggingCallback(lldb::LogOutputCallback log_callback, 1595b9c1b51eSKate Stone void *baton) { 15967bc83564SJonas Devlieghere LLDB_RECORD_DUMMY(void, SBDebugger, SetLoggingCallback, 15977bc83564SJonas Devlieghere (lldb::LogOutputCallback, void *), log_callback, baton); 15980d7b0c96SJonas Devlieghere 1599b9c1b51eSKate Stone if (m_opaque_sp) { 16004f02b22dSJim Ingham return m_opaque_sp->SetLoggingCallback(log_callback, baton); 16014f02b22dSJim Ingham } 16024f02b22dSJim Ingham } 1603ae211eceSMichal Gorny 1604ae211eceSMichal Gorny namespace lldb_private { 1605ae211eceSMichal Gorny namespace repro { 1606ae211eceSMichal Gorny 1607d9aec34bSJonas Devlieghere template <> void RegisterMethods<SBInputReader>(Registry &R) { 1608ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBInputReader, SetIsDone, (bool)); 1609ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBInputReader, IsActive, ()); 1610ae211eceSMichal Gorny } 1611ae211eceSMichal Gorny 1612ae211eceSMichal Gorny static void SetFileHandleRedirect(SBDebugger *, FILE *, bool) { 1613ae211eceSMichal Gorny // Do nothing. 1614ae211eceSMichal Gorny } 1615ae211eceSMichal Gorny 161696898eb6SLawrence D'Anna static SBError SetFileRedirect(SBDebugger *, SBFile file) { return SBError(); } 161796898eb6SLawrence D'Anna 1618c040b30fSLawrence D'Anna static SBError SetFileRedirect(SBDebugger *, FileSP file) { return SBError(); } 1619c040b30fSLawrence D'Anna 1620ae211eceSMichal Gorny static bool GetDefaultArchitectureRedirect(char *arch_name, 1621ae211eceSMichal Gorny size_t arch_name_len) { 1622ae211eceSMichal Gorny // The function is writing to its argument. Without the redirect it would 1623ae211eceSMichal Gorny // write into the replay buffer. 1624ae211eceSMichal Gorny char buffer[1024]; 1625ae211eceSMichal Gorny return SBDebugger::GetDefaultArchitecture(buffer, arch_name_len); 1626ae211eceSMichal Gorny } 1627ae211eceSMichal Gorny 1628d9aec34bSJonas Devlieghere template <> void RegisterMethods<SBDebugger>(Registry &R) { 1629ae211eceSMichal Gorny // Custom implementation. 1630ae211eceSMichal Gorny R.Register(&invoke<void (SBDebugger::*)( 1631ae211eceSMichal Gorny FILE *, bool)>::method<&SBDebugger::SetErrorFileHandle>::doit, 1632ae211eceSMichal Gorny &SetFileHandleRedirect); 1633ae211eceSMichal Gorny R.Register(&invoke<void (SBDebugger::*)( 1634ae211eceSMichal Gorny FILE *, bool)>::method<&SBDebugger::SetOutputFileHandle>::doit, 1635ae211eceSMichal Gorny &SetFileHandleRedirect); 1636ae211eceSMichal Gorny R.Register<bool(char *, size_t)>(static_cast<bool (*)(char *, size_t)>( 1637ae211eceSMichal Gorny &SBDebugger::GetDefaultArchitecture), 1638ae211eceSMichal Gorny &GetDefaultArchitectureRedirect); 1639ae211eceSMichal Gorny 164096898eb6SLawrence D'Anna R.Register(&invoke<SBError (SBDebugger::*)( 164196898eb6SLawrence D'Anna SBFile)>::method<&SBDebugger::SetInputFile>::doit, 164296898eb6SLawrence D'Anna &SetFileRedirect); 164396898eb6SLawrence D'Anna R.Register(&invoke<SBError (SBDebugger::*)( 164496898eb6SLawrence D'Anna SBFile)>::method<&SBDebugger::SetOutputFile>::doit, 164596898eb6SLawrence D'Anna &SetFileRedirect); 164696898eb6SLawrence D'Anna R.Register(&invoke<SBError (SBDebugger::*)( 164796898eb6SLawrence D'Anna SBFile)>::method<&SBDebugger::SetErrorFile>::doit, 164896898eb6SLawrence D'Anna &SetFileRedirect); 164996898eb6SLawrence D'Anna 1650c040b30fSLawrence D'Anna R.Register(&invoke<SBError (SBDebugger::*)( 1651c040b30fSLawrence D'Anna FileSP)>::method<&SBDebugger::SetInputFile>::doit, 1652c040b30fSLawrence D'Anna &SetFileRedirect); 1653c040b30fSLawrence D'Anna R.Register(&invoke<SBError (SBDebugger::*)( 1654c040b30fSLawrence D'Anna FileSP)>::method<&SBDebugger::SetOutputFile>::doit, 1655c040b30fSLawrence D'Anna &SetFileRedirect); 1656c040b30fSLawrence D'Anna R.Register(&invoke<SBError (SBDebugger::*)( 1657c040b30fSLawrence D'Anna FileSP)>::method<&SBDebugger::SetErrorFile>::doit, 1658c040b30fSLawrence D'Anna &SetFileRedirect); 1659c040b30fSLawrence D'Anna 1660ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBDebugger, ()); 1661ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::DebuggerSP &)); 1662ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBDebugger, (const lldb::SBDebugger &)); 1663ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBDebugger &, 1664ae211eceSMichal Gorny SBDebugger, operator=,(const lldb::SBDebugger &)); 1665ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Initialize, ()); 1666ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger, 1667ae211eceSMichal Gorny InitializeWithErrorHandling, ()); 1668ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Terminate, ()); 1669ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, Clear, ()); 1670ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, ()); 1671ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, Create, (bool)); 1672d9aec34bSJonas Devlieghere LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, Destroy, (lldb::SBDebugger &)); 1673ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(void, SBDebugger, MemoryPressureDetected, ()); 1674ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, IsValid, ()); 1675ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, operator bool,()); 1676ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SetAsync, (bool)); 1677ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBDebugger, GetAsync, ()); 1678ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SkipLLDBInitFiles, (bool)); 1679ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SkipAppInitFiles, (bool)); 1680ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SetInputFileHandle, (FILE *, bool)); 1681ae211eceSMichal Gorny LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetInputFileHandle, ()); 1682ae211eceSMichal Gorny LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetOutputFileHandle, ()); 1683ae211eceSMichal Gorny LLDB_REGISTER_METHOD(FILE *, SBDebugger, GetErrorFileHandle, ()); 168496898eb6SLawrence D'Anna LLDB_REGISTER_METHOD(SBFile, SBDebugger, GetInputFile, ()); 168596898eb6SLawrence D'Anna LLDB_REGISTER_METHOD(SBFile, SBDebugger, GetOutputFile, ()); 168696898eb6SLawrence D'Anna LLDB_REGISTER_METHOD(SBFile, SBDebugger, GetErrorFile, ()); 1687ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SaveInputTerminalState, ()); 1688ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, RestoreInputTerminalState, ()); 1689ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBCommandInterpreter, SBDebugger, 1690ae211eceSMichal Gorny GetCommandInterpreter, ()); 1691ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, HandleCommand, (const char *)); 1692ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBListener, SBDebugger, GetListener, ()); 1693ae211eceSMichal Gorny LLDB_REGISTER_METHOD( 1694ae211eceSMichal Gorny void, SBDebugger, HandleProcessEvent, 1695ae211eceSMichal Gorny (const lldb::SBProcess &, const lldb::SBEvent &, FILE *, FILE *)); 1696322f12afSLawrence D'Anna LLDB_REGISTER_METHOD( 1697322f12afSLawrence D'Anna void, SBDebugger, HandleProcessEvent, 1698322f12afSLawrence D'Anna (const lldb::SBProcess &, const lldb::SBEvent &, SBFile, SBFile)); 1699322f12afSLawrence D'Anna LLDB_REGISTER_METHOD( 1700322f12afSLawrence D'Anna void, SBDebugger, HandleProcessEvent, 1701322f12afSLawrence D'Anna (const lldb::SBProcess &, const lldb::SBEvent &, FileSP, FileSP)); 1702d9aec34bSJonas Devlieghere LLDB_REGISTER_METHOD(lldb::SBSourceManager, SBDebugger, GetSourceManager, ()); 1703ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, SetDefaultArchitecture, 1704ae211eceSMichal Gorny (const char *)); 1705ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::ScriptLanguage, SBDebugger, GetScriptingLanguage, 1706ae211eceSMichal Gorny (const char *)); 1707ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, GetVersionString, ()); 1708ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(const char *, SBDebugger, StateAsCString, 1709ae211eceSMichal Gorny (lldb::StateType)); 1710ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(lldb::SBStructuredData, SBDebugger, 1711ae211eceSMichal Gorny GetBuildConfiguration, ()); 1712ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsRunningState, 1713ae211eceSMichal Gorny (lldb::StateType)); 1714ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(bool, SBDebugger, StateIsStoppedState, 1715ae211eceSMichal Gorny (lldb::StateType)); 1716ae211eceSMichal Gorny LLDB_REGISTER_METHOD( 1717ae211eceSMichal Gorny lldb::SBTarget, SBDebugger, CreateTarget, 1718ae211eceSMichal Gorny (const char *, const char *, const char *, bool, lldb::SBError &)); 1719ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, 1720ae211eceSMichal Gorny CreateTargetWithFileAndTargetTriple, 1721ae211eceSMichal Gorny (const char *, const char *)); 1722d9aec34bSJonas Devlieghere LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, CreateTargetWithFileAndArch, 1723ae211eceSMichal Gorny (const char *, const char *)); 1724ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, CreateTarget, 1725ae211eceSMichal Gorny (const char *)); 1726ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetDummyTarget, ()); 1727ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteTarget, (lldb::SBTarget &)); 1728ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetTargetAtIndex, 1729ae211eceSMichal Gorny (uint32_t)); 1730ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetIndexOfTarget, 1731ae211eceSMichal Gorny (lldb::SBTarget)); 1732ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithProcessID, 1733ae211eceSMichal Gorny (lldb::pid_t)); 1734ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, FindTargetWithFileAndArch, 1735ae211eceSMichal Gorny (const char *, const char *)); 1736ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumTargets, ()); 1737ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTarget, SBDebugger, GetSelectedTarget, ()); 1738d9aec34bSJonas Devlieghere LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedTarget, (lldb::SBTarget &)); 1739ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetSelectedPlatform, ()); 1740ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SetSelectedPlatform, 1741ae211eceSMichal Gorny (lldb::SBPlatform &)); 1742ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumPlatforms, ()); 1743ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBPlatform, SBDebugger, GetPlatformAtIndex, 1744ae211eceSMichal Gorny (uint32_t)); 1745ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumAvailablePlatforms, ()); 1746ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBStructuredData, SBDebugger, 1747ae211eceSMichal Gorny GetAvailablePlatformInfoAtIndex, (uint32_t)); 1748ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputInterrupt, ()); 1749ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, DispatchInputEndOfFile, ()); 1750ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, PushInputReader, 1751ae211eceSMichal Gorny (lldb::SBInputReader &)); 1752ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter, (bool, bool)); 1753ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, RunCommandInterpreter, 1754ae211eceSMichal Gorny (bool, bool, lldb::SBCommandInterpreterRunOptions &, 1755ae211eceSMichal Gorny int &, bool &, bool &)); 1756ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, RunREPL, 1757ae211eceSMichal Gorny (lldb::LanguageType, const char *)); 1758d9aec34bSJonas Devlieghere LLDB_REGISTER_STATIC_METHOD(lldb::SBDebugger, SBDebugger, FindDebuggerWithID, 1759d9aec34bSJonas Devlieghere (int)); 1760ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBDebugger, GetInstanceName, ()); 1761ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(lldb::SBError, SBDebugger, SetInternalVariable, 1762ae211eceSMichal Gorny (const char *, const char *, const char *)); 1763ae211eceSMichal Gorny LLDB_REGISTER_STATIC_METHOD(lldb::SBStringList, SBDebugger, 1764ae211eceSMichal Gorny GetInternalVariableValue, 1765ae211eceSMichal Gorny (const char *, const char *)); 1766ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(uint32_t, SBDebugger, GetTerminalWidth, ()); 1767ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SetTerminalWidth, (uint32_t)); 1768ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetPrompt, ()); 1769ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SetPrompt, (const char *)); 1770ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(const char *, SBDebugger, GetReproducerPath, ()); 1771ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::ScriptLanguage, SBDebugger, 1772ae211eceSMichal Gorny GetScriptLanguage, ()); 1773ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SetScriptLanguage, 1774ae211eceSMichal Gorny (lldb::ScriptLanguage)); 1775ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseExternalEditor, (bool)); 1776ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBDebugger, GetUseExternalEditor, ()); 1777ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBDebugger, SetUseColor, (bool)); 1778ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetUseColor, ()); 1779ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBDebugger, GetDescription, (lldb::SBStream &)); 1780ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::user_id_t, SBDebugger, GetID, ()); 1781ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBDebugger, SetCurrentPlatform, 1782ae211eceSMichal Gorny (const char *)); 1783ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBDebugger, SetCurrentPlatformSDKRoot, 1784ae211eceSMichal Gorny (const char *)); 1785ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBDebugger, GetCloseInputOnEOF, ()); 1786ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBDebugger, SetCloseInputOnEOF, (bool)); 1787ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory, 1788ae211eceSMichal Gorny (const char *)); 1789ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategory, 1790ae211eceSMichal Gorny (lldb::LanguageType)); 1791ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, CreateCategory, 1792ae211eceSMichal Gorny (const char *)); 1793ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBDebugger, DeleteCategory, (const char *)); 1794ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBDebugger, GetNumCategories, ()); 1795ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetCategoryAtIndex, 1796ae211eceSMichal Gorny (uint32_t)); 1797ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeCategory, SBDebugger, GetDefaultCategory, 1798ae211eceSMichal Gorny ()); 1799ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeFormat, SBDebugger, GetFormatForType, 1800ae211eceSMichal Gorny (lldb::SBTypeNameSpecifier)); 1801ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeSummary, SBDebugger, GetSummaryForType, 1802ae211eceSMichal Gorny (lldb::SBTypeNameSpecifier)); 1803ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeSynthetic, SBDebugger, GetSyntheticForType, 1804ae211eceSMichal Gorny (lldb::SBTypeNameSpecifier)); 1805ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeFilter, SBDebugger, GetFilterForType, 1806ae211eceSMichal Gorny (lldb::SBTypeNameSpecifier)); 1807ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBDebugger, EnableLog, 1808ae211eceSMichal Gorny (const char *, const char **)); 1809ae211eceSMichal Gorny } 1810ae211eceSMichal Gorny 1811d9aec34bSJonas Devlieghere } // namespace repro 1812d9aec34bSJonas Devlieghere } // namespace lldb_private 1813