Added cover() API
authorClifford Wolf <clifford@clifford.at>
Thu, 24 Jul 2014 01:48:38 +0000 (03:48 +0200)
committerClifford Wolf <clifford@clifford.at>
Thu, 24 Jul 2014 01:48:38 +0000 (03:48 +0200)
kernel/log.cc
kernel/log.h

index 949bf43275fd1c5e56937317acb50acc2bf57bca..26414d49341a5b9035fe5f4373846e1abb00dbd4 100644 (file)
@@ -29,6 +29,8 @@
 #include <vector>
 #include <list>
 
+CoverAgent *CoverAgent::first_cover_agent = NULL;
+
 std::vector<FILE*> log_files;
 FILE *log_errfile = NULL;
 bool log_time = false;
index 00265dbe0f0e53a7916a8649acc7bdb17483b08a..517808061a7a73cc8d491358c53b659704200fec 100644 (file)
@@ -63,6 +63,39 @@ void log_cell(RTLIL::Cell *cell, std::string indent = "");
 #define log_assert(_assert_expr_) do { if (_assert_expr_) break; log_error("Assert `%s' failed in %s:%d.\n", #_assert_expr_, __FILE__, __LINE__); } while (0)
 #define log_ping() log("-- %s:%d %s --\n", __FILE__, __LINE__, __PRETTY_FUNCTION__)
 
+#ifndef NDEBUG
+#  define cover(_id) do { \
+      static CoverAgent _cover_agent(__FILE__, __LINE__, __FUNCTION__, _id); \
+      _cover_agent.ticks++; \
+    } while (0)
+#else
+#  define cover(_id) do { } while (0)
+#endif
+
+struct CoverAgent
+{
+       static struct CoverAgent *first_cover_agent;
+       struct CoverAgent *next_cover_agent;
+
+       const char *file;
+       int line;
+       const char *func;
+       const char *id;
+       int ticks;
+
+       CoverAgent(const char *file, int line, const char *func, const char *id) :
+                       file(file), line(line), func(func), id(id), ticks(0)
+       {
+               next_cover_agent = first_cover_agent;
+               first_cover_agent = this;
+       };
+};
+
+
+// ------------------------------------------------------------
+// everything below this line are utilities for troubleshooting
+// ------------------------------------------------------------
+
 // simple timer for performance measurements
 // toggle the '#if 1' to get a baseline for the perormance penalty added by the measurement
 struct PerformanceTimer