diff options
Diffstat (limited to 'src/mem/ruby/common')
-rw-r--r-- | src/mem/ruby/common/Debug.cc | 338 | ||||
-rw-r--r-- | src/mem/ruby/common/Debug.hh | 162 | ||||
-rw-r--r-- | src/mem/ruby/common/Debug.py | 52 | ||||
-rw-r--r-- | src/mem/ruby/common/Global.cc | 5 | ||||
-rw-r--r-- | src/mem/ruby/common/Global.hh | 4 | ||||
-rw-r--r-- | src/mem/ruby/common/SConscript | 3 | ||||
-rw-r--r-- | src/mem/ruby/common/Set.cc | 2 |
7 files changed, 4 insertions, 562 deletions
diff --git a/src/mem/ruby/common/Debug.cc b/src/mem/ruby/common/Debug.cc deleted file mode 100644 index 6995ef637..000000000 --- a/src/mem/ruby/common/Debug.cc +++ /dev/null @@ -1,338 +0,0 @@ -/* - * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <fstream> -#include <stdarg.h> - -#include "base/misc.hh" -#include "mem/ruby/common/Debug.hh" -#include "mem/ruby/common/Global.hh" -#include "mem/ruby/eventqueue/RubyEventQueue.hh" - -using namespace std; - -class Debug; -extern Debug* g_debug_ptr; -ostream *debug_cout_ptr; - -bool Debug::m_protocol_trace = false; -struct DebugComponentData -{ - const char *desc; - const char ch; -}; - -// component character list -DebugComponentData debugComponents[] = -{ - {"System", 's' }, - {"Node", 'N' }, - {"Queue", 'q' }, - {"Event Queue", 'e' }, - {"Network", 'n' }, - {"Sequencer", 'S' }, - {"Tester", 't' }, - {"Generated", 'g' }, - {"SLICC", 'l' }, - {"Network Queues", 'Q' }, - {"Time", 'T' }, - {"Network Internals", 'i' }, - {"Store Buffer", 'b' }, - {"Cache", 'c' }, - {"Predictor", 'p' }, - {"Memory", 'M' }, -}; - -extern "C" void changeDebugVerbosity(VerbosityLevel vb); -extern "C" void changeDebugFilter(int filter); - -void -changeDebugVerbosity(VerbosityLevel vb) -{ - g_debug_ptr->setVerbosity(vb); -} - -void -changeDebugFilter(int filter) -{ - g_debug_ptr->setFilter(filter); -} - -Debug::Debug(const Params *p) - : SimObject(p) -{ - clearFilter(); - debug_cout_ptr = &cout; - - setFilterString(p->filter_string.c_str()); - setVerbosityString(p->verbosity_string.c_str()); - setDebugOutputFile(p->output_filename.c_str()); - m_starting_cycle = p->start_time; - m_protocol_trace = p->protocol_trace; - g_debug_ptr = this; -} - -Debug::~Debug() -{ -} - -void -Debug::printVerbosity(ostream& out) const -{ - switch (getVerbosity()) { - case No_Verb: - out << "verbosity = No_Verb" << endl; - break; - case Low_Verb: - out << "verbosity = Low_Verb" << endl; - break; - case Med_Verb: - out << "verbosity = Med_Verb" << endl; - break; - case High_Verb: - out << "verbosity = High_Verb" << endl; - break; - default: - out << "verbosity = unknown" << endl; - } -} - -bool -Debug::validDebug(int module, PriorityLevel priority) -{ - int local_module = (1 << module); - if (m_filter & local_module) { - if (g_eventQueue_ptr == NULL || - g_eventQueue_ptr->getTime() >= m_starting_cycle) { - switch (m_verbosityLevel) { - case No_Verb: - return false; - case Low_Verb: - return (priority == HighPrio); - case Med_Verb: - return (priority == HighPrio || priority == MedPrio); - case High_Verb: - return true; - } - } - } - return false; -} - -void -Debug::setDebugTime(Time t) -{ - m_starting_cycle = t; -} - -void -Debug::setVerbosity(VerbosityLevel vb) -{ - m_verbosityLevel = vb; -} - -void -Debug::setFilter(int filter) -{ - m_filter = filter; -} - -bool -Debug::setVerbosityString(const char *verb_str) -{ - string verb = verb_str ? verb_str : ""; - if (verb == "none") { - setVerbosity(No_Verb); - } else if (verb == "low") { - setVerbosity(Low_Verb); - } else if (verb == "med") { - setVerbosity(Med_Verb); - } else if (verb == "high") { - setVerbosity(High_Verb); - } else { - cerr << "Error: unrecognized verbosity (use none, low, med, high): " - << verb << endl; - return true; // error - } - return false; // no error -} - -bool -Debug::checkFilter(char ch) -{ - for (int i = 0; i < NUMBER_OF_COMPS; i++) { - // Look at all components to find a character match - if (debugComponents[i].ch == ch) { - // We found a match - return no error - return false; // no error - } - } - return true; // error -} - -bool -Debug::checkFilterString(const char *filter_str) -{ - if (filter_str == NULL) { - cerr << "Error: unrecognized component filter: NULL" << endl; - return true; // error - } - - // check for default filter ("none") before reporting RUBY_DEBUG error - if (string(filter_str) == "none") { - return false; // no error - } - - if (string(filter_str) == "all") { - return false; // no error - } - - // scan string checking each character - for (unsigned int i = 0; i < strlen(filter_str); i++) { - bool unrecognized = checkFilter(filter_str[i]); - if (unrecognized == true) { - return true; // error - } - } - return false; // no error -} - -bool -Debug::setFilterString(const char *filter_str) -{ - if (checkFilterString(filter_str)) { - return true; // error - } - - if (string(filter_str) == "all" ) { - allFilter(); - } else if (string(filter_str) == "none") { - clearFilter(); - } else { - // scan string adding to bit mask for each component which is present - for (unsigned int i = 0; i < strlen(filter_str); i++) { - bool error = addFilter( filter_str[i] ); - if (error) { - return true; // error - } - } - } - return false; // no error -} - -bool -Debug::addFilter(char ch) -{ - for (int i = 0; i < NUMBER_OF_COMPS; i++) { - // Look at all components to find a character match - if (debugComponents[i].ch == ch) { - // We found a match - update the filter bit mask - cout << " Debug: Adding to filter: '" << ch << "' (" - << debugComponents[i].desc << ")" << endl; - m_filter |= (1 << i); - return false; // no error - } - } - - // We didn't find the character - cerr << "Error: unrecognized component filter: " << ch << endl; - usageInstructions(); - return true; // error -} - -void -Debug::clearFilter() -{ - m_filter = 0; -} - -void Debug::allFilter() -{ - m_filter = ~0; -} - -void -Debug::usageInstructions(void) -{ - cerr << "Debug components: " << endl; - for (int i = 0; i < NUMBER_OF_COMPS; i++) { - cerr << " " << debugComponents[i].ch << ": " - << debugComponents[i].desc << endl; - } -} - -void -Debug::print(ostream& out) const -{ - out << "[Debug]" << endl; -} - -void -Debug::setDebugOutputFile (const char *filename) -{ - if (filename == NULL || !strcmp(filename, "none")) { - debug_cout_ptr = &cout; - return; - } - - if (m_fout.is_open()) { - m_fout.close(); - } - m_fout.open(filename, ios::out); - if (!m_fout.is_open()) { - cerr << "setDebugOutputFile: can't open file " << filename << endl; - } else { - debug_cout_ptr = &m_fout; - } -} - -void -Debug::closeDebugOutputFile () -{ - if (m_fout.is_open()) { - m_fout.close (); - debug_cout_ptr = &cout; - } -} - -void -Debug::debugMsg( const char *fmt, ...) -{ - va_list args; - - // you could check validDebug() here before printing the message - va_start(args, fmt); - vfprintf(stdout, fmt, args); - va_end(args); -} - -Debug * -RubyDebugParams::create() -{ - return new Debug(this); -} diff --git a/src/mem/ruby/common/Debug.hh b/src/mem/ruby/common/Debug.hh deleted file mode 100644 index 4183aca4d..000000000 --- a/src/mem/ruby/common/Debug.hh +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __MEM_RUBY_COMMON_DEBUG_HH__ -#define __MEM_RUBY_COMMON_DEBUG_HH__ - -#include <unistd.h> - -#include <fstream> -#include <iostream> -#include <string> -#include <vector> - -#include "mem/ruby/common/Global.hh" -#include "sim/sim_object.hh" - -#include "params/RubyDebug.hh" - -extern std::ostream * debug_cout_ptr; - -// component enumeration -enum DebugComponents -{ - SYSTEM_COMP, - NODE_COMP, - QUEUE_COMP, - EVENTQUEUE_COMP, - NETWORK_COMP, - SEQUENCER_COMP, - TESTER_COMP, - GENERATED_COMP, - SLICC_COMP, - NETWORKQUEUE_COMP, - TIME_COMP, - NETWORK_INTERNALS_COMP, - STOREBUFFER_COMP, - CACHE_COMP, - PREDICTOR_COMP, - MEMORY_COMP, - NUMBER_OF_COMPS -}; - -enum PriorityLevel {HighPrio, MedPrio, LowPrio}; -enum VerbosityLevel {No_Verb, Low_Verb, Med_Verb, High_Verb}; - -class Debug : public SimObject -{ - public: - typedef RubyDebugParams Params; - 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; -}; - -inline std::ostream& -operator<<(std::ostream& out, const Debug& obj) -{ - obj.print(out); - out << std::flush; - return out; -} - -#undef assert -#define assert(EXPR) ASSERT(EXPR) -#undef ASSERT - -#ifndef NDEBUG - -#define ASSERT(EXPR) do { \ - using namespace std; \ - 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) - -#else - -#define ASSERT(EXPR) do {} while (0) - -#endif // NDEBUG - -#endif // __MEM_RUBY_COMMON_DEBUG_HH__ - diff --git a/src/mem/ruby/common/Debug.py b/src/mem/ruby/common/Debug.py deleted file mode 100644 index b11a7afeb..000000000 --- a/src/mem/ruby/common/Debug.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (c) 2009 Advanced Micro Devices, Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer; -# redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution; -# neither the name of the copyright holders nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Authors: Steve Reinhardt -# Brad Beckmann - -from m5.params import * -from m5.SimObject import SimObject - -class RubyDebug(SimObject): - type = 'RubyDebug' - cxx_class = 'Debug' - - filter_string = Param.String('none', - "a string for filtering debugging output (see Debug.h)") - verbosity_string = Param.String('none', - "filters debugging messages based on priority (low, med, high)") - output_filename = Param.String('none', - "sends debugging messages to a file") - start_time = Param.Tick(1, - "filters debugging messages based on a ruby time") - # For debugging purposes, one can enable a trace of all the protocol - # state machine changes. Unfortunately, the code to generate the - # trace is protocol specific. To enable the code for some of the - # standard protocols, - # 1. change protocol_trace = true - # 2. enable debug in the Ruby Makefile - protocol_trace = Param.Bool(False, - "enable protocol state machine trace") diff --git a/src/mem/ruby/common/Global.cc b/src/mem/ruby/common/Global.cc index f780707e2..e771de7ae 100644 --- a/src/mem/ruby/common/Global.cc +++ b/src/mem/ruby/common/Global.cc @@ -28,7 +28,6 @@ #include "mem/ruby/common/Global.hh" -RubyEventQueue* g_eventQueue_ptr = NULL; -RubySystem* g_system_ptr = NULL; -Debug* g_debug_ptr = NULL; +RubyEventQueue* g_eventQueue_ptr = 0; +RubySystem* g_system_ptr = 0; diff --git a/src/mem/ruby/common/Global.hh b/src/mem/ruby/common/Global.hh index de96c5a6b..357825465 100644 --- a/src/mem/ruby/common/Global.hh +++ b/src/mem/ruby/common/Global.hh @@ -31,7 +31,6 @@ // external includes for all classes #include "mem/ruby/common/TypeDefines.hh" -#include "mem/ruby/common/Debug.hh" // simple type declarations typedef Time LogicalTime; @@ -47,9 +46,6 @@ extern RubyEventQueue* g_eventQueue_ptr; class RubySystem; extern RubySystem* g_system_ptr; -class Debug; -extern Debug* g_debug_ptr; - // FIXME: this is required by the contructor of Directory_Entry.hh. // It can't go into slicc_util.hh because it opens a can of ugly worms extern inline int max_tokens() diff --git a/src/mem/ruby/common/SConscript b/src/mem/ruby/common/SConscript index 2197faae8..4184b4b5f 100644 --- a/src/mem/ruby/common/SConscript +++ b/src/mem/ruby/common/SConscript @@ -33,11 +33,8 @@ Import('*') if not env['RUBY']: Return() -SimObject('Debug.py') - Source('Address.cc') Source('DataBlock.cc') -Source('Debug.cc') Source('Driver.cc') Source('Global.cc') Source('Histogram.cc') diff --git a/src/mem/ruby/common/Set.cc b/src/mem/ruby/common/Set.cc index e747f5159..ffc0a3f07 100644 --- a/src/mem/ruby/common/Set.cc +++ b/src/mem/ruby/common/Set.cc @@ -29,6 +29,8 @@ // modified (rewritten) 05/20/05 by Dan Gibson to accomimdate FASTER // >32 bit set sizes +#include <cstdio> + #include "base/misc.hh" #include "mem/ruby/common/Set.hh" #include "mem/ruby/system/System.hh" |