summaryrefslogtreecommitdiff
path: root/src/mem/ruby/common
diff options
context:
space:
mode:
authorNathan Binkert <nate@binkert.org>2011-01-10 11:11:20 -0800
committerNathan Binkert <nate@binkert.org>2011-01-10 11:11:20 -0800
commitbd18ac82877072a87745aaf7a104e7bb036c6c66 (patch)
tree0fb980aea5b81d79160105fbf505670be0cf5e72 /src/mem/ruby/common
parent8e262adf4fcc009776810b9795f907fcd468591c (diff)
downloadgem5-bd18ac82877072a87745aaf7a104e7bb036c6c66.tar.xz
ruby: get rid of ruby's Debug.hh
Get rid of the Debug class Get rid of ASSERT and use assert Use DPRINTFR for ProtocolTrace
Diffstat (limited to 'src/mem/ruby/common')
-rw-r--r--src/mem/ruby/common/Debug.cc338
-rw-r--r--src/mem/ruby/common/Debug.hh162
-rw-r--r--src/mem/ruby/common/Debug.py52
-rw-r--r--src/mem/ruby/common/Global.cc5
-rw-r--r--src/mem/ruby/common/Global.hh4
-rw-r--r--src/mem/ruby/common/SConscript3
-rw-r--r--src/mem/ruby/common/Set.cc2
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"