From 0ef446ceb7b5045030724f6906fc011296623d2d Mon Sep 17 00:00:00 2001 From: Tor Aamodt Date: Wed, 4 Aug 2010 08:18:26 -0800 Subject: intial support for integrated interactive debugger (for debugging PTX assembly) [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 7137] --- src/abstract_hardware_model.h | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'src/abstract_hardware_model.h') diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h index 3b3d07e..98d934c 100644 --- a/src/abstract_hardware_model.h +++ b/src/abstract_hardware_model.h @@ -67,6 +67,62 @@ private: unsigned m_bank; // n in ".const[n]"; note .const == .const[0] (see PTX 2.1 manual, sec. 5.1.3) }; +#include + +class brk_pt { +public: + brk_pt() { m_valid=false; } + brk_pt( const char *fileline, unsigned uid ) + { + m_valid = true; + m_watch = false; + m_fileline = std::string(fileline); + m_thread_uid=uid; + } + brk_pt( unsigned addr, unsigned value ) + { + m_valid = true; + m_watch = true; + m_addr = addr; + m_value = value; + } + + unsigned get_value() const { return m_value; } + addr_t get_addr() const { return m_addr; } + bool is_valid() const { return m_valid; } + bool is_watchpoint() const { return m_watch; } + bool is_equal( const std::string &fileline, unsigned uid ) const + { + if( m_watch ) + return false; + if( (m_thread_uid != (unsigned)-1) && (uid != m_thread_uid) ) + return false; + return m_fileline == fileline; + } + std::string location() const + { + char buffer[1024]; + sprintf(buffer,"%s thread uid = %u", m_fileline.c_str(), m_thread_uid); + return buffer; + } + + unsigned set_value( unsigned val ) { return m_value=val; } +private: + bool m_valid; + bool m_watch; + + // break point + std::string m_fileline; + unsigned m_thread_uid; + + // watch point + unsigned m_addr; + unsigned m_value; +}; + +bool thread_at_brkpt( void *ptx_thd_info, const struct brk_pt &b ); +unsigned read_location( addr_t addr ); + #endif #endif -- cgit v1.3