124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- BreakpointLocationCollection.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 liblldb_BreakpointLocationCollection_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_BreakpointLocationCollection_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass BreakpointLocationCollection 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointLocationCollection(); 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~BreakpointLocationCollection(); 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Add the breakpoint \a bp_loc_sp to the list. 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] bp_sp 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Shared pointer to the breakpoint location that will get added 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to the list. 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @result 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns breakpoint location id. 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Add (const lldb::BreakpointLocationSP& bp_loc_sp); 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Removes the breakpoint location given by \b breakID from this 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// list. 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] break_id 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The breakpoint index to remove. 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] break_loc_id 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The breakpoint location index in break_id to remove. 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @result 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if the breakpoint was in the list. 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 5654e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton Remove (lldb::break_id_t break_id, lldb::break_id_t break_loc_id); 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a shared pointer to the breakpoint location with id \a 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// breakID. 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] break_id 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The breakpoint ID to seek for. 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] break_loc_id 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The breakpoint location ID in \a break_id to seek for. 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @result 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A shared pointer to the breakpoint. May contain a NULL 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// pointer if the breakpoint doesn't exist. 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointLocationSP 7354e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id); 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a shared pointer to the breakpoint location with id \a 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// breakID, const version. 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] breakID 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The breakpoint location ID to seek for. 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] break_loc_id 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The breakpoint location ID in \a break_id to seek for. 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @result 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A shared pointer to the breakpoint. May contain a NULL 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// pointer if the breakpoint doesn't exist. 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::BreakpointLocationSP 9054e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const; 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a shared pointer to the breakpoint location with index 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a i. 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] i 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The breakpoint location index to seek for. 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @result 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A shared pointer to the breakpoint. May contain a NULL 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// pointer if the breakpoint doesn't exist. 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointLocationSP 10436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetByIndex (size_t i); 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a shared pointer to the breakpoint location with index 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a i, const version. 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] i 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The breakpoint location index to seek for. 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @result 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A shared pointer to the breakpoint. May contain a NULL 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// pointer if the breakpoint doesn't exist. 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::BreakpointLocationSP 11836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetByIndex (size_t i) const; 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns the number of elements in this breakpoint location list. 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @result 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of elements. 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSize() const { return m_break_loc_collection.size(); } 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Enquires of all the breakpoint locations in this list whether 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// we should stop at a hit at \a breakID. 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] context 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This contains the information about this stop. 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] breakID 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This break ID that we hit. 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if we should stop, \b false otherwise. 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ShouldStop (StoppointCallbackContext *context); 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Print a description of the breakpoint locations in this list 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to the stream \a s. 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to print the description. 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] level 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The description level that indicates the detail level to 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// provide. 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb::DescriptionLevel 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void GetDescription (Stream *s, lldb::DescriptionLevel level); 1593c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham 1603c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham //------------------------------------------------------------------ 1613c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// Check whether this collection of breakpoint locations have any 1623c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// thread specifiers, and if yes, is \a thread_id contained in any 1633c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// of these specifiers. 1643c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// 1653c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// @param[in] thread 1663c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// The thread against which to test. 1673c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// 1683c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// return 1693c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// \b true if the collection contains at least one location that 1703c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham /// would be valid for this thread, false otherwise. 1713c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham //------------------------------------------------------------------ 1723c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham bool ValidForThisThread (Thread *thread); 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 174090f83176695d86197b0e86b67dee4160ec5003dJim Ingham //------------------------------------------------------------------ 175090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// Tell whether ALL the breakpoints in the location collection are internal. 176090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// 177090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// @result 178090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// \b true if all breakpoint locations are owned by internal breakpoints, 179090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// \b false otherwise. 180090f83176695d86197b0e86b67dee4160ec5003dJim Ingham //------------------------------------------------------------------ 181090f83176695d86197b0e86b67dee4160ec5003dJim Ingham bool IsInternal() const; 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Classes that inherit from BreakpointLocationCollection can see 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // and modify these 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For BreakpointLocationCollection only 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<lldb::BreakpointLocationSP> collection; 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner collection::iterator 19854e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton GetIDPairIterator(lldb::break_id_t break_id, lldb::break_id_t break_loc_id); 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner collection::const_iterator 20154e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton GetIDPairConstIterator(lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const; 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner collection m_break_loc_collection; 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_BreakpointLocationCollection_h_ 210