124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBThread.h ----------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef LLDB_SBThread_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBThread_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1374089e10cfbb4665da128f26d78c2b4006b5f1c6Christopher Friesen#include "lldb/API/SBDefines.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 157884ab842f7f0be6c583eac2904f5763706816bcEli Friedman#include <stdio.h> 167884ab842f7f0be6c583eac2904f5763706816bcEli Friedman 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb { 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBFrame; 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBThread 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2494a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham enum 2594a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham { 2694a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham eBroadcastBitStackChanged = (1 << 0), 2794a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham eBroadcastBitThreadSuspended = (1 << 1), 2894a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham eBroadcastBitThreadResumed = (1 << 2), 292e2812388b75d3c62c9518cc1a6550ce29325aa6Jim Ingham eBroadcastBitSelectedFrameChanged = (1 << 3), 302e2812388b75d3c62c9518cc1a6550ce29325aa6Jim Ingham eBroadcastBitThreadSelected = (1 << 4) 3194a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham }; 3294a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 3394a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham static const char * 3494a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham GetBroadcasterClassName (); 3594a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread (); 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread (const lldb::SBThread &thread); 39001cd53e9d8d9e481ada536924ea7563b84ee9cfEnrico Granata 40001cd53e9d8d9e481ada536924ea7563b84ee9cfEnrico Granata SBThread (const lldb::ThreadSP& lldb_object_sp); 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~SBThread(); 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsValid() const; 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4743490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton void 4843490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton Clear (); 4943490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StopReason 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStopReason(); 52640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 532ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Get the number of words associated with the stop reason. 542ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// See also GetStopReasonDataAtIndex(). 55640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton size_t 56640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton GetStopReasonDataCount(); 57640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 58640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton //-------------------------------------------------------------------------- 592ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Get information associated with a stop reason. 602ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 612ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Breakpoint stop reasons will have data that consists of pairs of 622ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// breakpoint IDs followed by the breakpoint location IDs (they always come 632ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// in pairs). 642ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 652ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Stop Reason Count Data Type 662ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// ======================== ===== ========================================= 672ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonNone 0 682ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonTrace 0 692ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonBreakpoint N duple: {breakpoint id, location id} 70bcbefa8de7877c5d0674d5816cf96db48b103e6fJohnny Chen /// eStopReasonWatchpoint 1 watchpoint id 712ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonSignal 1 unix signal number 722ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonException N exception data 730bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// eStopReasonExec 0 742ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonPlanComplete 0 75640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton //-------------------------------------------------------------------------- 76640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton uint64_t 77640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton GetStopReasonDataAtIndex(uint32_t idx); 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStopDescription (char *dst, size_t dst_len); 811586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham 821586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham SBValue 831586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham GetStopReturnValue (); 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::tid_t 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetThreadID () const; 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIndexID () const; 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName () const; 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetQueueName() const; 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepOver (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping); 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepInto (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping); 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 104f2ca573e8dc034ecc5050a874d8f01ace0703e18Jim Ingham StepInto (const char *target_name, lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping); 105f2ca573e8dc034ecc5050a874d8f01ace0703e18Jim Ingham 106f2ca573e8dc034ecc5050a874d8f01ace0703e18Jim Ingham void 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepOut (); 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 1101ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton StepOutOfFrame (lldb::SBFrame &frame); 1111ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton 1121ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton void 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepInstruction(bool step_over); 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1151ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton SBError 1161ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton StepOverUntil (lldb::SBFrame &frame, 1171ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton lldb::SBFileSpec &file_spec, 1181ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton uint32_t line); 1191ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RunToAddress (lldb::addr_t addr); 122a17a81a1a9ff6b8d87c4a1e47dd874f6ea8a4f1dJim Ingham 123a17a81a1a9ff6b8d87c4a1e47dd874f6ea8a4f1dJim Ingham SBError 124f59388aa57559d7d074613d65b88abacfd699845Jim Ingham ReturnFromFrame (SBFrame &frame, SBValue &return_value); 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 126123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton //-------------------------------------------------------------------------- 1272ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// LLDB currently supports process centric debugging which means when any 1282ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// thread in a process stops, all other threads are stopped. The Suspend() 1292ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// call here tells our process to suspend a thread and not let it run when 1302ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// the other threads in a process are allowed to run. So when 1312ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// SBProcess::Continue() is called, any threads that aren't suspended will 1322ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// be allowed to run. If any of the SBThread functions for stepping are 1332ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// called (StepOver, StepInto, StepOut, StepInstruction, RunToAddres), the 13423df42a102f7f4c83128865e396eb9411f9a3cddAndrew Kaylor /// thread will not be allowed to run and these funtions will simply return. 1352ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 1362ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Eventually we plan to add support for thread centric debugging where 1372ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// each thread is controlled individually and each thread would broadcast 1382ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// its state, but we haven't implemented this yet. 1392ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 1402ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Likewise the SBThread::Resume() call will again allow the thread to run 1412ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// when the process is continued. 1422ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 1432ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Suspend() and Resume() functions are not currently reference counted, if 1442ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// anyone has the need for them to be reference counted, please let us 1452ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// know. 146123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton //-------------------------------------------------------------------------- 147123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton bool 148123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton Suspend(); 149123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton 150123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton bool 151123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton Resume (); 152123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton 153123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton bool 154123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton IsSuspended(); 155123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton 1562c354722318f0fcad087c76f2bc0dc8db9200b4bAndrew Kaylor bool 1572c354722318f0fcad087c76f2bc0dc8db9200b4bAndrew Kaylor IsStopped(); 1582c354722318f0fcad087c76f2bc0dc8db9200b4bAndrew Kaylor 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumFrames (); 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::SBFrame 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFrameAtIndex (uint32_t idx); 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 165c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton lldb::SBFrame 166c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton GetSelectedFrame (); 167c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton 168c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton lldb::SBFrame 169c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton SetSelectedFrame (uint32_t frame_idx); 17094a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 17194a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham static bool 17294a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham EventIsThreadEvent (const SBEvent &event); 17394a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 17494a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham static SBFrame 17594a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham GetStackFrameFromEvent (const SBEvent &event); 17694a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 17794a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham static SBThread 17894a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham GetThreadFromEvent (const SBEvent &event); 179c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::SBProcess 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetProcess (); 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::SBThread & 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator = (const lldb::SBThread &rhs); 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator == (const lldb::SBThread &rhs) const; 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator != (const lldb::SBThread &rhs) const; 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice bool 1937826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice GetDescription (lldb::SBStream &description) const; 19494a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 19594a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham bool 19694a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham GetStatus (lldb::SBStream &status) const; 1977826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBBreakpoint; 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBBreakpointLocation; 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBFrame; 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBProcess; 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBDebugger; 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBValue; 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetThread (const lldb::ThreadSP& lldb_object_sp); 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20988e3de205708f14431559072ca258899b5ac31ccJim Ingham#ifndef SWIG 21088e3de205708f14431559072ca258899b5ac31ccJim Ingham SBError 21188e3de205708f14431559072ca258899b5ac31ccJim Ingham ResumeNewPlan (lldb_private::ExecutionContext &exe_ctx, lldb_private::ThreadPlan *new_plan); 21288e3de205708f14431559072ca258899b5ac31ccJim Ingham#endif 21388e3de205708f14431559072ca258899b5ac31ccJim Ingham 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 215a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton lldb::ExecutionContextRefSP m_opaque_sp; 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // LLDB_SBThread_h_ 221