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