summaryrefslogtreecommitdiff
path: root/src/debug.h
diff options
context:
space:
mode:
authorTor Aamodt <[email protected]>2010-08-07 05:35:29 -0800
committerTor Aamodt <[email protected]>2010-08-07 05:35:29 -0800
commit4d441a9746616b2e45397097e6a7600a67aa973c (patch)
tree1e4fab27e7e089b72718fbb9814bac6e8c75f471 /src/debug.h
parent0ef446ceb7b5045030724f6906fc011296623d2d (diff)
watchpoint facility for ptx debugging
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 7160]
Diffstat (limited to 'src/debug.h')
-rw-r--r--src/debug.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/debug.h b/src/debug.h
new file mode 100644
index 0000000..463780a
--- /dev/null
+++ b/src/debug.h
@@ -0,0 +1,66 @@
+#ifndef PTX_DEBUG_INCLUDED
+#define PTX_DEBUG_INCLUDED
+
+#include "abstract_hardware_model.h"
+
+#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;
+};
+
+class ptx_thread_info;
+class ptx_instruction;
+bool thread_at_brkpt( void *ptx_thd_info, const struct brk_pt &b );
+unsigned read_location( addr_t addr );
+void hit_watchpoint( unsigned watchpoint_num, ptx_thread_info *thd, const ptx_instruction *pI );
+void gpgpu_debug();
+
+#endif