124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- StoppointLocation.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_StoppointLocation_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_StoppointLocation_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UserID.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// #include "lldb/Breakpoint/BreakpointOptions.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass StoppointLocation 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StoppointLocation (lldb::break_id_t bid, 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t m_addr, 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool hardware); 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StoppointLocation (lldb::break_id_t bid, 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t m_addr, 35bae39c554644de9f319f59c25a76ad64bd266f84Greg Clayton uint32_t byte_size, 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool hardware); 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~StoppointLocation (); 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Operators 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Methods 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::addr_t 49265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton GetLoadAddress() const 50265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 51265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton return m_addr; 52265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 53265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton 54116a5cd7b8a0ec7929f10281cd708edb2bf20ffaJohnny Chen virtual void 55116a5cd7b8a0ec7929f10281cd708edb2bf20ffaJohnny Chen SetLoadAddress (lldb::addr_t addr) 56265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 57116a5cd7b8a0ec7929f10281cd708edb2bf20ffaJohnny Chen m_addr = addr; 58265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 60bae39c554644de9f319f59c25a76ad64bd266f84Greg Clayton uint32_t 61265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton GetByteSize () const 62265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 63265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton return m_byte_size; 64265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 67265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton GetHitCount () const 68265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 69265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton return m_hit_count; 70265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 73265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton GetHardwareIndex () const 74265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 75265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton return m_hw_index; 76265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 77265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 80265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton HardwarePreferred () const 81265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 82265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton return m_hw_preferred; 83265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8501acfa76010b8db2e77016c144963c4dd70f1392Johnny Chen virtual bool 86265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton IsHardware () const 87265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 88265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton return m_hw_index != LLDB_INVALID_INDEX32; 89265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 90265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 93265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton ShouldStop (StoppointCallbackContext *context) 94265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 95265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton return true; 96265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 99265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton Dump (Stream *stream) const 100265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 101265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 104265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton SetHardwareIndex (uint32_t index) 105265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 106265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton m_hw_index = index; 107265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 108265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::break_id_t 111265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton GetID () const 112265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton { 113265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton return m_loc_id; 114265ab33ae56209d2bfdc47510a557aa075b2a829Greg Clayton } 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Classes that inherit from StoppointLocation can see and modify these 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 1201c2d941ab4c3ba05888c48e25d245b099a18213aJohnny Chen lldb::break_id_t m_loc_id; // Stoppoint location ID 12154e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton lldb::addr_t m_addr; // The load address of this stop point. The base Stoppoint doesn't 12254e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton // store a full Address since that's not needed for the breakpoint sites. 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool m_hw_preferred; // 1 if this point has been requested to be set using hardware (which may fail due to lack of resources) 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t m_hw_index; // The hardware resource index for this breakpoint/watchpoint 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t m_byte_size; // The size in bytes of stop location. e.g. the length of the trap opcode for 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // software breakpoints, or the optional length in bytes for 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // hardware breakpoints, or the length of the watchpoint. 1281c2d941ab4c3ba05888c48e25d245b099a18213aJohnny Chen uint32_t m_hit_count; // Number of times this breakpoint/watchpoint has been hit 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 130fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham // If you override this, be sure to call the base class to increment the internal counter. 131fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham void 132fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham IncrementHitCount () 133fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham { 134fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham ++m_hit_count; 135fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham } 136fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For StoppointLocation only 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN(StoppointLocation); 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StoppointLocation(); // Disallow default constructor 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_StoppointLocation_h_ 148