diff options
Diffstat (limited to 'src/mem/ruby/common/Debug.hh')
-rw-r--r-- | src/mem/ruby/common/Debug.hh | 450 |
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__ |