summaryrefslogtreecommitdiff
path: root/src/mem/ruby/common/Debug.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/common/Debug.hh')
-rw-r--r--src/mem/ruby/common/Debug.hh450
1 files changed, 211 insertions, 239 deletions
diff --git a/src/mem/ruby/common/Debug.hh b/src/mem/ruby/common/Debug.hh
index a7b1a15d1..a2344e82d 100644
--- a/src/mem/ruby/common/Debug.hh
+++ b/src/mem/ruby/common/Debug.hh
@@ -1,4 +1,3 @@
-
/*
* Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
* All rights reserved.
@@ -27,12 +26,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/*
- * $Id$
- */
-
-#ifndef __MEM_RUBY_DEBUG_HH__
-#define __MEM_RUBY_DEBUG_HH__
+#ifndef __MEM_RUBY_COMMON_DEBUG_HH__
+#define __MEM_RUBY_COMMON_DEBUG_HH__
#include <unistd.h>
@@ -75,68 +70,55 @@ enum DebugComponents
enum PriorityLevel {HighPrio, MedPrio, LowPrio};
enum VerbosityLevel {No_Verb, Low_Verb, Med_Verb, High_Verb};
-class Debug : public SimObject {
-public:
- // Constructors
+class Debug : public SimObject
+{
+ public:
typedef RubyDebugParams Params;
- Debug(const Params *p);
-
- // Destructor
- ~Debug();
-
- // Public Methods
- static bool getProtocolTrace() { return m_protocol_trace; }
- bool validDebug(int module, PriorityLevel priority);
- void printVerbosity(std::ostream& out) const;
- void setVerbosity(VerbosityLevel vb);
- static bool checkVerbosityString(const char *verb_str);
- bool setVerbosityString(const char *);
- VerbosityLevel getVerbosity() const { return m_verbosityLevel; }
- void setFilter(int);
- static bool checkFilter( char);
- static bool checkFilterString(const char *);
- bool setFilterString(const char *);
- void setDebugTime(Time);
- Time getDebugTime() const { return m_starting_cycle; }
- bool addFilter(char);
- void clearFilter();
- void allFilter();
- void print(std::ostream& out) const;
- /* old school debugging "vararg": sends messages to screen and log */
- void debugMsg( const char *fmt, ... );
-
- void setDebugOutputFile (const char * filename);
- void closeDebugOutputFile ();
- static void usageInstructions(void);
-
-private:
- // Private Methods
-
- // Private copy constructor and assignment operator
- Debug(const Debug& obj);
- Debug& operator=(const Debug& obj);
-
- // Data Members (m_ prefix)
- static bool m_protocol_trace;
- VerbosityLevel m_verbosityLevel;
- int m_filter;
- Time m_starting_cycle;
-
- std::fstream m_fout;
+ Debug(const Params *p);
+ ~Debug();
+
+ static bool getProtocolTrace() { return m_protocol_trace; }
+ bool validDebug(int module, PriorityLevel priority);
+ void printVerbosity(std::ostream& out) const;
+ void setVerbosity(VerbosityLevel vb);
+ bool setVerbosityString(const char *);
+ VerbosityLevel getVerbosity() const { return m_verbosityLevel; }
+ void setFilter(int);
+ static bool checkFilter( char);
+ static bool checkFilterString(const char *);
+ bool setFilterString(const char *);
+ void setDebugTime(Time);
+ Time getDebugTime() const { return m_starting_cycle; }
+ bool addFilter(char);
+ void clearFilter();
+ void allFilter();
+ void print(std::ostream& out) const;
+ /* old school debugging "vararg": sends messages to screen and log */
+ void debugMsg(const char *fmt, ...);
+
+ void setDebugOutputFile (const char * filename);
+ void closeDebugOutputFile ();
+ static void usageInstructions(void);
+
+ private:
+ // Private copy constructor and assignment operator
+ Debug(const Debug& obj);
+ Debug& operator=(const Debug& obj);
+
+ static bool m_protocol_trace;
+ VerbosityLevel m_verbosityLevel;
+ int m_filter;
+ Time m_starting_cycle;
+
+ std::fstream m_fout;
};
-// Output operator declaration
-std::ostream& operator<<(std::ostream& out, const Debug& obj);
-
-// ******************* Definitions *******************
-
-// Output operator definition
-extern inline
-std::ostream& operator<<(std::ostream& out, const Debug& obj)
+inline std::ostream&
+operator<<(std::ostream& out, const Debug& obj)
{
- obj.print(out);
- out << std::flush;
- return out;
+ obj.print(out);
+ out << std::flush;
+ return out;
}
const bool ERROR_MESSAGE_FLAG = true;
@@ -151,178 +133,168 @@ const bool ASSERT_FLAG = true;
#undef assert
#define assert(EXPR) ASSERT(EXPR)
#undef ASSERT
-#define ASSERT(EXPR)\
-{\
- using namespace std;\
- if (ASSERT_FLAG) {\
- if (!(EXPR)) {\
- cerr << "failed assertion '"\
- << #EXPR << "' at fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << endl << flush;\
- (* debug_cout_ptr) << "failed assertion '"\
- << #EXPR << "' at fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << endl << flush;\
- if(isatty(STDIN_FILENO)) {\
- cerr << "At this point you might want to attach a debug to ";\
- cerr << "the running and get to the" << endl;\
- cerr << "crash site; otherwise press enter to continue" << endl;\
- cerr << "PID: " << getpid();\
- cerr << endl << flush; \
- char c; \
- cin.get(c); \
- }\
- abort();\
- }\
- }\
-}
-
-#define BREAK(X)\
-{\
- using namespace std;\
- cerr << "breakpoint '"\
- << #X << "' reached at fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << endl << flush;\
- if(isatty(STDIN_FILENO)) {\
- cerr << "press enter to continue" << endl;\
- cerr << "PID: " << getpid();\
- cerr << endl << flush; \
- char c; \
- cin.get(c); \
- }\
-}
-
-#define ERROR_MSG(MESSAGE)\
-{\
- using namespace std;\
- if (ERROR_MESSAGE_FLAG) {\
- cerr << "Fatal Error: in fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << ": "\
- << (MESSAGE) << endl << flush;\
- (* debug_cout_ptr) << "Fatal Error: in fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << ": "\
- << (MESSAGE) << endl << flush;\
- abort();\
- }\
-}
-
-#define WARN_MSG(MESSAGE)\
-{\
- using namespace std;\
- if (WARNING_MESSAGE_FLAG) {\
- cerr << "Warning: in fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << ": "\
- << (MESSAGE) << endl << flush;\
- (* debug_cout_ptr) << "Warning: in fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << ": "\
- << (MESSAGE) << endl << flush;\
- }\
-}
-
-#define WARN_EXPR(EXPR)\
-{\
- using namespace std;\
- if (WARNING_MESSAGE_FLAG) {\
- cerr << "Warning: in fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << ": "\
- << #EXPR << " is "\
- << (EXPR) << endl << flush;\
- (* debug_cout_ptr) << "Warning: in fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << ": "\
- << #EXPR << " is "\
- << (EXPR) << endl << flush;\
- }\
-}
-
-#define DEBUG_MSG(module, priority, MESSAGE)\
-{\
- using namespace std;\
- if (RUBY_DEBUG) {\
- if (g_debug_ptr->validDebug(module, priority)) {\
- (* debug_cout_ptr) << "Debug: in fn "\
- << __PRETTY_FUNCTION__\
- << " in " << __FILE__ << ":"\
- << __LINE__ << ": "\
- << (MESSAGE) << endl << flush;\
- }\
- }\
-}
-
-#define DEBUG_EXPR(module, priority, EXPR)\
-{\
- using namespace std;\
- if (RUBY_DEBUG) {\
- if (g_debug_ptr->validDebug(module, priority)) {\
- (* debug_cout_ptr) << "Debug: in fn "\
- << __PRETTY_FUNCTION__\
- << " in " << __FILE__ << ":"\
- << __LINE__ << ": "\
- << #EXPR << " is "\
- << (EXPR) << endl << flush;\
- }\
- }\
-}
-
-#define DEBUG_NEWLINE(module, priority)\
-{\
- using namespace std;\
- if (RUBY_DEBUG) {\
- if (g_debug_ptr->validDebug(module, priority)) {\
- (* debug_cout_ptr) << endl << flush;\
- }\
- }\
-}
-
-#define DEBUG_SLICC(priority, LINE, MESSAGE)\
-{\
- using namespace std;\
- if (RUBY_DEBUG) {\
- if (g_debug_ptr->validDebug(SLICC_COMP, priority)) {\
- (* debug_cout_ptr) << (LINE) << (MESSAGE) << endl << flush;\
- }\
- }\
-}
-
-#define DEBUG_OUT( rest... ) \
-{\
- using namespace std;\
- if (RUBY_DEBUG) {\
- cout << "Debug: in fn "\
- << __PRETTY_FUNCTION__\
- << " in " << __FILE__ << ":"\
- << __LINE__ << ": "; \
- g_debug_ptr->debugMsg(rest); \
- }\
-}
-
-#define ERROR_OUT( rest... ) \
-{\
- using namespace std;\
- if (ERROR_MESSAGE_FLAG) {\
- cout << "error: in fn "\
- << __PRETTY_FUNCTION__ << " in "\
- << __FILE__ << ":"\
- << __LINE__ << ": ";\
- g_debug_ptr->debugMsg(rest); \
- }\
-}
-
-#endif //DEBUG_H
+#define ASSERT(EXPR) do { \
+ using namespace std; \
+ if (ASSERT_FLAG) { \
+ if (!(EXPR)) { \
+ cerr << "failed assertion '" \
+ << #EXPR << "' at fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << endl << flush; \
+ (*debug_cout_ptr) << "failed assertion '" \
+ << #EXPR << "' at fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << endl << flush; \
+ if (isatty(STDIN_FILENO)) { \
+ cerr << "At this point you might want to attach a debug to " \
+ << "the running and get to the" << endl \
+ << "crash site; otherwise press enter to continue" \
+ << endl \
+ << "PID: " << getpid() \
+ << endl << flush; \
+ char c; \
+ cin.get(c); \
+ } \
+ abort(); \
+ } \
+ } \
+} while (0)
+
+#define BREAK(X) do { \
+ using namespace std; \
+ cerr << "breakpoint '" \
+ << #X << "' reached at fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << endl << flush; \
+ if(isatty(STDIN_FILENO)) { \
+ cerr << "press enter to continue" << endl; \
+ cerr << "PID: " << getpid(); \
+ cerr << endl << flush; \
+ char c; \
+ cin.get(c); \
+ } \
+} while (0)
+
+#define ERROR_MSG(MESSAGE) do { \
+ using namespace std; \
+ if (ERROR_MESSAGE_FLAG) { \
+ cerr << "Fatal Error: in fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << ": " \
+ << (MESSAGE) << endl << flush; \
+ (* debug_cout_ptr) << "Fatal Error: in fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << ": " \
+ << (MESSAGE) << endl << flush; \
+ abort(); \
+ } \
+} while(0)
+
+#define WARN_MSG(MESSAGE) do { \
+ using namespace std; \
+ if (WARNING_MESSAGE_FLAG) { \
+ cerr << "Warning: in fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << ": " \
+ << (MESSAGE) << endl << flush; \
+ (* debug_cout_ptr) << "Warning: in fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << ": " \
+ << (MESSAGE) << endl << flush; \
+ } \
+} while (0)
+
+#define WARN_EXPR(EXPR) do { \
+ using namespace std; \
+ if (WARNING_MESSAGE_FLAG) { \
+ cerr << "Warning: in fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << ": " \
+ << #EXPR << " is " \
+ << (EXPR) << endl << flush; \
+ (* debug_cout_ptr) << "Warning: in fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << ": " \
+ << #EXPR << " is " \
+ << (EXPR) << endl << flush; \
+ } \
+} while (0)
+
+#define DEBUG_MSG(module, priority, MESSAGE) do { \
+ using namespace std; \
+ if (RUBY_DEBUG) { \
+ if (g_debug_ptr->validDebug(module, priority)) { \
+ (* debug_cout_ptr) << "Debug: in fn " \
+ << __PRETTY_FUNCTION__ \
+ << " in " << __FILE__ << ":" \
+ << __LINE__ << ": " \
+ << (MESSAGE) << endl << flush; \
+ } \
+ } \
+} while (0)
+
+#define DEBUG_EXPR(module, priority, EXPR) do { \
+ using namespace std; \
+ if (RUBY_DEBUG) { \
+ if (g_debug_ptr->validDebug(module, priority)) { \
+ (* debug_cout_ptr) << "Debug: in fn " \
+ << __PRETTY_FUNCTION__ \
+ << " in " << __FILE__ << ":" \
+ << __LINE__ << ": " \
+ << #EXPR << " is " \
+ << (EXPR) << endl << flush; \
+ } \
+ } \
+} while (0)
+
+#define DEBUG_NEWLINE(module, priority) do { \
+ using namespace std; \
+ if (RUBY_DEBUG) { \
+ if (g_debug_ptr->validDebug(module, priority)) { \
+ (* debug_cout_ptr) << endl << flush; \
+ } \
+ } \
+} while (0)
+
+#define DEBUG_SLICC(priority, LINE, MESSAGE) do { \
+ using namespace std; \
+ if (RUBY_DEBUG) { \
+ if (g_debug_ptr->validDebug(SLICC_COMP, priority)) { \
+ (* debug_cout_ptr) << (LINE) << (MESSAGE) << endl << flush; \
+ } \
+ } \
+} while (0)
+
+#define DEBUG_OUT(rest... ) do { \
+ using namespace std; \
+ if (RUBY_DEBUG) { \
+ cout << "Debug: in fn " \
+ << __PRETTY_FUNCTION__ \
+ << " in " << __FILE__ << ":" \
+ << __LINE__ << ": "; \
+ g_debug_ptr->debugMsg(rest); \
+ } \
+} while (0)
+
+#define ERROR_OUT( rest... ) do { \
+ using namespace std; \
+ if (ERROR_MESSAGE_FLAG) { \
+ cout << "error: in fn " \
+ << __PRETTY_FUNCTION__ << " in " \
+ << __FILE__ << ":" \
+ << __LINE__ << ": "; \
+ g_debug_ptr->debugMsg(rest); \
+ } \
+} while (0)
+
+#endif // __MEM_RUBY_COMMON_DEBUG_HH__