Merge with head.

--HG--
extra : convert_revision : 7700f475caa676948175cdf126ee018b0c4ad35c
This commit is contained in:
Gabe Black
2007-08-02 15:14:36 -07:00
10 changed files with 121 additions and 15 deletions

View File

@@ -134,6 +134,9 @@ if len(bm) == 2:
drive_sys = makeSparcSystem(drive_mem_mode, bm[1])
drive_sys.cpu = DriveCPUClass(cpu_id=0)
drive_sys.cpu.connectMemPorts(drive_sys.membus)
if options.kernel is not None:
drive_sys.kernel = binary(options.kernel)
root = makeDualRoot(test_sys, drive_sys, options.etherdump)
elif len(bm) == 1:
root = Root(system=test_sys)

View File

@@ -57,7 +57,7 @@ class ThreadInfo
* thread_info struct. So we can get the address by masking off
* the lower 14 bits.
*/
current = tc->readIntReg(TheISA::StackPointerReg) & ~0x3fff;
current = tc->readIntReg(TheISA::StackPointerReg) & ~ULL(0x3fff);
return VPtr<thread_info>(tc, current);
}

View File

@@ -87,7 +87,7 @@ OutputDirectory::resolve(const string &name)
}
ostream *
OutputDirectory::create(const string &name)
OutputDirectory::create(const string &name, bool binary)
{
if (name == "cerr" || name == "stderr")
return &cerr;
@@ -95,7 +95,8 @@ OutputDirectory::create(const string &name)
if (name == "cout" || name == "stdout")
return &cout;
ofstream *file = new ofstream(resolve(name).c_str(), ios::trunc);
ofstream *file = new ofstream(resolve(name).c_str(),
ios::trunc | binary ? ios::binary : (ios::openmode)0);
if (!file->is_open())
panic("Cannot open file %s", name);

View File

@@ -51,7 +51,7 @@ class OutputDirectory
const std::string &directory();
std::string resolve(const std::string &name);
std::ostream *create(const std::string &name);
std::ostream *create(const std::string &name, bool binary = false);
std::ostream *find(const std::string &name);
static bool isFile(const std::ostream *os);

View File

@@ -81,11 +81,6 @@ try:
except ImportError:
running_m5 = False
if running_m5:
from event import *
from simulate import *
from main import options
if running_m5:
import defines
build_env.update(defines.m5_build_env)
@@ -93,6 +88,11 @@ else:
import __scons
build_env.update(__scons.m5_build_env)
if running_m5:
from event import *
from simulate import *
from main import options
import SimObject
import params
import objects

View File

@@ -26,9 +26,15 @@
#
# Authors: Nathan Binkert
import code, optparse, os, socket, sys
from datetime import datetime
import code
import datetime
import optparse
import os
import socket
import sys
from attrdict import attrdict
import defines
import traceflags
__all__ = [ 'options', 'arguments', 'main' ]
@@ -116,6 +122,8 @@ def bool_option(name, default, help):
# Help options
add_option('-A', "--authors", action="store_true", default=False,
help="Show author information")
add_option('-B', "--build-info", action="store_true", default=False,
help="Show build information")
add_option('-C', "--copyright", action="store_true", default=False,
help="Show full copyright information")
add_option('-R', "--readme", action="store_true", default=False,
@@ -195,6 +203,22 @@ def main():
parse_args()
done = False
if options.build_info:
done = True
print 'Build information:'
print
print 'compiled %s' % internal.core.cvar.compileDate;
print 'started %s' % datetime.datetime.now().ctime()
print 'executing on %s' % socket.gethostname()
print 'build options:'
keys = defines.m5_build_env.keys()
keys.sort()
for key in keys:
val = defines.m5_build_env[key]
print ' %s = %s' % (key, val)
print
if options.copyright:
done = True
print info.LICENSE
@@ -242,7 +266,7 @@ def main():
print brief_copyright
print
print "M5 compiled %s" % internal.core.cvar.compileDate;
print "M5 started %s" % datetime.now().ctime()
print "M5 started %s" % datetime.datetime.now().ctime()
print "M5 executing on %s" % socket.gethostname()
print "command line:",
for argv in sys.argv:

View File

@@ -36,6 +36,7 @@ import internal
from main import options
import SimObject
import ticks
import objects
# The final hook to generate .ini files. Called from the user script
# once the config is built.

View File

@@ -40,6 +40,7 @@
#include <string>
#include <vector>
#include "base/annotate.hh"
#include "base/inifile.hh"
#include "base/misc.hh"
#include "base/output.hh"
@@ -178,6 +179,22 @@ paramOut(ostream &os, const std::string &name, const T &param)
os << "\n";
}
template <class T>
void
arrayParamOut(ostream &os, const std::string &name,
const std::vector<T> &param)
{
int size = param.size();
os << name << "=";
if (size > 0)
showParam(os, param[0]);
for (int i = 1; i < size; ++i) {
os << " ";
showParam(os, param[i]);
}
os << "\n";
}
template <class T>
void
@@ -251,6 +268,49 @@ arrayParamIn(Checkpoint *cp, const std::string &section,
}
}
template <class T>
void
arrayParamIn(Checkpoint *cp, const std::string &section,
const std::string &name, std::vector<T> &param)
{
std::string str;
if (!cp->find(section, name, str)) {
fatal("Can't unserialize '%s:%s'\n", section, name);
}
// code below stolen from VectorParam<T>::parse().
// it would be nice to unify these somehow...
vector<string> tokens;
tokenize(tokens, str, ' ');
// Need this if we were doing a vector
// value.resize(tokens.size());
param.resize(tokens.size());
for (int i = 0; i < tokens.size(); i++) {
// need to parse into local variable to handle vector<bool>,
// for which operator[] returns a special reference class
// that's not the same as 'bool&', (since it's a packed
// vector)
T scalar_value;
if (!parseParam(tokens[i], scalar_value)) {
string err("could not parse \"");
err += str;
err += "\"";
fatal(err);
}
// assign parsed value to vector
param[i] = scalar_value;
}
}
void
objParamIn(Checkpoint *cp, const std::string &section,
@@ -273,7 +333,13 @@ arrayParamOut(ostream &os, const std::string &name, \
type const *param, int size); \
template void \
arrayParamIn(Checkpoint *cp, const std::string &section, \
const std::string &name, type *param, int size);
const std::string &name, type *param, int size); \
template void \
arrayParamOut(ostream &os, const std::string &name, \
const std::vector<type> &param); \
template void \
arrayParamIn(Checkpoint *cp, const std::string &section, \
const std::string &name, std::vector<type> &param);
INSTANTIATE_PARAM_TEMPLATES(signed char)
INSTANTIATE_PARAM_TEMPLATES(unsigned char)
@@ -343,6 +409,7 @@ Serializable::serializeAll(const std::string &cpt_dir)
outstream << "// checkpoint generated: " << ctime(&t);
globals.serialize(outstream);
Annotate::annotations.serialize(outstream);
SimObject::serializeAll(outstream);
}
@@ -358,7 +425,7 @@ Serializable::unserializeAll(const std::string &cpt_dir)
dir);
Checkpoint *cp = new Checkpoint(dir, section);
unserializeGlobals(cp);
Annotate::annotations.unserialize(cp);
SimObject::unserializeAll(cp);
}

View File

@@ -39,6 +39,7 @@
#include <list>
#include <vector>
#include <iostream>
#include <map>
@@ -60,10 +61,18 @@ template <class T>
void arrayParamOut(std::ostream &os, const std::string &name,
const T *param, int size);
template <class T>
void arrayParamOut(std::ostream &os, const std::string &name,
const std::vector<T> &param);
template <class T>
void arrayParamIn(Checkpoint *cp, const std::string &section,
const std::string &name, T *param, int size);
template <class T>
void arrayParamIn(Checkpoint *cp, const std::string &section,
const std::string &name, std::vector<T> &param);
void
objParamIn(Checkpoint *cp, const std::string &section,
const std::string &name, SimObject * &param);

View File

@@ -72,7 +72,8 @@ System::System(Params *p)
#if FULL_SYSTEM
kernelSymtab = new SymbolTable;
debugSymbolTable = new SymbolTable;
if (!debugSymbolTable)
debugSymbolTable = new SymbolTable;
/**