1643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton//===-- StopInfo.h ----------------------------------------------*- C++ -*-===// 2643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// 3643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// The LLVM Compiler Infrastructure 4643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// 5643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// This file is distributed under the University of Illinois Open Source 6643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// License. See LICENSE.TXT for details. 7643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// 8643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton//===----------------------------------------------------------------------===// 9643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 10643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton#ifndef liblldb_StopInfo_h_ 11643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton#define liblldb_StopInfo_h_ 12643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 13643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// C Includes 14643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// C++ Includes 156561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton#include <string> 166561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton 17643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// Other libraries and framework includes 18643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton// Project includes 19b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/lldb-public.h" 2079f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham#include "lldb/Target/Process.h" 21643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 22643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Claytonnamespace lldb_private { 23643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 24643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Claytonclass StopInfo 25643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton{ 262d05dc6dc93ebe03e406ab93efeb420fa18fa25aDaniel Malea friend class Process::ProcessEventData; 2779f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham friend class ThreadPlanBase; 2879f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham 29643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Claytonpublic: 30643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton //------------------------------------------------------------------ 31643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton // Constructors and Destructors 32643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton //------------------------------------------------------------------ 33643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton StopInfo (Thread &thread, uint64_t value); 34643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 35643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton virtual ~StopInfo() 36643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton { 37643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton } 38643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 39643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 40643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton bool 41643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton IsValid () const; 42643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 43a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton void 44a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton SetThread (const lldb::ThreadSP &thread_sp) 45a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton { 46a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton m_thread_wp = thread_sp; 47a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton } 48a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton 498a1e6542c5b125613ffce3039aa713ee6ea07dcfGreg Clayton lldb::ThreadSP 50643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton GetThread() const 51643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton { 528a1e6542c5b125613ffce3039aa713ee6ea07dcfGreg Clayton return m_thread_wp.lock(); 53643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton } 54643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 55988ddbcdc1a7f362968a1e3bfcd7fda39e7345eeJim Ingham // The value of the StopInfo depends on the StopReason. 56988ddbcdc1a7f362968a1e3bfcd7fda39e7345eeJim Ingham // StopReason Meaning 57988ddbcdc1a7f362968a1e3bfcd7fda39e7345eeJim Ingham // ---------------------------------------------- 58988ddbcdc1a7f362968a1e3bfcd7fda39e7345eeJim Ingham // eStopReasonBreakpoint BreakpointSiteID 59988ddbcdc1a7f362968a1e3bfcd7fda39e7345eeJim Ingham // eStopReasonSignal Signal number 60043f8c230739ceab194257a617731ecd28e1a912Johnny Chen // eStopReasonWatchpoint WatchpointLocationID 61988ddbcdc1a7f362968a1e3bfcd7fda39e7345eeJim Ingham // eStopReasonPlanComplete No significance 62988ddbcdc1a7f362968a1e3bfcd7fda39e7345eeJim Ingham 63643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton uint64_t 64643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton GetValue() const 65643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton { 66643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton return m_value; 67643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton } 68643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 69643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton virtual lldb::StopReason 70643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton GetStopReason () const = 0; 7179f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham 72e787c7ea61b1d857b56a0c42a1cf7535115ecbfcJim Ingham // ShouldStopSynchronous will get called before any thread plans are consulted, and if it says we should 73e787c7ea61b1d857b56a0c42a1cf7535115ecbfcJim Ingham // resume the target, then we will just immediately resume. This should not run any code in or resume the 74e787c7ea61b1d857b56a0c42a1cf7535115ecbfcJim Ingham // target. 75e787c7ea61b1d857b56a0c42a1cf7535115ecbfcJim Ingham 76e787c7ea61b1d857b56a0c42a1cf7535115ecbfcJim Ingham virtual bool 77e787c7ea61b1d857b56a0c42a1cf7535115ecbfcJim Ingham ShouldStopSynchronous (Event *event_ptr) 78e787c7ea61b1d857b56a0c42a1cf7535115ecbfcJim Ingham { 79e787c7ea61b1d857b56a0c42a1cf7535115ecbfcJim Ingham return true; 80e787c7ea61b1d857b56a0c42a1cf7535115ecbfcJim Ingham } 81643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 827c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham void 837c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham OverrideShouldNotify (bool override_value) 847c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham { 857c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham m_override_should_notify = override_value ? eLazyBoolYes : eLazyBoolNo; 867c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham } 877c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham 88643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton // If should stop returns false, check if we should notify of this event 89643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton virtual bool 90643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton ShouldNotify (Event *event_ptr) 91643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton { 927c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham if (m_override_should_notify == eLazyBoolCalculate) 937c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham return DoShouldNotify (event_ptr); 947c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham else 957c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham return m_override_should_notify == eLazyBoolYes; 96643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton } 97643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 98643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton virtual void 99643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton WillResume (lldb::StateType resume_state) 100643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton { 101643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton // By default, don't do anything 102643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton } 103643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 104643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton virtual const char * 1056561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton GetDescription () 1066561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton { 1076561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton return m_description.c_str(); 1086561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton } 109643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 1106561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton virtual void 1116561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton SetDescription (const char *desc_cstr) 1126561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton { 1136561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton if (desc_cstr && desc_cstr[0]) 1146561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton m_description.assign (desc_cstr); 1156561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton else 1166561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton m_description.clear(); 1176561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton } 11889e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 11989e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham // Sometimes the thread plan logic will know that it wants a given stop to stop or not, 12089e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham // regardless of what the ordinary logic for that StopInfo would dictate. The main example 12189e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham // of this is the ThreadPlanCallFunction, which for instance knows - based on how that particular 12289e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham // expression was executed - whether it wants all breakpoints to auto-continue or not. 12389e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham // Use OverrideShouldStop on the StopInfo to implement this. 12489e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 12589e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham void 12689e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham OverrideShouldStop (bool override_value) 12789e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham { 1287c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham m_override_should_stop = override_value ? eLazyBoolYes : eLazyBoolNo; 12989e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham } 13089e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 13189e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham bool 13289e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham GetOverrideShouldStop() 13389e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham { 1347c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham return m_override_should_stop != eLazyBoolCalculate; 13589e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham } 13689e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 13789e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham bool 13889e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham GetOverriddenShouldStopValue () 13989e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham { 1407c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham return m_override_should_stop == eLazyBoolYes; 14189e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham } 14289e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 143643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton static lldb::StopInfoSP 144643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton CreateStopReasonWithBreakpointSiteID (Thread &thread, lldb::break_id_t break_id); 145643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 146d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham // This creates a StopInfo for the thread where the should_stop is already set, and won't be recalculated. 147d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham static lldb::StopInfoSP 148d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham CreateStopReasonWithBreakpointSiteID (Thread &thread, lldb::break_id_t break_id, bool should_stop); 149d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham 150643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton static lldb::StopInfoSP 151643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton CreateStopReasonWithWatchpointID (Thread &thread, lldb::break_id_t watch_id); 152643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 153643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton static lldb::StopInfoSP 154643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton CreateStopReasonWithSignal (Thread &thread, int signo); 155643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 156643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton static lldb::StopInfoSP 157643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton CreateStopReasonToTrace (Thread &thread); 158643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 159643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton static lldb::StopInfoSP 1601586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham CreateStopReasonWithPlan (lldb::ThreadPlanSP &plan, lldb::ValueObjectSP return_valobj_sp); 161643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 1626561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton static lldb::StopInfoSP 1636561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton CreateStopReasonWithException (Thread &thread, const char *description); 1641586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham 1650bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton static lldb::StopInfoSP 1660bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton CreateStopReasonWithExec (Thread &thread); 1670bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton 1681586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham static lldb::ValueObjectSP 1691586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham GetReturnValueObject (lldb::StopInfoSP &stop_info_sp); 1706561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton 171643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Claytonprotected: 17279f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham // Perform any action that is associated with this stop. This is done as the 17379f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham // Event is removed from the event queue. ProcessEventData::DoOnRemoval does the job. 17489e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 17579f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham virtual void 17679f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham PerformAction (Event *event_ptr) 17779f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham { 17879f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham } 17979f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham 1807c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham virtual bool 1817c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham DoShouldNotify (Event *event_ptr) 1827c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham { 1837c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham return false; 1847c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham } 1857c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham 18679f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham // Stop the thread by default. Subclasses can override this to allow 18779f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham // the thread to continue if desired. The ShouldStop method should not do anything 18879f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham // that might run code. If you need to run code when deciding whether to stop 18979f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham // at this StopInfo, that must be done in the PerformAction. 19079f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham // The PerformAction will always get called before the ShouldStop. This is done by the 19179f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham // ProcessEventData::DoOnRemoval, though the ThreadPlanBase needs to consult this later on. 19279f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham virtual bool 19379f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham ShouldStop (Event *event_ptr) 19479f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham { 19579f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham return true; 19679f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham } 19779f7143ebc923d1eaf62d671127a9dfe4b14a942Jim Ingham 198643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton //------------------------------------------------------------------ 199643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton // Classes that inherit from StackID can see and modify these 200643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton //------------------------------------------------------------------ 2018a1e6542c5b125613ffce3039aa713ee6ea07dcfGreg Clayton lldb::ThreadWP m_thread_wp; // The thread corresponding to the stop reason. 20215dcb7ca49b8d8f46910cf085b4c249aac5317faJim Ingham uint32_t m_stop_id; // The process stop ID for which this stop info is valid 2030296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham uint32_t m_resume_id; // This is the resume ID when we made this stop ID. 204643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton uint64_t m_value; // A generic value that can be used for things pertaining to this stop info 2056561155acc9dee660de73e4aa8215839a06f01a7Greg Clayton std::string m_description; // A textual description describing this stop. 2067c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham LazyBool m_override_should_notify; 2077c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham LazyBool m_override_should_stop; 20821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 2090296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham // This determines whether the target has run since this stop info. 2100296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham // N.B. running to evaluate a user expression does not count. 2110296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham bool HasTargetRunSinceMe (); 21221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 2137de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata // MakeStopInfoValid is necessary to allow saved stop infos to resurrect themselves as valid. 2147de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata // It should only be used by Thread::RestoreThreadStateFromCheckpoint and to make sure the one-step 2157de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata // needed for before-the-fact watchpoints does not prevent us from stopping 21615dcb7ca49b8d8f46910cf085b4c249aac5317faJim Ingham void 21715dcb7ca49b8d8f46910cf085b4c249aac5317faJim Ingham MakeStopInfoValid (); 21815dcb7ca49b8d8f46910cf085b4c249aac5317faJim Ingham 2197de2a3b03f37987c67f142ce328cc2484c831468Enrico Granataprivate: 2207de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata friend class Thread; 2217de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata 222643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton DISALLOW_COPY_AND_ASSIGN (StopInfo); 223643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton}; 224643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 225643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton} // namespace lldb_private 226643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 227643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton#endif // liblldb_StopInfo_h_ 228