summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/ruby/tester/DeterministicDriver.cc278
-rw-r--r--src/mem/ruby/tester/DeterministicDriver.hh150
-rw-r--r--src/mem/ruby/tester/RaceyDriver.cc146
-rw-r--r--src/mem/ruby/tester/RaceyDriver.hh130
-rw-r--r--src/mem/ruby/tester/RaceyPseudoThread.cc351
-rw-r--r--src/mem/ruby/tester/RaceyPseudoThread.hh152
-rw-r--r--src/mem/ruby/tester/SConscript40
-rw-r--r--src/mem/ruby/tester/SpecifiedGenerator.cc44
-rw-r--r--src/mem/ruby/tester/SpecifiedGenerator.hh68
-rw-r--r--src/mem/ruby/tester/Tester_Globals.hh39
-rw-r--r--src/mem/ruby/tester/main.cc45
-rw-r--r--src/mem/ruby/tester/main.hh43
-rw-r--r--src/mem/ruby/tester/test_framework.cc378
-rw-r--r--src/mem/ruby/tester/test_framework.hh45
14 files changed, 0 insertions, 1909 deletions
diff --git a/src/mem/ruby/tester/DeterministicDriver.cc b/src/mem/ruby/tester/DeterministicDriver.cc
deleted file mode 100644
index 9b0fe7967..000000000
--- a/src/mem/ruby/tester/DeterministicDriver.cc
+++ /dev/null
@@ -1,278 +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 <cassert>
-
-#include "base/misc.hh"
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/tester/Tester_Globals.hh"
-#include "mem/ruby/tester/DeterministicDriver.hh"
-#include "mem/ruby/eventqueue/RubyEventQueue.hh"
-//#include "DMAGenerator.hh"
-#include "mem/ruby/tester/DetermGETXGenerator.hh"
-
-using namespace std;
-
-#define DATA_BLOCK_BYTES 64
-
-DeterministicDriver::DeterministicDriver(string generator_type, int num_completions, int num_procs, Time g_think_time, Time g_wait_time, int g_tester_length)
-{
- eventQueue = new RubyEventQueue;
- m_finish_time = 0;
- m_last_issue = -11;
- m_done_counter = 0;
- m_loads_completed = 0;
- m_stores_completed = 0;
-
- m_numCompletionsPerNode = num_completions;
- m_num_procs = num_procs;
- m_think_time = g_think_time;
- m_wait_time = g_wait_time;
- m_tester_length = g_tester_length;
-
- m_last_progress_vector.resize(num_procs);
- for (int i=0; i<m_last_progress_vector.size(); i++) {
- m_last_progress_vector[i] = 0;
- }
-
- m_load_vector.resize(10);
- for (int i=0; i<m_load_vector.size(); i++) {
- m_load_vector[i] = -1; // No processor last held it
- }
-
- m_store_vector.resize(10);
- for (int i=0; i<m_store_vector.size(); i++) {
- m_store_vector[i] = -1; // No processor last held it
- }
-
- m_generator_vector.resize(num_procs);
-
- int generator = string_to_SpecifiedGeneratorType(generator_type);
-
- for (int i=0; i<m_generator_vector.size(); i++) {
- switch (generator) {
- case SpecifiedGeneratorType_DetermGETXGenerator:
- m_generator_vector[i] = new DetermGETXGenerator(i, this);
- break;
- case SpecifiedGeneratorType_DetermInvGenerator:
- m_generator_vector[i] = new DetermInvGenerator(i, *this);
- break;
- case SpecifiedGeneratorType_DetermSeriesGETSGenerator:
- m_generator_vector[i] = new DetermSeriesGETSGenerator(i, *this);
- break;
- default:
- fatal("Unexpected specified generator type");
- }
- }
-
- //m_dma_generator = new DMAGenerator(0, this);
-}
-
-
-void DeterministicDriver::go()
-{
- // tick both queues until everyone is done
- while (m_done_counter != m_num_procs) {
- libruby_tick(1);
- eventQueue->triggerEvents(eventQueue->getTime() + 1);
- }
-}
-
-
-DeterministicDriver::~DeterministicDriver()
-{
- for (int i=0; i<m_last_progress_vector.size(); i++) {
- delete m_generator_vector[i];
- }
-}
-
-//void DeterministicDriver::dmaHitCallback()
-//{
-// m_dma_generator->performCallback();
-//}
-
-void DeterministicDriver::wakeup() {
- assert(0);
- // this shouldn't be called as we are not scheduling the driver ever
-}
-
-void DeterministicDriver::hitCallback(int64_t request_id)
-{
- assert(requests.find(request_id) != requests.end());
- int proc = requests[request_id].first;
- Address address = requests[request_id].second;
-
- m_generator_vector[proc]->performCallback(proc, address);
-
- m_last_progress_vector[proc] = eventQueue->getTime();
-
- requests.erase(request_id);
-}
-
-bool DeterministicDriver::isStoreReady(NodeID node)
-{
- return isAddrReady(node, m_store_vector);
-}
-
-bool DeterministicDriver::isStoreReady(NodeID node, Address addr)
-{
- return isAddrReady(node, m_store_vector, addr);
-}
-
-bool DeterministicDriver::isLoadReady(NodeID node)
-{
- return isAddrReady(node, m_load_vector);
-}
-
-bool DeterministicDriver::isLoadReady(NodeID node, Address addr)
-{
- return isAddrReady(node, m_load_vector, addr);
-}
-
-// searches for any address in the addr_vector
-bool DeterministicDriver::isAddrReady(NodeID node, vector<NodeID> addr_vector)
-{
- for (int i=0; i<addr_vector.size(); i++) {
- if (((addr_vector[i]+1)%m_num_procs == node) &&
- (m_loads_completed+m_stores_completed >= m_numCompletionsPerNode*node) && // is this node next
- (eventQueue->getTime() >= m_last_issue + 10)) { // controll rate of requests
- return true;
- }
- }
-
- return false;
-}
-
-// test for a particular addr
-bool DeterministicDriver::isAddrReady(NodeID node, vector<NodeID> addr_vector, Address addr)
-{
- int addr_number = addr.getAddress()/DATA_BLOCK_BYTES;
-
- assert((addr_number >= 0) && (addr_number < addr_vector.size()));
-
- if (((addr_vector[addr_number]+1)%m_num_procs == node) &&
- (m_loads_completed+m_stores_completed >= m_numCompletionsPerNode*node) && // is this node next
- (eventQueue->getTime() >= m_last_issue + 10)) { // controll rate of requests
- return true;
- } else {
- return false;
- }
-}
-
-void DeterministicDriver::loadCompleted(NodeID node, Address addr)
-{
- m_loads_completed++;
- setNextAddr(node, addr, m_load_vector);
-}
-
-void DeterministicDriver::storeCompleted(NodeID node, Address addr)
-{
- m_stores_completed++;
- setNextAddr(node, addr, m_store_vector);
-}
-
-void DeterministicDriver::setNextAddr(NodeID node, Address addr, vector<NodeID>& addr_vector)
-{
- // mark the addr vector that this proc was the last to use the particular address
- int addr_number = addr.getAddress()/DATA_BLOCK_BYTES;
- addr_vector[addr_number] = node;
-}
-
-Address DeterministicDriver::getNextLoadAddr(NodeID node)
-{
- return getNextAddr(node, m_load_vector);
-}
-
-Address DeterministicDriver::getNextStoreAddr(NodeID node)
-{
- return getNextAddr(node, m_store_vector);
-}
-
-Address DeterministicDriver::getNextAddr(NodeID node, vector<NodeID> addr_vector)
-{
-
- // This method deterministically picks the next addr the node should acquirer
- // The addrs cycle through according to NodeID 0->1->...->lastID->0...
-
- Address addr;
-
- // should only be called if we know a addr is ready for the node
- assert(isAddrReady(node, addr_vector));
-
- for (int addr_number=0; addr_number<addr_vector.size(); addr_number++) {
-
- // is this node next in line for the addr
- // POLINA: LOOK HERE!
- // if ((addr_vector[addr_number] != 1) && ((addr_vector[addr_number]+1)%m_num_procs) == node) {
- if (((addr_vector[addr_number]+1)%m_num_procs) == node) {
-
- // One addr per cache line
- addr.setAddress(addr_number * DATA_BLOCK_BYTES);
- }
- }
-
- m_last_issue = eventQueue->getTime();
-
- return addr;
-}
-
-
-void DeterministicDriver::reportDone()
-{
- m_done_counter++;
- if ((m_done_counter == m_num_procs)) {
- m_finish_time = eventQueue->getTime();
- //m_dma_generator->stop();
- }
-}
-
-void DeterministicDriver::recordLoadLatency(Time time)
-{
- m_load_latency.add(time);
-}
-
-void DeterministicDriver::recordStoreLatency(Time time)
-{
- m_store_latency.add(time);
-}
-
-void DeterministicDriver::printStats(ostream& out) const
-{
- out << endl;
- out << "DeterministicDriver Stats" << endl;
- out << "---------------------" << endl;
-
- out << "finish_time: " << m_finish_time << endl;
- out << "load_latency: " << m_load_latency << endl;
- out << "store_latency: " << m_store_latency << endl;
-}
-
-void DeterministicDriver::print(ostream& out) const
-{
-}
diff --git a/src/mem/ruby/tester/DeterministicDriver.hh b/src/mem/ruby/tester/DeterministicDriver.hh
deleted file mode 100644
index ddc7bc99b..000000000
--- a/src/mem/ruby/tester/DeterministicDriver.hh
+++ /dev/null
@@ -1,150 +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.
- */
-
-/*
- * $Id$
- *
- * Description:
- *
- */
-
-#ifndef DETERMINISTICDRIVER_H
-#define DETERMINISTICDRIVER_H
-
-#include <map>
-#include <vector>
-
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/tester/Tester_Globals.hh"
-#include "mem/ruby/common/Histogram.hh" // includes global, but doesn't use anything, so it should be fine
-#include "mem/protocol/CacheRequestType.hh" // includes global, but doesn't use anything, so it should be fine
-#include "mem/ruby/common/Address.hh" // we redefined the address
-#include "mem/ruby/tester/DetermGETXGenerator.hh" // this is our file
-#include "mem/ruby/tester/DetermSeriesGETSGenerator.hh" // this is our file
-#include "mem/ruby/tester/DetermInvGenerator.hh" // this is our file
-#include "mem/ruby/libruby.hh"
-#include "mem/ruby/common/Driver.hh"
-#include "mem/ruby/common/Consumer.hh"
-#include "mem/ruby/eventqueue/RubyEventQueue.hh"
-#include "mem/protocol/SpecifiedGeneratorType.hh"
-
-//class DMAGenerator;
-
-class DeterministicDriver : public Driver, public Consumer {
-public:
- friend class DetermGETXGenerator;
- friend class DetermSeriesGETSGenerator;
- friend class DetermInvGenerator;
- // Constructors
- DeterministicDriver(string generator_type, int num_completions, int num_procs, Time g_think_time, Time g_wait_time, int g_tester_length);
-
- // Destructor
- ~DeterministicDriver();
-
- // Public Methods
- void go();
- bool isStoreReady(NodeID node);
- bool isLoadReady(NodeID node);
- bool isStoreReady(NodeID node, Address addr);
- bool isLoadReady(NodeID node, Address addr);
- void loadCompleted(NodeID node, Address addr);
- void storeCompleted(NodeID node, Address addr);
- Address getNextLoadAddr(NodeID node);
- Address getNextStoreAddr(NodeID node);
- int getLoadsCompleted() { return m_loads_completed; }
- int getStoresCompleted() { return m_stores_completed; }
-
- void reportDone();
- void recordLoadLatency(Time time);
- void recordStoreLatency(Time time);
-
-// void dmaHitCallback();
- void hitCallback(int64_t request_id);
- void wakeup();
- void printStats(ostream& out) const;
- void clearStats() {}
- void printConfig(ostream& out) const {}
-
- void print(ostream& out) const;
- // Public copy constructor and assignment operator
- DeterministicDriver(const DeterministicDriver& obj);
- DeterministicDriver& operator=(const DeterministicDriver& obj);
-
-private:
- // Private Methods
-
- Address getNextAddr(NodeID node, std::vector<NodeID> addr_vector);
- bool isAddrReady(NodeID node, std::vector<NodeID> addr_vector);
- bool isAddrReady(NodeID node, std::vector<NodeID> addr_vector, Address addr);
- void setNextAddr(NodeID node, Address addr, std::vector<NodeID>& addr_vector);
-
-
- // Data Members (m_ prefix)
- std::vector<Time> m_last_progress_vector;
- std::vector<SpecifiedGenerator*> m_generator_vector;
- //DMAGenerator* m_dma_generator;
- std::vector<NodeID> m_load_vector; // Processor last to load the addr
- std::vector<NodeID> m_store_vector; // Processor last to store the addr
-
- int last_proc;
- int m_done_counter;
- int m_loads_completed;
- int m_stores_completed;
- // enforces the previous node to have a certain # of completions
- // before next node starts
-
- map <int64_t, pair <int, Address> > requests;
- Time m_think_time;
- Time m_wait_time;
- int m_tester_length;
- int m_num_procs;
- RubyEventQueue * eventQueue;
- int m_numCompletionsPerNode;
-
- Histogram m_load_latency;
- Histogram m_store_latency;
- Time m_finish_time;
- Time m_last_issue;
-};
-
-// Output operator declaration
-ostream& operator<<(ostream& out, const DeterministicDriver& obj);
-
-// ******************* Definitions *******************
-
-// Output operator definition
-extern inline
-ostream& operator<<(ostream& out, const DeterministicDriver& obj)
-{
- obj.print(out);
- out << flush;
- return out;
-}
-
-#endif //DETERMINISTICDRIVER_H
diff --git a/src/mem/ruby/tester/RaceyDriver.cc b/src/mem/ruby/tester/RaceyDriver.cc
deleted file mode 100644
index bc41b0281..000000000
--- a/src/mem/ruby/tester/RaceyDriver.cc
+++ /dev/null
@@ -1,146 +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 <cassert>
-
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/tester/Tester_Globals.hh"
-#include "mem/ruby/tester/RaceyDriver.hh"
-#include "mem/ruby/eventqueue/RubyEventQueue.hh"
-#include "mem/ruby/tester/RaceyPseudoThread.hh"
-
-RaceyDriver::RaceyDriver(int num_procs, int tester_length)
-{
- m_finish_time = 0;
- m_done_counter = 0;
- m_wakeup_thread0 = false;
- m_num_procs = num_procs;
- m_tester_length = tester_length;
- eventQueue = new RubyEventQueue;
-
- // racey at least need two processors
- assert(m_num_procs >= 2);
-
- // init all racey pseudo threads
- m_racey_pseudo_threads.resize(m_num_procs);
- for (int i=0; i<m_racey_pseudo_threads.size(); i++) {
- m_racey_pseudo_threads[i] = new RaceyPseudoThread(i, *this);
- }
-
- // add this driver to the global event queue, for deadlock detection
- eventQueue->scheduleEvent(this, g_DEADLOCK_THRESHOLD);
-}
-
-RaceyDriver::~RaceyDriver()
-{
- for (int i=0; i<m_racey_pseudo_threads.size(); i++) {
- delete m_racey_pseudo_threads[i];
- }
-}
-
-void RaceyDriver::go() {
- // tick both queues until everyone is done
- while (m_done_counter != m_num_procs) {
- libruby_tick(1);
- eventQueue->triggerEvents(eventQueue->getTime() + 1);
- }
-}
-
-
-void RaceyDriver::hitCallback(int64_t request_id)
-{
- assert(requests.find(request_id) != requests.end());
- int proc = requests[request_id].first;
- Address address = requests[request_id].second.address;
- uint8_t * data = new uint8_t[4];
- for (int i = 0; i < 4; i++) {
- data[i] = requests[request_id].second.data[i];
- }
- requests[request_id].second.data;
- m_racey_pseudo_threads[proc]->performCallback(proc, address, data);
- requests.erase(request_id);
-}
-
-integer_t RaceyDriver::getInstructionCount(int procID) const
-{
- // return m_racey_pseudo_threads[procID]->getInstructionCounter();
- assert(0);
-}
-
-int RaceyDriver::runningThreads()
-{
- return m_num_procs - m_done_counter;
-}
-
-// used to wake up thread 0 whenever other thread finishes
-void RaceyDriver::registerThread0Wakeup()
-{
- m_wakeup_thread0 = true;
-}
-
-void RaceyDriver::joinThread()
-{
- m_done_counter++;
- if (m_done_counter == m_num_procs) {
- m_finish_time = eventQueue->getTime();
- }
-
- if(m_wakeup_thread0) {
- eventQueue->scheduleEvent(m_racey_pseudo_threads[0], 1);
- m_wakeup_thread0 = false;
- }
-}
-
-void RaceyDriver::wakeup()
-{
- // check for deadlock
- for(int i = 0 ; i < m_racey_pseudo_threads.size(); i++) {
- m_racey_pseudo_threads[i]->checkForDeadlock();
- }
-
- // schedule next wakeup
- if (m_done_counter < m_num_procs) {
- eventQueue->scheduleEvent(this, g_DEADLOCK_THRESHOLD);
- }
-}
-
-void RaceyDriver::printStats(ostream& out) const
-{
- assert(m_done_counter == m_num_procs);
- out << endl;
- out << "RaceyDriver Stats" << endl;
- out << "---------------------" << endl;
-
- out << "execution signature: " << m_racey_pseudo_threads[0]->getSignature() << endl;
- out << "finish_time: " << m_finish_time << endl;
-}
-
-void RaceyDriver::print(ostream& out) const
-{
-}
diff --git a/src/mem/ruby/tester/RaceyDriver.hh b/src/mem/ruby/tester/RaceyDriver.hh
deleted file mode 100644
index 9a4702ba8..000000000
--- a/src/mem/ruby/tester/RaceyDriver.hh
+++ /dev/null
@@ -1,130 +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.
- */
-
-/*
- * $Id$
- *
- * Description: The driver interface between racey pseudo threads and ruby
- * memory timing simulator.
- *
- */
-
-#ifndef RACEYDRIVER_H
-#define RACEYDRIVER_H
-
-#include <map>
-#include <vector>
-
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/tester/Tester_Globals.hh"
-#include "mem/ruby/common/Driver.hh"
-#include "mem/ruby/tester/RaceyPseudoThread.hh"
-#include "mem/ruby/libruby.hh"
-
-#define g_DEADLOCK_THRESHOLD 5000
-
-
-struct address_data {
- Address address;
- uint8_t * data;
-};
-
-class RaceyDriver : public Driver, public Consumer {
-public:
- friend class RaceyPseudoThread;
- // Constructors
- RaceyDriver(int num_procs, int tester_length);
-
- // Destructor
- ~RaceyDriver();
-
- // Public Methods
- int runningThreads();
- void registerThread0Wakeup();
- void joinThread();
- bool Thread0Initialized() {
- return m_racey_pseudo_threads[0]->getInitializedState();
- };
-
- void hitCallback(int64_t request_id);
- void wakeup();
- void printStats(ostream& out) const;
- void clearStats() {}
- void printConfig(ostream& out) const {}
- void go();
-
- integer_t getInstructionCount(int procID) const;
-
- // save/load cpu states
- void saveCPUStates(int cpu_id, string filename) {
- m_racey_pseudo_threads[cpu_id]->saveCPUStates(filename);
- };
- void loadCPUStates(int cpu_id, string filename) {
- m_racey_pseudo_threads[cpu_id]->loadCPUStates(filename);
- };
-
- // reset IC
- void resetIC(int cpu_id) {
- m_racey_pseudo_threads[cpu_id]->resetIC();
- }
-
- void print(ostream& out) const;
-
-private:
-
- // Private copy constructor and assignment operator
- RaceyDriver(const RaceyDriver& obj);
- RaceyDriver& operator=(const RaceyDriver& obj);
-
- // Data Members (m_ prefix)
- std::vector<RaceyPseudoThread*> m_racey_pseudo_threads;
- int m_done_counter;
- bool m_wakeup_thread0;
- Time m_finish_time;
- map <int64_t, pair <int, struct address_data> > requests;
- RubyEventQueue * eventQueue;
- int m_num_procs;
- int m_tester_length;
-};
-
-// Output operator declaration
-ostream& operator<<(ostream& out, const RaceyDriver& obj);
-
-// ******************* Definitions *******************
-
-// Output operator definition
-extern inline
-ostream& operator<<(ostream& out, const RaceyDriver& obj)
-{
- obj.print(out);
- out << flush;
- return out;
-}
-
-#endif //RACEYDRIVER_H
-
diff --git a/src/mem/ruby/tester/RaceyPseudoThread.cc b/src/mem/ruby/tester/RaceyPseudoThread.cc
deleted file mode 100644
index ae01585e6..000000000
--- a/src/mem/ruby/tester/RaceyPseudoThread.cc
+++ /dev/null
@@ -1,351 +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.
- */
-
-/*
- * Description: see RaceyPseudoThread.h
- */
-
-#include <cassert>
-
-#include "mem/ruby/tester/RaceyPseudoThread.hh"
-#include "mem/ruby/tester/RaceyDriver.hh"
-#include "gzstream.hh"
-
-RaceyPseudoThread::RaceyPseudoThread(NodeID id, RaceyDriver& driver)
- : m_driver(driver), m_proc_id(id) {
-
- resetIC(); // IC contains the committed instruction number
- m_last_progress = 0;
- m_done = false;
- m_stop = 0;
- m_driver.eventQueue->scheduleEvent(this, 1);
-}
-
-RaceyPseudoThread::~RaceyPseudoThread() {
-}
-
-void RaceyPseudoThread::checkForDeadlock() {
- Time current_time = m_driver.eventQueue->getTime();
- if(!m_done && (current_time - m_last_progress) > g_DEADLOCK_THRESHOLD) {
- panic("Deadlock detected: m_proc_id: %d m_ic_counter: %d "
- "m_last_progress: %d\n",
- m_proc_id, m_ic_counter, m_last_progress);
- }
-}
-
-void RaceyPseudoThread::performCallback(int proc, Address address, uint8_t * data ) {
- assert(proc == m_proc_id);
-
- DPRINTF(RubyTester, "proc: %d, address: %s\n", proc, address);
-
- m_last_progress = m_driver.eventQueue->getTime();
-
- if(m_read) {
- int b0, b1, b2, b3;
- b0 = data[0]; b0 <<= 0;
- b1 = data[1]; b1 <<= 8;
- b2 = data[2]; b2 <<= 16;
- b3 = data[3]; b3 <<= 24;
- m_value = b0 | b1 | b2 | b3;
- } else {
- char b0, b1, b2, b3;
- b0 = (m_value>>0)&0xFF; data[0] = b0;
- b1 = (m_value>>8)&0xFF; data[1] = b1;
- b2 = (m_value>>16)&0xFF; data[2] = b2;
- b3 = (m_value>>24)&0xFF; data[3] = b3;
- }
-
- // schedule wakeup for next requests in next cycle
- m_driver.eventQueue->scheduleEvent(this, 1);
-
- // new instruction
- m_ic_counter++;
-
-}
-
-void RaceyPseudoThread::wakeup() {
- // for debug
- if(m_stop != 0) {
- cout << m_proc_id << " " << m_stop << ((m_read)? " read ":" written ") << m_value;
- if(0) cout << " [" << m_driver.eventQueue->getTime() << "]";
- cout << endl;
- }
-
- assert(!m_done);
-
- // Note, this function can not have ANY local variable!
-
- switch(m_stop) {
- case 0:
- break;
- case 1:
- goto L1;
- case 2:
- goto L2;
- case 3:
- goto L3;
- case 4:
- goto L4;
- case 5:
- goto L5;
- case 6:
- goto L6;
- case 7:
- goto L7;
- case 8:
- goto L8;
- case 9:
- goto L9;
- case 10:
- goto L10;
- default:
- fatal("RaceyPseudoThread: Bad context point %u!", m_stop);
- }
-
- //
- // initialization
- //
- if(m_proc_id == 0) {
- for(m_looper = 0; m_looper < m_driver.m_num_procs; m_looper++) {
- store_sig(m_looper, m_looper+1);
- m_stop = 6; return;
-L6: {};
- }
- for(m_looper = 0; m_looper < M_ELEM; m_looper++) {
- store_m(m_looper, M_ELEM-m_looper);
- m_stop = 7; return;
-L7: {};
- }
-
- // init done
- m_initialized = true;
- } else {
- // other processors
- if(!m_driver.Thread0Initialized()) {
- // wait for processors 0
- m_driver.eventQueue->scheduleEvent(this, 1);
- return;
- }
- }
-
- cout << "Thread " << m_proc_id << " started in parallel phase" << endl;
-
- //
- // main thread body
- //
- for(m_looper = 0 ; m_looper < m_driver.m_tester_length; m_looper++) {
- /* m_value = */ load_sig(m_proc_id);
- m_stop = 1; return;
-L1: {};
- m_num = m_value;
- m_index1 = m_num%M_ELEM;
- /* m_value = */ load_m(m_index1);
- m_stop = 2; return;
-L2: {};
- m_num = mix(m_num, m_value);
- m_index2 = m_num%M_ELEM;
- /* m_value = */ load_m(m_index2);
- m_stop = 3; return;
-L3: {};
- m_num = mix(m_num, m_value);
- store_m(m_index2, m_num);
- m_stop = 4; return;
-L4: {};
- store_sig(m_proc_id, m_num);
- m_stop = 5; return;
-L5: {};
- } // end for
-
- //
- // compute final sig
- //
- if(m_proc_id == 0) {
- // wait for other threads
- while (m_driver.runningThreads() > 1) {
- m_driver.registerThread0Wakeup();
- m_stop = 10; return;
-L10: {};
- }
-
- /* m_value = */ load_sig(0);
- m_stop = 8; return;
-L8: {};
- m_final_sig = m_value;
- for(m_looper = 1; m_looper < m_driver.m_num_procs; m_looper++) {
- /* m_value = */ load_sig(m_looper);
- m_stop = 9; return;
-L9: {};
- m_final_sig = mix(m_value, m_final_sig);
- }
- } // processors 0
-
- // done
- m_driver.joinThread();
- m_done = true;
-}
-
-void RaceyPseudoThread::load_sig(unsigned index) {
- cout << m_proc_id << " : load_sig " << index << endl;
-
- m_read = true;
- // timestamp, threadid, action, and logical address are used only by transactional memory, should be augmented
- uint8_t * read_data = new uint8_t[4];
-
- char name [] = "Sequencer_";
- char port_name [13];
- sprintf(port_name, "%s%d", name, m_proc_id);
-
- // pc is zero, problem?
- int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(sig(index), read_data, 4, 0, RubyRequestType_LD, RubyAccessMode_User));
-
- assert(m_driver.requests.find(request_id) == m_driver.requests.end());
-
- struct address_data request_data;
- request_data.address = Address(sig(index));
- request_data.data = read_data;
- m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
-
- /*sequencer()->makeRequest(CacheMsg(Address(sig(index)), Address(sig(index)), CacheRequestType_LD,
- Address(physical_address_t(1)),
- AccessModeType_UserMode, 4,
- PrefetchBit_No, 0, Address(0),
- 0, 0 , false)); */
-}
-
-void RaceyPseudoThread::load_m(unsigned index) {
- // cout << m_proc_id << " : load_m " << index << endl;
-
- m_read = true;
- uint8_t * read_data = new uint8_t[4];
-
- char name [] = "Sequencer_";
- char port_name [13];
- sprintf(port_name, "%s%d", name, m_proc_id);
-
- // pc is zero, problem?
- int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m(index), read_data, 4, 0, RubyRequestType_LD, RubyAccessMode_User));
-
- assert(m_driver.requests.find(request_id) == m_driver.requests.end());
-
- struct address_data request_data;
- request_data.address = Address(m(index));
- request_data.data = read_data;
- m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
-
- /*sequencer()->makeRequest(CacheMsg(Address(m(index)), Address(m(index)), CacheRequestType_LD,
- Address(physical_address_t(1)),
- AccessModeType_UserMode, 4,
- PrefetchBit_No, 0, Address(0),
- 0, 0, false)); */
-}
-
-void RaceyPseudoThread::store_sig(unsigned index, unsigned value) {
- cout << m_proc_id << " : store_sig " << index << " " << value << endl;
-
- m_read = false;
- m_value = value;
- uint8_t * write_data = new uint8_t[4];
-
-
- memcpy(write_data, &value, 4);
-
- char name [] = "Sequencer_";
- char port_name [13];
- sprintf(port_name, "%s%d", name, m_proc_id);
-
- // pc is zero, problem?
- int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(sig(index), write_data, 4, 0, RubyRequestType_ST, RubyAccessMode_User));
-
- assert(m_driver.requests.find(request_id) == m_driver.requests.end());
-
- struct address_data request_data;
- request_data.address = Address(sig(index));
- request_data.data = write_data;
- m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
-
- /*sequencer()->makeRequest(CacheMsg(Address(sig(index)), Address(sig(index)), CacheRequestType_ST,
- Address(physical_address_t(1)),
- AccessModeType_UserMode, 4,
- PrefetchBit_No, 0, Address(0),
- 0, 0, false)); */
-}
-
-void RaceyPseudoThread::store_m(unsigned index, unsigned value) {
- //cout << m_proc_id << " : store_m " << index << endl;
-
- m_read = false;
- m_value = value;
- uint8_t * write_data = new uint8_t[4];
- memcpy(write_data, &value, 4);
-
- char name [] = "Sequencer_";
- char port_name [13];
- sprintf(port_name, "%s%d", name, m_proc_id);
-
- // pc is zero, problem?
- int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m(index), write_data, 4, 0, RubyRequestType_ST, RubyAccessMode_User));
-
- assert(m_driver.requests.find(request_id) == m_driver.requests.end());
-
- struct address_data request_data;
- request_data.address = Address(m(index));
- request_data.data = write_data;
- m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
-
- /*sequencer()->makeRequest(CacheMsg(Address(m(index)), Address(m(index)), CacheRequestType_ST,
- Address(physical_address_t(1)),
- AccessModeType_UserMode, 4,
- PrefetchBit_No, 0, Address(0),
- 0, 0, false)); */
-}
-
-// Save and Load context of a thread
-void RaceyPseudoThread::saveCPUStates(string filename) {
- ogzstream out(filename.c_str());
- out.write((char*)&m_looper, sizeof(int));
- out.write((char*)&m_num, sizeof(unsigned));
- out.write((char*)&m_index1, sizeof(unsigned));
- out.write((char*)&m_index2, sizeof(unsigned));
- out.write((char*)&m_stop, sizeof(unsigned));
- out.close();
-}
-
-void RaceyPseudoThread::loadCPUStates(string filename) {
- igzstream out(filename.c_str());
- out.read((char*)&m_looper, sizeof(int));
- out.read((char*)&m_num, sizeof(unsigned));
- out.read((char*)&m_index1, sizeof(unsigned));
- out.read((char*)&m_index2, sizeof(unsigned));
- out.read((char*)&m_stop, sizeof(unsigned));
- out.close();
-}
-
-void RaceyPseudoThread::print(ostream& out) const {
- out << "[Racey Pseudo Thread: " << m_proc_id << "]" << endl;
-}
-
diff --git a/src/mem/ruby/tester/RaceyPseudoThread.hh b/src/mem/ruby/tester/RaceyPseudoThread.hh
deleted file mode 100644
index 103e42111..000000000
--- a/src/mem/ruby/tester/RaceyPseudoThread.hh
+++ /dev/null
@@ -1,152 +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.
- */
-
-/*
- * Description: This implements a pseudo racey thread which drives ruby timing
- * simulator with access to two shared arrays.
- *
- */
-
-#ifndef RACEYPSEUDOTHREAD_H
-#define RACEYPSEUDOTHREAD_H
-
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/tester/Tester_Globals.hh"
-#include "mem/ruby/common/Consumer.hh"
-#include "mem/ruby/system/NodeID.hh"
-#include "mem/ruby/common/Address.hh"
-#include "mem/ruby/libruby.hh"
-
-class RaceyDriver;
-
-class RaceyPseudoThread : public Consumer {
-private:
- // constants
- static const int PRIME1 = 103072243;
- static const int PRIME2 = 103995407;
- static const int M_ELEM = 64;
-
- // m and sig array's starting address,
- // each signature should occupy a cacheline
- static const int SIG_ARR = 0;
- static const int M_ARR = 0x10000;
- static const int LINESIZE = 64;
-
- // get address of a element from the m and sig arrays
- physical_address_t sig(unsigned index) {
- assert(index < M_ARR/64);
- return SIG_ARR + (index*64);
- };
- physical_address_t m(unsigned index) { return M_ARR + (index*64); };
-
-public:
- // Constructors
- RaceyPseudoThread(NodeID node, RaceyDriver& driver);
-
- // Destructor
- ~RaceyPseudoThread();
-
- // Public Methods
- void performCallback(int proc, Address address, uint8_t * data);
-
- void wakeup();
-
- integer_t getInstructionCount() { return m_ic_counter; };
-
- unsigned getSignature() { assert(m_proc_id == 0); return m_final_sig; };
-
- void checkForDeadlock();
-
- // save and restore the thread state
- void saveCPUStates(string filename);
- void loadCPUStates(string filename);
-
- // reset IC to zero for next checkpoint
- void resetIC() { m_ic_counter = 0; };
-
- bool getInitializedState() { return m_initialized; };
-
- void print(ostream& out) const;
-private:
- // Private Methods
-
- // mix two numbers
- unsigned mix (unsigned i, unsigned j) { return (i + j * PRIME2) % PRIME1; };
-
- // load or store the array
- void load_sig(unsigned index);
- void load_m(unsigned index);
- void store_sig(unsigned index, unsigned value);
- void store_m(unsigned index, unsigned value);
-
- // Private copy constructor and assignment operator
- RaceyPseudoThread(const RaceyPseudoThread& obj);
- RaceyPseudoThread& operator=(const RaceyPseudoThread& obj);
-
- // Data Members (m_ prefix)
- RaceyDriver& m_driver;
- NodeID m_proc_id;
-
- // are we done?
- bool m_done;
-
- // [committed] instruction counter
- int m_ic_counter;
-
- // last time we made progress
- Time m_last_progress;
-
- // value of the callback block
- bool m_read;
- unsigned m_value;
-
- // final signature
- unsigned m_final_sig;
-
- // local variables for the pseudo thread
- int m_looper;
- unsigned m_num, m_index1, m_index2, m_stop;
- bool m_initialized;
-};
-
-// Output operator declaration
-ostream& operator<<(ostream& out, const RaceyPseudoThread& obj);
-
-// ******************* Definitions *******************
-
-// Output operator definition
-extern inline
-ostream& operator<<(ostream& out, const RaceyPseudoThread& obj)
-{
- obj.print(out);
- out << flush;
- return out;
-}
-
-#endif //RACEYPSEUDOTHREAD_H
-
diff --git a/src/mem/ruby/tester/SConscript b/src/mem/ruby/tester/SConscript
deleted file mode 100644
index 2efe7c89e..000000000
--- a/src/mem/ruby/tester/SConscript
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- mode:python -*-
-
-# Copyright (c) 2009 The Hewlett-Packard Development Company
-# 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: Nathan Binkert
-
-Import('*')
-
-if not env['RUBY']:
- Return()
-
-#Source('SpecifiedGenerator.cc')
-#Source('main.cc')
-#Source('test_framework.cc')
-#Source('RaceyDriver.cc')
-#Source('RaceyPseudoThread.cc')
diff --git a/src/mem/ruby/tester/SpecifiedGenerator.cc b/src/mem/ruby/tester/SpecifiedGenerator.cc
deleted file mode 100644
index f82cb1533..000000000
--- a/src/mem/ruby/tester/SpecifiedGenerator.cc
+++ /dev/null
@@ -1,44 +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.
- */
-
-/*
- * $Id$
- *
- */
-
-#include "mem/ruby/tester/SpecifiedGenerator.hh"
-
-SpecifiedGenerator::SpecifiedGenerator()
-{
-}
-
-SpecifiedGenerator::~SpecifiedGenerator()
-{
-}
-
diff --git a/src/mem/ruby/tester/SpecifiedGenerator.hh b/src/mem/ruby/tester/SpecifiedGenerator.hh
deleted file mode 100644
index 3287a4055..000000000
--- a/src/mem/ruby/tester/SpecifiedGenerator.hh
+++ /dev/null
@@ -1,68 +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.
- */
-
-/*
- * $Id$
- *
- * Description:
- *
- */
-
-#ifndef SPECIFIEDGENERATOR_H
-#define SPECIFIEDGENERATOR_H
-
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/tester/Tester_Globals.hh"
-#include "mem/ruby/common/Consumer.hh"
-#include "mem/ruby/system/NodeID.hh"
-#include "mem/ruby/common/Address.hh"
-
-class SpecifiedGenerator : public Consumer {
-public:
- // Constructors
- SpecifiedGenerator();
-
- // Destructor
- virtual ~SpecifiedGenerator() = 0;
-
- // Public Methods
- virtual void wakeup() = 0;
- virtual void performCallback(NodeID proc, Address address) = 0;
-
- virtual void print(ostream& out) const = 0;
-protected:
- // accessible by subclasses
-
-private:
- // inaccessible by subclasses
-
-};
-
-#endif //SPECIFIEDGENERATOR_H
-
diff --git a/src/mem/ruby/tester/Tester_Globals.hh b/src/mem/ruby/tester/Tester_Globals.hh
deleted file mode 100644
index a893d7d25..000000000
--- a/src/mem/ruby/tester/Tester_Globals.hh
+++ /dev/null
@@ -1,39 +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.
- */
-
-/*
- * $Id$
- *
- * */
-
-#include "mem/ruby/eventqueue/RubyEventQueue.hh"
-
-class RubyEventQueue;
-extern RubyEventQueue * eventQueue;
-
diff --git a/src/mem/ruby/tester/main.cc b/src/mem/ruby/tester/main.cc
deleted file mode 100644
index 849206de9..000000000
--- a/src/mem/ruby/tester/main.cc
+++ /dev/null
@@ -1,45 +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.
- */
-
-/*
- * $Id$
- *
- */
-
-#include "mem/slicc/main.hh"
-#include "mem/ruby/tester/test_framework.hh"
-
-// *******************
-// *** tester main ***
-// *******************
-
-int main(int argc, char *argv[])
-{
- tester_main(argc, argv);
-}
diff --git a/src/mem/ruby/tester/main.hh b/src/mem/ruby/tester/main.hh
deleted file mode 100644
index a6a0d73b6..000000000
--- a/src/mem/ruby/tester/main.hh
+++ /dev/null
@@ -1,43 +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.
- */
-
-/*
- * $Id$
- *
- * Description:
- *
- */
-
-#ifndef MAIN_H
-#define MAIN_H
-
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/tester/Tester_Globals.hh"
-
-#endif //MAIN_H
diff --git a/src/mem/ruby/tester/test_framework.cc b/src/mem/ruby/tester/test_framework.cc
deleted file mode 100644
index 9e834a0d3..000000000
--- a/src/mem/ruby/tester/test_framework.cc
+++ /dev/null
@@ -1,378 +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.
- */
-
-/*
- * $Id$
- *
- */
-
-using namespace std;
-
-#include "base/misc.hh"
-#include "mem/ruby/tester/test_framework.hh"
-#include "mem/protocol/protocol_name.hh"
-#include "mem/ruby/tester/DeterministicDriver.hh"
-#include "mem/ruby/tester/RaceyDriver.hh"
-#include "mem/ruby/common/Driver.hh"
-#include "mem/ruby/recorder/Tracer.hh"
-
-
-#include <string>
-#include <map>
-#include <iostream>
-#include <assert.h>
-#include <vector>
-#include <string>
-#include <sstream>
-#include <sys/wait.h>
-
-#include "mem/ruby/libruby.hh"
-
-// FIXME: should really make this a class if can't figure out how to make a function to get the ruby parameter
-static void set_defaults();
-static void parseOptions(int argc, char **argv);
-static void usageInstructions();
-static void checkArg(char ch);
-static void tester_initialize(int argc, char **argv);
-static void tester_playback_trace();
-static void tester_destroy();
-static void hit_callback(int64_t request_id);
-
-// Tester variables
-string driver_type;
-string generator_type;
-Driver * m_driver_ptr;
-int g_tester_length;
-int num_completions;
-Time g_think_time;
-Time g_wait_time;
-int num_procs;
-static string trace_filename;
-bool replaying;
-
-void tester_main(int argc, char **argv)
-{
- tester_initialize(argc, argv);
-
- if (trace_filename != "") {
- // playback a trace (for multicast-mask prediction)
- replaying = true;
- tester_playback_trace();
- }
-
-
- tester_destroy();
-}
-
-vector<string> tokenizeMyString(string str, string delims)
-{
- vector<string> tokens;
- char* pch;
- char* tmp;
- const char* c_delims = delims.c_str();
- tmp = new char[str.length()+1];
- strcpy(tmp, str.c_str());
- pch = strtok(tmp, c_delims);
- while (pch != NULL) {
- tokens.push_back(string(pch));
- pch = strtok(NULL, c_delims);
- }
- delete [] tmp;
- return tokens;
-}
-
-
-vector<string> getPorts(const char* cfg_script, int cfg_script_argc, char* cfg_script_argv[])
-{
- stringstream cfg_output;
-
- // first we execute the Ruby-lang configuration script
- int fd[2];
- int pid;
- if (pipe(fd) == -1) {
- perror("Error Creating Pipe");
- exit(EXIT_FAILURE);
- }
-
- pid = fork();
- if (pid == -1){
- perror("Error forking");
- exit(EXIT_FAILURE);
- }
-
- if (!pid) {
- // child
- close(fd[0]); // close the read end of the pipe
- // replace stdout with the write pipe
- if (dup2(fd[1], STDOUT_FILENO) == -1) {
- perror("Error redirecting stdout");
- exit(EXIT_FAILURE);
- }
-#define QUOTE_MACRO(x, y) QUOTE_TXT(x,y)
-#define QUOTE_TXT(x, y) #x y
- if (execlp("ruby", "ruby", "-I", QUOTE_MACRO(GEMS_ROOT, "/ruby/config"), QUOTE_MACRO(GEMS_ROOT, "/tests/list_ports.rb"), cfg_script, NULL)) {
- perror("execlp");
- exit(EXIT_FAILURE);
- }
- } else {
- close(fd[1]);
-
- int child_status;
- if (wait(&child_status) == -1) {
- perror("wait");
- exit(EXIT_FAILURE);
- }
- if (child_status != EXIT_SUCCESS) {
- exit(EXIT_FAILURE);
- }
-
- char buf[100];
- int bytes_read;
- while( (bytes_read = read(fd[0], buf, 100)) > 0 ) {
- for (int i=0;i<bytes_read;i++) {
- cfg_output << buf[i];
- }
- }
- assert(bytes_read == 0);
- close(fd[0]);
- }
- string line;
- getline(cfg_output, line);
-
- return tokenizeMyString(line, " ");
-}
-
-
-
-void tester_initialize(int argc, char **argv)
-{
- const char* cfg_file = argv[1];
-
- set_defaults();
- parseOptions(argc, argv);
-
- libruby_init(cfg_file);
- libruby_print_config(std::cout);
-
- vector<string> port_names = getPorts(cfg_file, 0, NULL);
- vector<RubyPortHandle> ports;
-
- for (vector<string>::const_iterator it = port_names.begin(); it != port_names.end(); it++)
- ports.push_back(libruby_get_port((*it).c_str(), hit_callback));
-
- if (driver_type == "Deterministic") {
- m_driver_ptr = new DeterministicDriver(generator_type, num_completions, num_procs, g_think_time, g_wait_time, g_tester_length);
- }
- else if (driver_type == "Racey") {
- m_driver_ptr = new RaceyDriver(num_procs, g_tester_length);
- }
- /* else if (driver_type == "Synthetic") {
- m_driver_ptr = new SyntheticDriver();
- }
- }*/
-
- if (trace_filename == "") {
- m_driver_ptr->go();
- }
-}
-
-void tester_playback_trace()
-{
- replaying = true;
- assert(trace_filename != "");
- cout << "Reading trace from file '" << trace_filename << "'..." << endl;
- Tracer * replayer = new Tracer("noname");
- int read = replayer->playbackTrace(trace_filename);
- cout << "(" << read << " requests read)" << endl;
- if (read == 0) {
- fatal("Zero items read from tracefile.");
- }
-}
-
-void tester_destroy()
-{
- m_driver_ptr->printStats(cout);
- libruby_destroy();
- cerr << "Success: " << CURRENT_PROTOCOL << endl;
-}
-
-
-void hit_callback(int64_t request_id)
-{
- if (!replaying) {
- m_driver_ptr->hitCallback(request_id);
- }
-}
-
-// ************************************************************************
-// *** Functions for parsing the command line parameters for the tester ***
-// ************************************************************************
-
-
-
-static struct option const long_options[] =
-{
- {"help", no_argument, NULL, 'h'},
- {"number of processors", required_argument, NULL, 'p'},
- {"test run length", required_argument, NULL, 'l'},
- {"generator think time", required_argument, NULL, 'k'},
- {"generator wait time", required_argument, NULL, 'w'},
- {"driver type", required_argument, NULL, 'd'},
- {"generator type", required_argument, NULL, 'g'},
- {"num completions before pass", required_argument, NULL, 'n'},
- {"test tracer", required_argument, NULL, 'z'},
- {NULL, 0, NULL, 0}
-};
-
-
-// This is awkward and temporary, need the defaults config, and also need functions to
-// just lookup a parameter in the configuration file
-// Ideally the default values are set by libruby_init and then a function is provided to
-// set values at run-time
-static void set_defaults() {
- replaying = false;
- g_tester_length = 0;
- g_think_time = 10;
- g_wait_time = 10;
-
- num_procs = 1;
- trace_filename = "";
- num_completions = 1;
- driver_type = "Deterministic";
- generator_type = "DetermSeriesGETSGenerator";
-}
-
-static void parseOptions(int argc, char **argv)
-{
- cout << "Parsing command line arguments:" << endl;
-
- // construct the short arguments string
- int counter = 0;
- string short_options;
- while (long_options[counter].name != NULL) {
- short_options += char(long_options[counter].val);
- if (long_options[counter].has_arg == required_argument) {
- short_options += char(':');
- }
- counter++;
- }
-
- char c;
- /* Parse command line options. */
- while ((c = getopt_long (argc, argv, short_options.c_str(), long_options, (int *) 0)) != EOF) {
- switch (c) {
- case 0:
- break;
- case 'h':
- usageInstructions();
- break;
- case 'p':
- checkArg(c);
- cout << " number of processors = " << optarg << endl;
- num_procs = atoi( optarg );
- break;
- case 'l': {
- checkArg(c);
- g_tester_length = atoi(optarg);
- cout << " length of run = " << g_tester_length << endl;
- if (g_tester_length == 0) {
- usageInstructions();
- }
- break;
- }
- case 'k': {
- checkArg(c);
- g_think_time = atoi(optarg);
- break;
- }
- case 'w': {
- checkArg(c);
- g_wait_time = atoi(optarg);
- break;
- }
- case 'd':
- checkArg(c);
- cout << " driver type = " << optarg << endl;
- driver_type = strdup( optarg );
- break;
- case 'g':
- checkArg(c);
- cout << " generator type = " << optarg << endl;
- generator_type = strdup( optarg );
- break;
- case 'n':
- checkArg(c);
- cout << " num completions before pass = " << optarg << endl;
- num_completions = atoi( optarg );
- break;
- case 'z':
- checkArg(c);
- trace_filename = string(optarg);
- cout << " tracefile = " << trace_filename << endl;
- break;
-
- default:
- cerr << "parameter '" << c << "' unknown" << endl;
- usageInstructions();
- }
- }
-}
-
-static void usageInstructions()
-{
- cerr << endl;
- cerr << "Options:" << endl;
-
- // print options
- int counter = 0;
- while (long_options[counter].name != NULL) {
- cerr << " -" << char(long_options[counter].val);
- if (long_options[counter].has_arg == required_argument) {
- cerr << " <arg>";
- }
- cerr << " --" << long_options[counter].name;
- if (long_options[counter].has_arg == required_argument) {
- cerr << " <arg>";
- }
- cerr << endl;
- counter++;
- }
-
- cerr << endl;
-
- exit(1);
-}
-
-static void checkArg(char ch)
-{
- if (optarg == NULL) {
- cerr << "Error: parameter '" << ch << "' missing required argument" << endl;
- usageInstructions();
- }
-}
diff --git a/src/mem/ruby/tester/test_framework.hh b/src/mem/ruby/tester/test_framework.hh
deleted file mode 100644
index 625abe459..000000000
--- a/src/mem/ruby/tester/test_framework.hh
+++ /dev/null
@@ -1,45 +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.
- */
-
-/*
- * $Id$
- *
- * Description:
- *
- */
-
-#ifndef TESTFRAMEWORK_H
-#define TESTFRAMEWORK_H
-
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/tester/Tester_Globals.hh"
-
-void tester_main(int argc, char **argv);
-
-#endif //TESTFRAMEWORK_H