Merge with head.
--HG-- extra : convert_revision : 7700f475caa676948175cdf126ee018b0c4ad35c
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 ¶m)
|
||||
os << "\n";
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void
|
||||
arrayParamOut(ostream &os, const std::string &name,
|
||||
const std::vector<T> ¶m)
|
||||
{
|
||||
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 §ion,
|
||||
}
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void
|
||||
arrayParamIn(Checkpoint *cp, const std::string §ion,
|
||||
const std::string &name, std::vector<T> ¶m)
|
||||
{
|
||||
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 §ion,
|
||||
@@ -273,7 +333,13 @@ arrayParamOut(ostream &os, const std::string &name, \
|
||||
type const *param, int size); \
|
||||
template void \
|
||||
arrayParamIn(Checkpoint *cp, const std::string §ion, \
|
||||
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> ¶m); \
|
||||
template void \
|
||||
arrayParamIn(Checkpoint *cp, const std::string §ion, \
|
||||
const std::string &name, std::vector<type> ¶m);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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> ¶m);
|
||||
|
||||
template <class T>
|
||||
void arrayParamIn(Checkpoint *cp, const std::string §ion,
|
||||
const std::string &name, T *param, int size);
|
||||
|
||||
template <class T>
|
||||
void arrayParamIn(Checkpoint *cp, const std::string §ion,
|
||||
const std::string &name, std::vector<T> ¶m);
|
||||
|
||||
void
|
||||
objParamIn(Checkpoint *cp, const std::string §ion,
|
||||
const std::string &name, SimObject * ¶m);
|
||||
|
||||
@@ -72,7 +72,8 @@ System::System(Params *p)
|
||||
|
||||
#if FULL_SYSTEM
|
||||
kernelSymtab = new SymbolTable;
|
||||
debugSymbolTable = new SymbolTable;
|
||||
if (!debugSymbolTable)
|
||||
debugSymbolTable = new SymbolTable;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user