124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- BreakpointLocation.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_BreakpointLocation_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_BreakpointLocation_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list> 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/StoppointLocation.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Address.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StringList.h" 25d93d9131514d1c6f849a06180ec2f01d7792a661Sean Callanan#include "lldb/Core/UserID.h" 26d93d9131514d1c6f849a06180ec2f01d7792a661Sean Callanan#include "lldb/Host/Mutex.h" 27d93d9131514d1c6f849a06180ec2f01d7792a661Sean Callanan#include "lldb/Target/Process.h" 2828195f9e55173cd06c3c5f9e69cefeb1d03cc129Sean Callanan#include "lldb/Expression/ClangUserExpression.h" 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class BreakpointLocation BreakpointLocation.h "lldb/Breakpoint/BreakpointLocation.h" 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief Class that manages one unique (by address) instance of a logical breakpoint. 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// General Outline: 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// A breakpoint location is defined by the breakpoint that produces it, 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// and the address that resulted in this particular instantiation. 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Each breakpoint location also may have a breakpoint site if its 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// address has been loaded into the program. 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Finally it has a settable options object. 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// FIXME: Should we also store some fingerprint for the location, so 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// we can map one location to the "equivalent location" on rerun? This 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// would be useful if you've set options on the locations. 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 50987c7ebe1daa425ba7abfa9643800e3237146fc0Greg Claytonclass BreakpointLocation : 51102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton public std::enable_shared_from_this<BreakpointLocation>, 52987c7ebe1daa425ba7abfa9643800e3237146fc0Greg Clayton public StoppointLocation 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~BreakpointLocation (); 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Gets the load address for this breakpoint location 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns breakpoint location load address, \b 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if not yet set. 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t 65273a8e58a03ebf44fba04bd006b832882c80a9a0Greg Clayton GetLoadAddress () const; 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Gets the Address for this breakpoint location 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns breakpoint location Address. 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Address & 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetAddress (); 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Gets the Breakpoint that created this breakpoint location 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns the owning breakpoint. 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Breakpoint & 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBreakpoint (); 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Determines whether we should stop due to a hit at this 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// breakpoint location. 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Side Effects: This may evaluate the breakpoint condition, and 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// run the callback. So this command may do a considerable amount 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// of work. 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if this breakpoint location thinks we should stop, 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b false otherwise. 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ShouldStop (StoppointCallbackContext *context); 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The next section deals with various breakpoint options. 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \a enable is \b true, enable the breakpoint, if \b false 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// disable it. 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetEnabled(bool enabled); 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check the Enable/Disable state. 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if the breakpoint is enabled, \b false if disabled. 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 115ca4fe802f0f8439a070e2adfb38ae2487fbde135Johnny Chen IsEnabled () const; 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Return the current Ignore Count. 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of breakpoint hits to be ignored. 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12354e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton uint32_t 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIgnoreCount (); 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set the breakpoint to ignore the next \a count breakpoint hits. 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] count 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of breakpoint hits to ignore. 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 13354e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton SetIgnoreCount (uint32_t n); 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set the callback action invoked when the breakpoint is hit. 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The callback will return a bool indicating whether the target 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should stop at this breakpoint or not. 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] callback 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The method that will get called when the breakpoint is hit. 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] callback_baton_sp 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A shared pointer to a Baton that provides the void * needed 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for the callback. 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb_private::Baton 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetCallback (BreakpointHitCallback callback, 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::BatonSP &callback_baton_sp, 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool is_synchronous); 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetCallback (BreakpointHitCallback callback, 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *baton, 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool is_synchronous); 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClearCallback (); 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 164d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// Set the breakpoint location's condition. 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 166d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// @param[in] condition 167d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// The condition expression to evaluate when the breakpoint is hit. 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 169640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton void 170640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton SetCondition (const char *condition); 171b5d55cf7a00d0f9e31a1664d372f8e570d562777Jim Ingham 172d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham //------------------------------------------------------------------ 173d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// Return a pointer to the text of the condition expression. 174d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// 175d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// @return 176d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// A pointer to the condition expression text, or NULL if no 177d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham // condition has been set. 178d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham //------------------------------------------------------------------ 179640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton const char * 18028195f9e55173cd06c3c5f9e69cefeb1d03cc129Sean Callanan GetConditionText (size_t *hash = NULL) const; 18128195f9e55173cd06c3c5f9e69cefeb1d03cc129Sean Callanan 18228195f9e55173cd06c3c5f9e69cefeb1d03cc129Sean Callanan bool 18328195f9e55173cd06c3c5f9e69cefeb1d03cc129Sean Callanan ConditionSaysStop (ExecutionContext &exe_ctx, Error &error); 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set the valid thread to be checked when the breakpoint is hit. 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] thread_id 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If this thread hits the breakpoint, we stop, otherwise not. 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetThreadID (lldb::tid_t thread_id); 19428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 19528e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham lldb::tid_t 19628e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetThreadID (); 19728e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 19828e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham void 19928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham SetThreadIndex (uint32_t index); 20028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 20128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham uint32_t 20228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetThreadIndex() const; 20328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 20428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham void 20528e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham SetThreadName (const char *thread_name); 20628e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 20728e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham const char * 20828e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetThreadName () const; 20928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 21028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham void 21128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham SetQueueName (const char *queue_name); 21228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 21328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham const char * 21428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetQueueName () const; 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The next section deals with this location's breakpoint sites. 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Try to resolve the breakpoint site for this location. 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if we were successful at setting a breakpoint site, 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b false otherwise. 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveBreakpointSite (); 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clear this breakpoint location's breakpoint site - for instance 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when disabling the breakpoint. 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if there was a breakpoint site to be cleared, \b false 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// otherwise. 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClearBreakpointSite (); 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Return whether this breakpoint location has a breakpoint site. 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if there was a breakpoint site for this breakpoint 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// location, \b false otherwise. 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsResolved () const; 249d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham 250d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham lldb::BreakpointSiteSP 251d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham GetBreakpointSite() const; 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The next section are generic report functions. 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Print a description of this breakpoint location to the stream 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a s. 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to print the description. 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] level 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The description level that indicates the detail level to 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// provide. 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb::DescriptionLevel 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetDescription (Stream *s, lldb::DescriptionLevel level); 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Standard "Dump" method. At present it does nothing. 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s) const; 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Use this to set location specific breakpoint options. 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// It will create a copy of the containing breakpoint's options if 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that hasn't been done already 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A pointer to the breakpoint options. 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointOptions * 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetLocationOptions (); 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2929c6898b5686984baa09d0c694169cc935fc99562Jim Ingham /// Use this to access breakpoint options from this breakpoint location. 2939c6898b5686984baa09d0c694169cc935fc99562Jim Ingham /// This will point to the owning breakpoint's options unless options have 2949c6898b5686984baa09d0c694169cc935fc99562Jim Ingham /// been set specifically on this location. 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A pointer to the containing breakpoint's options if this 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// location doesn't have its own copy. 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3003c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham const BreakpointOptions * 3019c6898b5686984baa09d0c694169cc935fc99562Jim Ingham GetOptionsNoCreate () const; 3023c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham 3033c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham bool 3043c7b5b9f83cae58ca366db2bba37dc09485f7dccJim Ingham ValidForThisThread (Thread *thread); 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Invoke the callback action when the breakpoint is hit. 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Meant to be used by the BreakpointLocation class. 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] context 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Described the breakpoint event. 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] bp_loc_id 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Which breakpoint location hit this breakpoint. 31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if the target should stop at this breakpoint and \b 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// false not. 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner InvokeCallback (StoppointCallbackContext *context); 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 325643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Claytonprotected: 32619a1ab8a1e0c9c66adaa648b5cf5909dac2d667eGreg Clayton friend class BreakpointLocationList; 327643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton friend class CommandObjectBreakpointCommandAdd; 328643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton friend class Process; 329643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set the breakpoint site for this location to \a bp_site_sp. 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] bp_site_sp 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The breakpoint site we are setting for this location. 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if we were successful at setting the breakpoint site, 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b false otherwise. 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetBreakpointSite (lldb::BreakpointSiteSP& bp_site_sp); 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 343fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham void 344fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham DecrementIgnoreCount(); 345fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham 346fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham bool 347fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham IgnoreCountShouldStop(); 348fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Only the Breakpoint can make breakpoint locations, and it owns 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // them. 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Constructor. 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] owner 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A back pointer to the breakpoint that owns this location. 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] addr 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Address defining this location. 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] tid 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The thread for which this breakpoint location is valid, or 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_THREAD_ID if it is valid for all threads. 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] hardware 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if a hardware breakpoint is requested. 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointLocation (lldb::break_id_t bid, 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Breakpoint &owner, 37719a1ab8a1e0c9c66adaa648b5cf5909dac2d667eGreg Clayton const Address &addr, 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::tid_t tid = LLDB_INVALID_THREAD_ID, 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool hardware = false); 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Data members: 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham bool m_being_created; 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Address m_address; ///< The address defining this location. 38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Breakpoint &m_owner; ///< The breakpoint that produced this object. 387102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<BreakpointOptions> m_options_ap; ///< Breakpoint options pointer, NULL if we're using our breakpoint's options. 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointSiteSP m_bp_site_sp; ///< Our breakpoint site (it may be shared by more than one location.) 38928195f9e55173cd06c3c5f9e69cefeb1d03cc129Sean Callanan ClangUserExpression::ClangUserExpressionSP m_user_expression_sp; ///< The compiled expression to use in testing our condition. 390d93d9131514d1c6f849a06180ec2f01d7792a661Sean Callanan Mutex m_condition_mutex; ///< Guards parsing and evaluation of the condition, which could be evaluated by multiple processes. 39128195f9e55173cd06c3c5f9e69cefeb1d03cc129Sean Callanan size_t m_condition_hash; ///< For testing whether the condition source code changed. 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 39328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham void 39428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham SendBreakpointLocationChangedEvent (lldb::BreakpointEventType eventKind); 39528e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (BreakpointLocation); 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_BreakpointLocation_h_ 402