merge, no manual changes
--HG-- extra : convert_revision : 8504bddf1f73a4186cebc03c3e52e42ea38361fc
This commit is contained in:
commit
31a9114a3d
9 changed files with 196 additions and 15 deletions
|
@ -64,7 +64,7 @@ if args:
|
|||
|
||||
process = LiveProcess()
|
||||
process.executable = options.cmd
|
||||
process.cmd = options.cmd + " " + options.options
|
||||
process.cmd = [options.cmd] + options.options.split()
|
||||
if options.input != "":
|
||||
process.input = options.input
|
||||
|
||||
|
|
48
src/arch/mips/regfile/int_regfile.cc
Normal file
48
src/arch/mips/regfile/int_regfile.cc
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2005 The Regents of The University of Michigan
|
||||
* 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: Gabe Black
|
||||
* Korey Sewell
|
||||
*/
|
||||
|
||||
#include "arch/mips/regfile/int_regfile.hh"
|
||||
#include "sim/serialize.hh"
|
||||
|
||||
using namespace MipsISA;
|
||||
using namespace std;
|
||||
|
||||
void
|
||||
IntRegFile::serialize(std::ostream &os)
|
||||
{
|
||||
SERIALIZE_ARRAY(regs, NumIntRegs);
|
||||
}
|
||||
|
||||
void
|
||||
IntRegFile::unserialize(Checkpoint *cp, const std::string §ion)
|
||||
{
|
||||
UNSERIALIZE_ARRAY(regs, NumIntRegs);
|
||||
}
|
77
src/arch/mips/regfile/regfile.cc
Normal file
77
src/arch/mips/regfile/regfile.cc
Normal file
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2005 The Regents of The University of Michigan
|
||||
* 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: Gabe Black
|
||||
* Korey Sewell
|
||||
*/
|
||||
|
||||
#include "arch/mips/regfile/regfile.hh"
|
||||
#include "sim/serialize.hh"
|
||||
|
||||
using namespace MipsISA;
|
||||
using namespace std;
|
||||
|
||||
void
|
||||
RegFile::serialize(std::ostream &os)
|
||||
{
|
||||
intRegFile.serialize(os);
|
||||
//SERIALIZE_ARRAY(floatRegFile, NumFloatRegs);
|
||||
//SERIALZE_ARRAY(miscRegFile);
|
||||
//SERIALIZE_SCALAR(miscRegs.fpcr);
|
||||
//SERIALIZE_SCALAR(miscRegs.lock_flag);
|
||||
//SERIALIZE_SCALAR(miscRegs.lock_addr);
|
||||
SERIALIZE_SCALAR(pc);
|
||||
SERIALIZE_SCALAR(npc);
|
||||
SERIALIZE_SCALAR(nnpc);
|
||||
}
|
||||
|
||||
void
|
||||
RegFile::unserialize(Checkpoint *cp, const std::string §ion)
|
||||
{
|
||||
intRegFile.unserialize(cp, section);
|
||||
//UNSERIALIZE_ARRAY(floatRegFile);
|
||||
//UNSERIALZE_ARRAY(miscRegFile);
|
||||
//UNSERIALIZE_SCALAR(miscRegs.fpcr);
|
||||
//UNSERIALIZE_SCALAR(miscRegs.lock_flag);
|
||||
//UNSERIALIZE_SCALAR(miscRegs.lock_addr);
|
||||
UNSERIALIZE_SCALAR(pc);
|
||||
UNSERIALIZE_SCALAR(npc);
|
||||
UNSERIALIZE_SCALAR(nnpc);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
MipsISA::copyRegs(ThreadContext *src, ThreadContext *dest)
|
||||
{
|
||||
panic("Copy Regs Not Implemented Yet\n");
|
||||
}
|
||||
|
||||
void
|
||||
MipsISA::copyMiscRegs(ThreadContext *src, ThreadContext *dest)
|
||||
{
|
||||
panic("Copy Misc. Regs Not Implemented Yet\n");
|
||||
}
|
|
@ -48,7 +48,9 @@ class ThreadContext;
|
|||
|
||||
namespace MipsISA {
|
||||
|
||||
uint64_t getArgument(ThreadContext *tc, bool fp) {
|
||||
inline uint64_t
|
||||
getArgument(ThreadContext *tc, bool fp)
|
||||
{
|
||||
panic("getArgument() not implemented for MIPS\n");
|
||||
}
|
||||
|
||||
|
|
|
@ -64,16 +64,40 @@ namespace X86ISA
|
|||
const SymbolTable *symtab) const
|
||||
{
|
||||
std::stringstream response;
|
||||
bool someAddr = false;
|
||||
|
||||
printMnemonic(response, instMnem, mnemonic);
|
||||
if(flags[IsLoad])
|
||||
printDestReg(response, 0, dataSize);
|
||||
else
|
||||
printSrcReg(response, 2, dataSize);
|
||||
response << ", ";
|
||||
printSegment(response, segment);
|
||||
ccprintf(response, ":[%d*", scale);
|
||||
response << ":[";
|
||||
if(scale != 0 && _srcRegIdx[0] != ZeroReg)
|
||||
{
|
||||
if(scale != 1)
|
||||
ccprintf(response, "%d*", scale);
|
||||
printSrcReg(response, 0, addressSize);
|
||||
someAddr = true;
|
||||
}
|
||||
if(_srcRegIdx[1] != ZeroReg)
|
||||
{
|
||||
if(someAddr)
|
||||
response << " + ";
|
||||
printSrcReg(response, 1, addressSize);
|
||||
ccprintf(response, " + %#x]", disp);
|
||||
someAddr = true;
|
||||
}
|
||||
if(disp != 0)
|
||||
{
|
||||
if(someAddr)
|
||||
response << " + ";
|
||||
ccprintf(response, "%#x", disp);
|
||||
someAddr = true;
|
||||
}
|
||||
if(!someAddr)
|
||||
response << "0";
|
||||
response << "]";
|
||||
return response.str();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -290,18 +290,19 @@ X86LiveProcess::argsInit(int intSize, int pageSize)
|
|||
|
||||
//This is the name of the file which is present on the initial stack
|
||||
//It's purpose is to let the user space linker examine the original file.
|
||||
int file_name_size = filename.size();
|
||||
int file_name_size = filename.size() + 1;
|
||||
|
||||
string platform = "x86_64";
|
||||
int aux_data_size = platform.size() + 1;
|
||||
|
||||
int env_data_size = 0;
|
||||
for (int i = 0; i < envp.size(); ++i) {
|
||||
env_data_size += envp[i].size();
|
||||
env_data_size += envp[i].size() + 1;
|
||||
}
|
||||
int arg_data_size = 0;
|
||||
for (int i = 0; i < argv.size(); ++i) {
|
||||
arg_data_size += argv[i].size();
|
||||
warn("Argv[%d] size is %d\n", i, argv[i].size() + 1);
|
||||
arg_data_size += argv[i].size() + 1;
|
||||
}
|
||||
|
||||
//The auxiliary vector data needs to be padded so it's size is a multiple
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -160,6 +160,7 @@ ostream & AMD64TraceChild::outputStartState(ostream & os)
|
|||
{
|
||||
uint64_t sp = getSP();
|
||||
uint64_t pc = getPC();
|
||||
uint64_t highestInfo = 0;
|
||||
char obuf[1024];
|
||||
sprintf(obuf, "Initial stack pointer = 0x%016llx\n", sp);
|
||||
os << obuf;
|
||||
|
@ -180,6 +181,9 @@ ostream & AMD64TraceChild::outputStartState(ostream & os)
|
|||
cargv = ptrace(PTRACE_PEEKDATA, pid, sp, 0);
|
||||
sprintf(obuf, "0x%016llx: argv[%d] = 0x%016llx\n",
|
||||
sp, argCount++, cargv);
|
||||
if(cargv)
|
||||
if(highestInfo < cargv)
|
||||
highestInfo = cargv;
|
||||
os << obuf;
|
||||
sp += 8;
|
||||
} while(cargv);
|
||||
|
@ -230,7 +234,7 @@ ostream & AMD64TraceChild::outputStartState(ostream & os)
|
|||
}
|
||||
sp += 8;
|
||||
clearedInitialPadding = clearedInitialPadding || buf != 0;
|
||||
} while(!clearedInitialPadding || buf != 0);
|
||||
} while(!clearedInitialPadding || buf != 0 || sp <= highestInfo);
|
||||
return os;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue