summaryrefslogtreecommitdiff
path: root/src/abstract_hardware_model.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/abstract_hardware_model.h')
-rw-r--r--src/abstract_hardware_model.h56
1 files changed, 56 insertions, 0 deletions
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 <string>
+
+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