Adding gem5 source to svn.

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1819 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
friemel
2012-10-24 19:18:57 +00:00
parent f7ff71bd46
commit b41eec3f65
3222 changed files with 658579 additions and 1 deletions

View File

@ -0,0 +1,53 @@
# -*- mode:python -*-
# Copyright (c) 2006 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: Steve Reinhardt
Import('*')
if env['TARGET_ISA'] == 'no':
Return()
Source('kernel_stats.cc')
Source('linux/events.cc')
Source('linux/linux.cc')
Source('linux/linux_syscalls.cc')
Source('linux/printk.cc')
Source('operatingsystem.cc')
Source('system_events.cc')
DebugFlag('DebugPrintf')
DebugFlag('Printf')
if env['TARGET_ISA'] == 'alpha':
Source('tru64/dump_mbuf.cc')
Source('tru64/printf.cc')
Source('tru64/tru64_events.cc')
Source('tru64/tru64_syscalls.cc')
DebugFlag('BADADDR')

View File

@ -0,0 +1,145 @@
/*
* Copyright (c) 2004-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: Lisa Hsu
* Nathan Binkert
*/
#include <string>
#include "base/trace.hh"
#include "cpu/thread_context.hh"
#include "kern/kernel_stats.hh"
#if THE_ISA == ALPHA_ISA
#include "kern/tru64/tru64_syscalls.hh"
#endif
#include "sim/system.hh"
using namespace std;
using namespace Stats;
namespace Kernel {
Statistics::Statistics(System *system)
: iplLast(0), iplLastTick(0)
{
}
void
Statistics::regStats(const string &_name)
{
myname = _name;
_arm
.name(name() + ".inst.arm")
.desc("number of arm instructions executed")
;
_quiesce
.name(name() + ".inst.quiesce")
.desc("number of quiesce instructions executed")
;
_iplCount
.init(32)
.name(name() + ".ipl_count")
.desc("number of times we switched to this ipl")
.flags(total | pdf | nozero | nonan)
;
_iplGood
.init(32)
.name(name() + ".ipl_good")
.desc("number of times we switched to this ipl from a different ipl")
.flags(total | pdf | nozero | nonan)
;
_iplTicks
.init(32)
.name(name() + ".ipl_ticks")
.desc("number of cycles we spent at this ipl")
.flags(total | pdf | nozero | nonan)
;
_iplUsed
.name(name() + ".ipl_used")
.desc("fraction of swpipl calls that actually changed the ipl")
.flags(total | nozero | nonan)
;
_iplUsed = _iplGood / _iplCount;
#if THE_ISA == ALPHA_ISA
_syscall
.init(SystemCalls<Tru64>::Number)
.name(name() + ".syscall")
.desc("number of syscalls executed")
.flags(total | pdf | nozero | nonan)
;
#endif
//@todo This needs to get the names of syscalls from an appropriate place.
#if 0
for (int i = 0; i < SystemCalls<Tru64>::Number; ++i) {
const char *str = SystemCalls<Tru64>::name(i);
if (str) {
_syscall.subname(i, str);
}
}
#endif
}
void
Statistics::swpipl(int ipl)
{
assert(ipl >= 0 && ipl <= 0x1f && "invalid IPL\n");
_iplCount[ipl]++;
if (ipl == iplLast)
return;
_iplGood[ipl]++;
_iplTicks[iplLast] += curTick() - iplLastTick;
iplLastTick = curTick();
iplLast = ipl;
}
void
Statistics::serialize(ostream &os)
{
SERIALIZE_SCALAR(iplLast);
SERIALIZE_SCALAR(iplLastTick);
}
void
Statistics::unserialize(Checkpoint *cp, const string &section)
{
UNSERIALIZE_SCALAR(iplLast);
UNSERIALIZE_SCALAR(iplLastTick);
}
} // namespace Kernel

View File

@ -0,0 +1,92 @@
/*
* Copyright (c) 2004-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: Lisa Hsu
* Nathan Binkert
*/
#ifndef __KERNEL_STATS_HH__
#define __KERNEL_STATS_HH__
#include <string>
#include "cpu/static_inst.hh"
#include "sim/serialize.hh"
#include "sim/stats.hh"
class BaseCPU;
class ThreadContext;
class FnEvent;
// What does kernel stats expect is included?
class System;
namespace Kernel {
class Statistics : public Serializable
{
protected:
std::string myname;
protected:
Stats::Scalar _arm;
Stats::Scalar _quiesce;
Stats::Scalar _hwrei;
Stats::Vector _iplCount;
Stats::Vector _iplGood;
Stats::Vector _iplTicks;
Stats::Formula _iplUsed;
#if THE_ISA == ALPHA_ISA
Stats::Vector _syscall;
#endif
// Stats::Vector _faults;
private:
int iplLast;
Tick iplLastTick;
public:
Statistics(System *system);
virtual ~Statistics() {}
const std::string name() const { return myname; }
void regStats(const std::string &name);
public:
void arm() { _arm++; }
void quiesce() { _quiesce++; }
void swpipl(int ipl);
public:
virtual void serialize(std::ostream &os);
virtual void unserialize(Checkpoint *cp, const std::string &section);
};
} // namespace Kernel
#endif // __KERNEL_STATS_HH__

View File

@ -0,0 +1,92 @@
/*
* Copyright (c) 2011 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
* not be construed as granting a license to any other intellectual
* property including but not limited to intellectual property relating
* to a hardware implementation of the functionality of the software
* licensed hereunder. You may use the software subject to the license
* terms below provided that you ensure that this notice is replicated
* unmodified and in its entirety in all distributions of the software,
* modified or unmodified, in source code or in binary form.
*
* Copyright (c) 2004-2006 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: Nathan Binkert
* Ali Saidi
*/
#include <sstream>
#include "arch/utility.hh"
#include "base/trace.hh"
#include "cpu/thread_context.hh"
#include "debug/DebugPrintf.hh"
#include "kern/linux/events.hh"
#include "kern/linux/printk.hh"
#include "kern/system_events.hh"
#include "sim/arguments.hh"
#include "sim/pseudo_inst.hh"
#include "sim/system.hh"
namespace Linux {
void
DebugPrintkEvent::process(ThreadContext *tc)
{
if (DTRACE(DebugPrintf)) {
std::stringstream ss;
Arguments args(tc);
Printk(ss, args);
StringWrap name(tc->getSystemPtr()->name() + ".dprintk");
DPRINTFN("%s", ss.str());
}
SkipFuncEvent::process(tc);
}
void
UDelayEvent::process(ThreadContext *tc)
{
int arg_num = 0;
// Get the time in native size
uint64_t time = TheISA::getArgument(tc, arg_num, (uint16_t)-1, false);
// convert parameter to ns
if (argDivToNs)
time /= argDivToNs;
time *= argMultToNs;
SkipFuncEvent::process(tc);
PseudoInst::quiesceNs(tc, time);
}
} // namespace linux

View File

@ -0,0 +1,76 @@
/*
* Copyright (c) 2004-2006 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: Nathan Binkert
* Ali Saidi
*/
#ifndef __KERN_LINUX_EVENTS_HH__
#define __KERN_LINUX_EVENTS_HH__
#include "kern/system_events.hh"
namespace Linux {
class DebugPrintkEvent : public SkipFuncEvent
{
public:
DebugPrintkEvent(PCEventQueue *q, const std::string &desc, Addr addr)
: SkipFuncEvent(q, desc, addr) {}
virtual void process(ThreadContext *xc);
};
/** A class to skip udelay() and related calls in the kernel.
* This class has two additional parameters that take the argument to udelay and
* manipulated it to come up with ns and eventually ticks to quiesce for.
* See descriptions of argDivToNs and argMultToNs below.
*/
class UDelayEvent : public SkipFuncEvent
{
private:
/** value to divide arg by to create ns. This is present beacues the linux
* kernel code sometime precomputes the first multiply that is done in
* udelay() if the parameter is a constant. We need to undo it so here is
* how. */
uint64_t argDivToNs;
/** value to multiple arg by to create ns. Nominally, this is 1000 to
* convert us to ns, but since linux can do some preprocessing of constant
* values something else might be required. */
uint64_t argMultToNs;
public:
UDelayEvent(PCEventQueue *q, const std::string &desc, Addr addr,
uint64_t mult, uint64_t div)
: SkipFuncEvent(q, desc, addr), argDivToNs(div), argMultToNs(mult) {}
virtual void process(ThreadContext *xc);
};
}
#endif

View File

@ -0,0 +1,67 @@
/*
* Copyright (c) 2009 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: Ali Saidi
*/
#include <cstdio>
#include <string>
#include "cpu/thread_context.hh"
#include "debug/SyscallVerbose.hh"
#include "kern/linux/linux.hh"
#include "sim/process.hh"
#include "sim/system.hh"
int
Linux::openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc)
{
DPRINTF(SyscallVerbose, "Opening special file: %s\n", path.c_str());
if (path.compare(0, 13, "/proc/meminfo") == 0) {
std::string data = Linux::procMeminfo(process, tc);
FILE *f = tmpfile();
int fd = fileno(f);
size_t ret M5_VAR_USED = fwrite(data.c_str(), 1, data.size(), f);
assert(ret == data.size());
rewind(f);
return fd;
}
warn("Attempting to open special file: %s. Ignorning. Simulation may"
" take un-expected code path or be non-deterministic until proper"
" handling is implemented.\n", path.c_str());
return -1;
}
std::string
Linux::procMeminfo(LiveProcess *process, ThreadContext *tc)
{
return csprintf("MemTotal:%12d kB\nMemFree: %12d kB\n",
process->system->memSize() >> 10,
process->system->freeMemSize() >> 10);
}

View File

@ -0,0 +1,176 @@
/*
* Copyright (c) 2004-2009 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: Ali Saidi
*/
#ifndef __LINUX_HH__
#define __LINUX_HH__
#include "base/types.hh"
#include <string>
#include "kern/operatingsystem.hh"
class ThreadContext;
class LiveProcess;
///
/// This class encapsulates the types, structures, constants,
/// functions, and syscall-number mappings specific to the Alpha Linux
/// syscall interface.
///
class Linux : public OperatingSystem
{
public:
//@{
/// Basic Linux types.
typedef uint64_t size_t;
typedef uint64_t off_t;
typedef int64_t time_t;
typedef int64_t clock_t;
typedef uint32_t uid_t;
typedef uint32_t gid_t;
//@}
/// Stat buffer. Note that we can't call it 'stat' since that
/// gets #defined to something else on some systems. This type
/// can be specialized by architecture specific "Linux" classes
typedef struct {
uint32_t st_dev; //!< device
uint32_t st_ino; //!< inode
uint32_t st_mode; //!< mode
uint32_t st_nlink; //!< link count
uint32_t st_uid; //!< owner's user ID
uint32_t st_gid; //!< owner's group ID
uint32_t st_rdev; //!< device number
int32_t _pad1; //!< for alignment
int64_t st_size; //!< file size in bytes
uint64_t st_atimeX; //!< time of last access
uint64_t st_mtimeX; //!< time of last modification
uint64_t st_ctimeX; //!< time of last status change
uint32_t st_blksize; //!< optimal I/O block size
int32_t st_blocks; //!< number of blocks allocated
uint32_t st_flags; //!< flags
uint32_t st_gen; //!< unknown
} tgt_stat;
// same for stat64
typedef struct {
uint64_t st_dev;
uint64_t st_ino;
uint64_t st_rdev;
int64_t st_size;
uint64_t st_blocks;
uint32_t st_mode;
uint32_t st_uid;
uint32_t st_gid;
uint32_t st_blksize;
uint32_t st_nlink;
uint32_t __pad0;
uint64_t st_atimeX;
uint64_t st_atime_nsec;
uint64_t st_mtimeX;
uint64_t st_mtime_nsec;
uint64_t st_ctimeX;
uint64_t st_ctime_nsec;
int64_t ___unused[3];
} tgt_stat64;
/// Length of strings in struct utsname (plus 1 for null char).
static const int _SYS_NMLN = 65;
/// Interface struct for uname().
struct utsname {
char sysname[_SYS_NMLN]; //!< System name.
char nodename[_SYS_NMLN]; //!< Node name.
char release[_SYS_NMLN]; //!< OS release.
char version[_SYS_NMLN]; //!< OS version.
char machine[_SYS_NMLN]; //!< Machine type.
};
/// Limit struct for getrlimit/setrlimit.
struct rlimit {
uint64_t rlim_cur; //!< soft limit
uint64_t rlim_max; //!< hard limit
};
/// For gettimeofday().
struct timeval {
int64_t tv_sec; //!< seconds
int64_t tv_usec; //!< microseconds
};
/// Clock ticks per second, for times().
static const int M5_SC_CLK_TCK = 100;
/// For times().
struct tms {
int64_t tms_utime; //!< user time
int64_t tms_stime; //!< system time
int64_t tms_cutime; //!< user time of children
int64_t tms_cstime; //!< system time of children
};
// For writev/readv
struct tgt_iovec {
uint64_t iov_base; // void *
uint64_t iov_len;
};
/// For getrusage().
struct rusage {
struct timeval ru_utime; //!< user time used
struct timeval ru_stime; //!< system time used
int64_t ru_maxrss; //!< max rss
int64_t ru_ixrss; //!< integral shared memory size
int64_t ru_idrss; //!< integral unshared data "
int64_t ru_isrss; //!< integral unshared stack "
int64_t ru_minflt; //!< page reclaims - total vmfaults
int64_t ru_majflt; //!< page faults
int64_t ru_nswap; //!< swaps
int64_t ru_inblock; //!< block input operations
int64_t ru_oublock; //!< block output operations
int64_t ru_msgsnd; //!< messages sent
int64_t ru_msgrcv; //!< messages received
int64_t ru_nsignals; //!< signals received
int64_t ru_nvcsw; //!< voluntary context switches
int64_t ru_nivcsw; //!< involuntary "
};
static int openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc);
static std::string procMeminfo(LiveProcess *process, ThreadContext *tc);
}; // class Linux
#endif // __LINUX_HH__

View File

@ -0,0 +1,376 @@
/*
* Copyright (c) 2004-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: Ali Saidi
*/
#include "kern/linux/linux_syscalls.hh"
namespace {
const char *
standard_strings[SystemCalls<Linux>::Number] = {
"llseek", //0
"newselect", //1
"sysctl", //2
"access", //3
"acct", //4
"adjtimex", //5
"afs_syscall", //6
"alarm", //7
"bdflush", //8
"break", //9
"brk", //10
"capget", //11
"capset", //12
"chdir", //13
"chmod", //14
"chown", //15
"chown32", //16
"chroot", //17
"clock_getres", //18
"clock_gettime", //19
"clock_nanosleep", //20
"clock_settime", //21
"clone", //22
"close", //23
"creat", //24
"create_module", //25
"delete_module", //26
"dup", //27
"dup2", //28
"epoll_create", //29
"epoll_ctl", //30
"epoll_wait", //31
"execve", //32
"exit", //33
"exit_group", //34
"fadvise64", //35
"fadvise64_64", //36
"fchdir", //37
"fchmod", //38
"fchown", //39
"fchown32", //40
"fcntl", //41
"fcntl64", //42
"fdatasync", //43
"fgetxattr", //44
"flistxattr", //45
"flock", //46
"fork", //47
"fremovexattr", //48
"fsetxattr", //49
"fstat", //50
"fstat64", //51
"fstatfs", //52
"fstatfs64", //53
"fsync", //54
"ftime", //55
"ftruncate", //56
"ftruncate64", //57
"futex", //58
"get_kernel_syms", //59
"get_thread_area", //60
"getcwd", //61
"getdents", //62
"getdents64", //63
"getegid", //64
"getegid32", //65
"geteuid", //66
"geteuid32", //67
"getgid", //68
"getgid32", //69
"getgroups", //70
"getgroups32", //71
"getitimer", //72
"getpgid", //73
"getpgrp", //74
"getpid", //75
"getpmsg", //76
"getppid", //77
"getpriority", //78
"getresgid", //79
"getresgid32", //80
"getresuid", //81
"getresuid32", //82
"getrlimit", //83
"getrusage", //84
"getsid", //85
"gettid", //86
"gettimeofday", //87
"getuid", //88
"getuid32", //89
"getxattr", //90
"gtty", //91
"idle", //92
"init_module", //93
"io_cancel", //94
"io_destroy", //95
"io_getevents", //96
"io_setup", //97
"io_submit", //98
"ioctl", //99
"ioperm", //100
"iopl", //101
"ipc", //102
"kill", //103
"lchown", //104
"lchown32", //105
"lgetxattr", //106
"link", //107
"listxattr", //108
"llistxattr", //109
"lock", //110
"lookup_dcookie", //111
"lremovexattr", //112
"lseek", //113
"lsetxattr", //114
"lstat", //115
"lstat64", //116
"madvise", //117
"madvise1", //118
"mincore", //119
"mkdir", //120
"mknod", //121
"mlock", //122
"mlockall", //123
"mmap", //124
"mmap2", //125
"modify_ldt", //126
"mount", //127
"mprotect", //128
"mpx", //129
"mremap", //130
"msync", //131
"munlock", //132
"munlockall", //133
"munmap", //134
"nanosleep", //135
"nfsservctl", //136
"nice", //137
"oldfstat", //138
"oldlstat", //139
"oldolduname", //140
"oldstat", //141
"olduname", //142
"open", //143
"pause", //144
"personality", //145
"pipe", //146
"pivot_root", //147
"poll", //148
"prctl", //149
"pread64", //150
"prof", //151
"profil", //152
"ptrace", //153
"putpmsg", //154
"pwrite64", //155
"query_module", //156
"quotactl", //157
"read", //158
"readahead", //159
"readdir", //160
"readlink", //161
"readv", //162
"reboot", //163
"remap_file_pages", //164
"removexattr", //165
"rename", //166
"restart_syscall", //167
"rmdir", //168
"rt_sigaction", //169
"rt_sigpending", //170
"rt_sigprocmask", //171
"rt_sigqueueinfo", //172
"rt_sigreturn", //173
"rt_sigsuspend", //174
"rt_sigtimedwait", //175
"sched_get_priority_max", //176
"sched_get_priority_min", //177
"sched_getaffinity", //178
"sched_getparam", //179
"sched_getscheduler", //180
"sched_rr_get_interval", //181
"sched_setaffinity", //182
"sched_setparam", //183
"sched_setscheduler", //184
"sched_yield", //185
"select", //186
"sendfile", //187
"sendfile64", //188
"set_thread_area", //189
"set_tid_address", //190
"setdomainname", //191
"setfsgid", //192
"setfsgid32", //193
"setfsuid", //194
"setfsuid32", //195
"setgid", //196
"setgid32", //197
"setgroups", //198
"setgroups32", //199
"sethostname", //200
"setitimer", //201
"setpgid", //202
"setpriority", //203
"setregid", //204
"setregid32", //205
"setresgid", //206
"setresgid32", //207
"setresuid", //208
"setresuid32", //209
"setreuid", //210
"setreuid32", //211
"setrlimit", //212
"setsid", //213
"settimeofday", //214
"setuid", //215
"setuid32", //216
"setxattr", //217
"sgetmask", //218
"sigaction", //219
"sigaltstack", //220
"signal", //221
"sigpending", //222
"sigprocmask", //223
"sigreturn", //224
"sigsuspend", //225
"socketcall", //226
"ssetmask", //227
"stat", //228
"stat64", //229
"statfs", //230
"statfs64", //231
"stime", //232
"stty", //233
"swapoff", //234
"swapon", //235
"symlink", //236
"sync", //237
"sysfs", //238
"sysinfo", //239
"syslog", //240
"tgkill", //241
"time", //242
"timer_create", //243
"timer_delete", //244
"timer_getoverrun", //245
"timer_gettime", //246
"timer_settime", //247
"times", //248
"tkill", //249
"truncate", //250
"truncate64", //251
"ugetrlimit", //252
"ulimit", //253
"umask", //254
"umount", //255
"umount2", //256
"uname", //257
"unlink", //258
"uselib", //259
"ustat", //260
"utime", //261
"utimes", //262
"vfork", //263
"vhangup", //264
"vm86", //265
"vm86old", //266
"vserver", //267
"wait4", //268
"waitpid", //269
"write", //270
"writev", //271
};
}
const char *
SystemCalls<Linux>::name(int num)
{
if ((num >= 0) && (num < Number))
return standard_strings[num];
else
return 0;
}

View File

@ -0,0 +1,328 @@
/*
* Copyright (c) 2004-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: Ali Saidi
*/
#ifndef __KERN_LINUX_LINUX_SYSCALLS_HH__
#define __KERN_LINUX_LINUX_SYSCALLS_HH__
#include "kern/linux/linux.hh"
template <class OS>
class SystemCalls;
template <>
class SystemCalls<Linux>
{
public:
enum {
syscall = 0,
llseek = 1,
newselect = 2,
sysctl = 3,
access = 4,
acct = 5,
adjtimex = 6,
afs_syscall = 7,
alarm = 8,
bdflush = 9,
_break = 10, /*renamed from break*/
brk = 11,
capget = 12,
capset = 13,
chdir = 14,
chmod = 15,
chown = 16,
chown32 = 17,
chroot = 18,
clock_getres = 19,
clock_gettime = 20,
clock_nanosleep = 21,
clock_settime = 22,
clone = 23,
close = 24,
creat = 25,
create_module = 26,
delete_module = 27,
dup = 28,
dup2 = 29,
epoll_create = 30,
epoll_ctl = 31,
epoll_wait = 32,
execve = 33,
exit = 34,
exit_group = 35,
fadvise64 = 36,
fadvise64_64 = 37,
fchdir = 38,
fchmod = 39,
fchown = 40,
fchown32 = 41,
fcntl = 42,
fcntl64 = 43,
fdatasync = 44,
fgetxattr = 45,
flistxattr = 46,
flock = 47,
fork = 48,
fremovexattr = 49,
fsetxattr = 50,
fstat = 51,
fstat64 = 52,
fstatfs = 53,
fstatfs64 = 54,
fsync = 55,
ftime = 56,
ftruncate = 57,
ftruncate64 = 58,
futex = 59,
get_kernel_syms = 60,
get_thread_area = 61,
getcwd = 62,
getdents = 63,
getdents64 = 64,
getegid = 65,
getegid32 = 66,
geteuid = 67,
geteuid32 = 68,
getgid = 69,
getgid32 = 70,
getgroups = 71,
getgroups32 = 72,
getitimer = 73,
getpgid = 74,
getpgrp = 75,
getpid = 76,
getpmsg = 77,
getppid = 78,
getpriority = 79,
getresgid = 80,
getresgid32 = 81,
getresuid = 82,
getresuid32 = 83,
getrlimit = 84,
getrusage = 85,
getsid = 86,
gettid = 87,
gettimeofday = 88,
getuid = 89,
getuid32 = 90,
getxattr = 91,
gtty = 92,
idle = 93,
init_module = 94,
io_cancel = 95,
io_destroy = 96,
io_getevents = 97,
io_setup = 98,
io_submit = 99,
ioctl = 100,
ioperm = 101,
iopl = 102,
ipc = 103,
kill = 104,
lchown = 105,
lchown32 = 106,
lgetxattr = 107,
link = 108,
listxattr = 109,
llistxattr = 110,
lock = 111,
lookup_dcookie = 112,
lremovexattr = 113,
lseek = 114,
lsetxattr = 115,
lstat = 116,
lstat64 = 117,
madvise = 118,
madvise1 = 119,
mincore = 120,
mkdir = 121,
mknod = 122,
mlock = 123,
mlockall = 124,
mmap = 125,
mmap2 = 126,
modify_ldt = 127,
mount = 128,
mprotect = 129,
mpx = 130,
mremap = 131,
msync = 132,
munlock = 133,
munlockall = 134,
munmap = 135,
nanosleep = 136,
nfsservctl = 137,
nice = 138,
oldfstat = 139,
oldlstat = 140,
oldolduname = 141,
oldstat = 142,
olduname = 143,
open = 144,
pause = 145,
personality = 146,
pipe = 147,
pivot_root = 148,
poll = 149,
prctl = 150,
pread64 = 151,
prof = 152,
profil = 153,
ptrace = 154,
putpmsg = 155,
pwrite64 = 156,
query_module = 157,
quotactl = 158,
read = 159,
readahead = 160,
readdir = 161,
readlink = 162,
readv = 163,
reboot = 164,
remap_file_pages = 165,
removexattr = 166,
rename = 167,
restart_syscall = 168,
rmdir = 169,
rt_sigaction = 170,
rt_sigpending = 171,
rt_sigprocmask = 172,
rt_sigqueueinfo = 173,
rt_sigreturn = 174,
rt_sigsuspend = 175,
rt_sigtimedwait = 176,
sched_get_priority_max = 177,
sched_get_priority_min = 178,
sched_getaffinity = 179,
sched_getparam = 180,
sched_getscheduler = 181,
sched_rr_get_interval = 182,
sched_setaffinity = 183,
sched_setparam = 184,
sched_setscheduler = 185,
sched_yield = 186,
select = 187,
sendfile = 188,
sendfile64 = 189,
set_thread_area = 190,
set_tid_address = 191,
setdomainname = 192,
setfsgid = 193,
setfsgid32 = 194,
setfsuid = 195,
setfsuid32 = 196,
setgid = 197,
setgid32 = 198,
setgroups = 199,
setgroups32 = 200,
sethostname = 201,
setitimer = 202,
setpgid = 203,
setpriority = 204,
setregid = 205,
setregid32 = 206,
setresgid = 207,
setresgid32 = 208,
setresuid = 209,
setresuid32 = 210,
setreuid = 211,
setreuid32 = 212,
setrlimit = 213,
setsid = 214,
settimeofday = 215,
setuid = 216,
setuid32 = 217,
setxattr = 218,
sgetmask = 219,
sigaction = 220,
sigaltstack = 221,
signal = 222,
sigpending = 223,
sigprocmask = 224,
sigreturn = 225,
sigsuspend = 226,
socketcall = 227,
ssetmask = 228,
stat = 229,
stat64 = 230,
statfs = 231,
statfs64 = 232,
stime = 233,
stty = 234,
swapoff = 235,
swapon = 236,
symlink = 237,
sync = 238,
sysfs = 239,
sysinfo = 240,
syslog = 241,
tgkill = 242,
time = 243,
timer_create = 244,
timer_delete = 245,
timer_getoverrun = 246,
timer_gettime = 247,
timer_settime = 248,
times = 249,
tkill = 250,
truncate = 251,
truncate64 = 252,
ugetrlimit = 253,
ulimit = 254,
umask = 255,
umount = 256,
umount2 = 257,
uname = 258,
unlink = 259,
uselib = 260,
ustat = 261,
utime = 262,
utimes = 263,
vfork = 264,
vhangup = 265,
vm86 = 266,
vm86old = 267,
vserver = 268,
wait4 = 269,
waitpid = 270,
write = 271,
writev = 272,
Number
};
static const char *name(int num);
static bool validSyscallNumber(int num) {
return num < Number;
}
};
#endif // __KERN_LINUX_LINUX_SYSCALLS_HH__

View File

@ -0,0 +1,259 @@
/*
* Copyright (c) 2004-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: Nathan Binkert
* Ali Saidi
*/
#include <sys/types.h>
#include <algorithm>
#include "base/trace.hh"
#include "kern/linux/printk.hh"
#include "sim/arguments.hh"
using namespace std;
void
Printk(stringstream &out, Arguments args)
{
char *p = (char *)args++;
while (*p) {
switch (*p) {
case '%': {
bool more = true;
bool islong = false;
bool leftjustify = false;
bool format = false;
bool zero = false;
int width = 0;
while (more && *++p) {
switch (*p) {
case 'l':
case 'L':
islong = true;
break;
case '-':
leftjustify = true;
break;
case '#':
format = true;
break;
case '0':
if (width)
width *= 10;
else
zero = true;
break;
default:
if (*p >= '1' && *p <= '9')
width = 10 * width + *p - '0';
else
more = false;
break;
}
}
bool hexnum = false;
bool octal = false;
bool sign = false;
switch (*p) {
case 'X':
case 'x':
hexnum = true;
break;
case 'O':
case 'o':
octal = true;
break;
case 'D':
case 'd':
sign = true;
break;
case 'P':
format = true;
case 'p':
hexnum = true;
break;
}
switch (*p) {
case 'D':
case 'd':
case 'U':
case 'u':
case 'X':
case 'x':
case 'O':
case 'o':
case 'P':
case 'p': {
if (hexnum)
out << hex;
if (octal)
out << oct;
if (format) {
if (!zero)
out.setf(ios::showbase);
else {
if (hexnum) {
out << "0x";
width -= 2;
} else if (octal) {
out << "0";
width -= 1;
}
}
}
if (zero)
out.fill('0');
if (width > 0)
out.width(width);
if (leftjustify && !zero)
out.setf(ios::left);
if (sign) {
if (islong)
out << (int64_t)args;
else
out << (int32_t)args;
} else {
if (islong)
out << (uint64_t)args;
else
out << (uint32_t)args;
}
if (zero)
out.fill(' ');
if (width > 0)
out.width(0);
out << dec;
++args;
}
break;
case 's': {
const char *s = (char *)args;
if (!s)
s = "<NULL>";
if (width > 0)
out.width(width);
if (leftjustify)
out.setf(ios::left);
out << s;
++args;
}
break;
case 'C':
case 'c': {
uint64_t mask = (*p == 'C') ? 0xffL : 0x7fL;
uint64_t num;
int width;
if (islong) {
num = (uint64_t)args;
width = sizeof(uint64_t);
} else {
num = (uint32_t)args;
width = sizeof(uint32_t);
}
while (width-- > 0) {
char c = (char)(num & mask);
if (c)
out << c;
num >>= 8;
}
++args;
}
break;
case 'b': {
uint64_t n = (uint64_t)args++;
char *s = (char *)args++;
out << s << ": " << n;
}
break;
case 'n':
case 'N': {
args += 2;
#if 0
uint64_t n = (uint64_t)args++;
struct reg_values *rv = (struct reg_values *)args++;
#endif
}
break;
case 'r':
case 'R': {
args += 2;
#if 0
uint64_t n = (uint64_t)args++;
struct reg_desc *rd = (struct reg_desc *)args++;
#endif
}
break;
case '%':
out << '%';
break;
}
++p;
}
break;
case '\n':
out << endl;
++p;
break;
case '\r':
++p;
if (*p != '\n')
out << endl;
break;
default: {
size_t len = strcspn(p, "%\n\r\0");
out.write(p, len);
p += len;
}
}
}
}

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2004-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: Nathan Binkert
* Ali Saidi
*/
#ifndef __PRINTK_HH__
#define __PRINTK_HH__
#include <sstream>
class Arguments;
void Printk(std::stringstream &out, Arguments args);
#endif // __PRINTK_HH__

View File

@ -0,0 +1,44 @@
/*
* Copyright (c) 2009 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: Ali Saidi
*/
#include "base/misc.hh"
#include "kern/operatingsystem.hh"
int
OperatingSystem::openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc)
{
warn("Attempting to open special file: %s. Ignorning. Simulation may"
" take un-expected code path or be non-deterministic until proper"
" handling is implemented.\n", path.c_str());
return -1;
}

View File

@ -0,0 +1,125 @@
/*
* Copyright (c) 2004-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
*/
#ifndef __KERN_OPERATINGSYSTEM_HH__
#define __KERN_OPERATINGSYSTEM_HH__
#include "base/types.hh"
#include <string>
class LiveProcess;
class ThreadContext;
/// This struct is used to build an target-OS-dependent table that
/// maps the target's open() flags to the host open() flags.
struct OpenFlagTransTable {
int tgtFlag; //!< Target system flag value.
int hostFlag; //!< Corresponding host system flag value.
};
///
/// This class encapsulates the types, structures, constants,
/// functions, and syscall-number mappings specific to an operating system
/// syscall interface.
///
class OperatingSystem {
public:
/// Stat buffer. Note that we can't call it 'stat' since that
/// gets #defined to something else on some systems. This type
/// can be specialized by architecture specific "Linux" classes
typedef void tgt_stat;
// same for stat64
typedef void tgt_stat64;
/// Length of strings in struct utsname (plus 1 for null char).
static const int _SYS_NMLN = 65;
/// Interface struct for uname().
typedef struct {
char sysname[_SYS_NMLN]; //!< System name.
char nodename[_SYS_NMLN]; //!< Node name.
char release[_SYS_NMLN]; //!< OS release.
char version[_SYS_NMLN]; //!< OS version.
char machine[_SYS_NMLN]; //!< Machine type.
} utsname;
/// Limit struct for getrlimit/setrlimit.
typedef struct {
uint64_t rlim_cur; //!< soft limit
uint64_t rlim_max; //!< hard limit
} rlimit;
/// For gettimeofday().
typedef struct {
int64_t tv_sec; //!< seconds
int64_t tv_usec; //!< microseconds
} timeval;
// For writev/readv
typedef struct {
uint64_t iov_base; // void *
uint64_t iov_len;
} tgt_iovec;
/// For getrusage().
typedef struct {
timeval ru_utime; //!< user time used
timeval ru_stime; //!< system time used
int64_t ru_maxrss; //!< max rss
int64_t ru_ixrss; //!< integral shared memory size
int64_t ru_idrss; //!< integral unshared data "
int64_t ru_isrss; //!< integral unshared stack "
int64_t ru_minflt; //!< page reclaims - total vmfaults
int64_t ru_majflt; //!< page faults
int64_t ru_nswap; //!< swaps
int64_t ru_inblock; //!< block input operations
int64_t ru_oublock; //!< block output operations
int64_t ru_msgsnd; //!< messages sent
int64_t ru_msgrcv; //!< messages received
int64_t ru_nsignals; //!< signals received
int64_t ru_nvcsw; //!< voluntary context switches
int64_t ru_nivcsw; //!< involuntary "
} rusage;
static int openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc);
static const bool mmapGrowsUp = true;
static bool mmapGrowsDown() { return false; }
}; // class OperatingSystem
#endif // __OPERATINGSYSTEM_HH__

View File

@ -0,0 +1,119 @@
/*
* Copyright (c) 2004-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: Ali Saidi
*/
#ifndef __SOLARIS_HH__
#define __SOLARIS_HH__
#include "base/types.hh"
#include "kern/operatingsystem.hh"
///
/// This class encapsulates the types, structures, constants,
/// functions, and syscall-number mappings specific to the Solaris
/// syscall interface.
///
class Solaris : public OperatingSystem
{
public:
//@{
/// Basic Solaris types.
typedef uint64_t size_t;
typedef uint64_t off_t;
typedef int64_t time_t;
typedef int32_t uid_t;
typedef int32_t gid_t;
typedef uint64_t rlim_t;
typedef uint64_t ino_t;
typedef uint64_t dev_t;
typedef uint32_t mode_t;
typedef uint32_t nlink_t;
//@}
struct tgt_timespec {
int64_t tv_sec;
int64_t tv_nsec;
};
/// Stat buffer. Note that we can't call it 'stat' since that
/// gets #defined to something else on some systems.
typedef struct {
uint64_t st_dev; //!< device
uint64_t st_ino; //!< inode
uint32_t st_mode; //!< mode
uint32_t st_nlink; //!< link count
int32_t st_uid; //!< owner's user ID
int32_t st_gid; //!< owner's group ID
uint64_t st_rdev; //!< device number
int64_t st_size; //!< file size in bytes
//struct tgt_timespec st_atimeX; //!< time of last access
//struct tgt_timespec st_mtimeX; //!< time of last modification
//struct tgt_timespec st_ctimeX; //!< time of last status change
int64_t st_atimeX, st_mtimeX, st_ctimeX;
int32_t st_blksize; //!< optimal I/O block size
int64_t st_blocks; //!< number of blocks allocated
char st_fstype[16];
} tgt_stat;
// same for stat64
typedef struct {
uint64_t st_dev; //!< device
uint64_t st_ino; //!< inode
uint32_t st_mode; //!< mode
uint32_t st_nlink; //!< link count
int32_t st_uid; //!< owner's user ID
int32_t st_gid; //!< owner's group ID
uint64_t st_rdev; //!< device number
int64_t st_size; //!< file size in bytes
//struct tgt_timespec st_atimeX; //!< time of last access
//struct tgt_timespec st_mtimeX; //!< time of last modification
//struct tgt_timespec st_ctimeX; //!< time of last status change
int64_t st_atimeX, st_mtimeX, st_ctimeX;
int32_t st_blksize; //!< optimal I/O block size
int64_t st_blocks; //!< number of blocks allocated
char st_fstype[16];
} tgt_stat64;
/// Length of strings in struct utsname (plus 1 for null char).
static const int _SYS_NMLN = 257;
/// Interface struct for uname().
typedef struct utsname {
char sysname[_SYS_NMLN]; //!< System name.
char nodename[_SYS_NMLN]; //!< Node name.
char release[_SYS_NMLN]; //!< OS release.
char version[_SYS_NMLN]; //!< OS version.
char machine[_SYS_NMLN]; //!< Machine type.
} utsname;
}; // class Solaris
#endif // __SOLARIS_HH__

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) 2004-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: Lisa Hsu
* Nathan Binkert
*/
#include "arch/isa_traits.hh"
#include "arch/utility.hh"
#include "base/trace.hh"
#include "config/the_isa.hh"
#include "cpu/thread_context.hh"
#include "debug/PCEvent.hh"
#include "kern/system_events.hh"
using namespace TheISA;
void
SkipFuncEvent::process(ThreadContext *tc)
{
TheISA::PCState oldPC M5_VAR_USED = tc->pcState();
// Call ISA specific code to do the skipping
TheISA::skipFunction(tc);
DPRINTF(PCEvent, "skipping %s: pc = %s, newpc = %s\n", description,
oldPC, tc->pcState());
}

View File

@ -0,0 +1,47 @@
/*
* Copyright (c) 2004-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: Nathan Binkert
* Lisa Hsu
* Ali Saidi
*/
#ifndef __SYSTEM_EVENTS_HH__
#define __SYSTEM_EVENTS_HH__
#include "cpu/pc_event.hh"
class SkipFuncEvent : public PCEvent
{
public:
SkipFuncEvent(PCEventQueue *q, const std::string &desc, Addr addr)
: PCEvent(q, desc, addr)
{}
virtual void process(ThreadContext *tc);
};
#endif // __SYSTEM_EVENTS_HH__

View File

@ -0,0 +1,81 @@
/*
* 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: Nathan Binkert
*/
#include <sys/types.h>
#include <algorithm>
#include "arch/isa_traits.hh"
#include "arch/vtophys.hh"
#include "base/loader/symtab.hh"
#include "base/cprintf.hh"
#include "base/trace.hh"
#include "base/types.hh"
#include "config/the_isa.hh"
#include "cpu/thread_context.hh"
#include "kern/tru64/mbuf.hh"
#include "sim/arguments.hh"
#include "sim/system.hh"
using namespace TheISA;
namespace tru64 {
void
DumpMbuf(Arguments args)
{
ThreadContext *tc = args.getThreadContext();
StringWrap name(tc->getSystemPtr()->name());
Addr addr = (Addr)args;
struct mbuf m;
CopyOut(tc, &m, addr, sizeof(m));
int count = m.m_pkthdr.len;
DPRINTFN("m=%#lx, m->m_pkthdr.len=%#d\n", addr, m.m_pkthdr.len);
while (count > 0) {
DPRINTFN("m=%#lx, m->m_data=%#lx, m->m_len=%d\n",
addr, m.m_data, m.m_len);
char *buffer = new char[m.m_len];
CopyOut(tc, buffer, m.m_data, m.m_len);
DDUMPN((uint8_t *)buffer, m.m_len);
delete [] buffer;
count -= m.m_len;
if (!m.m_next)
break;
CopyOut(tc, &m, m.m_next, sizeof(m));
}
}
} // namespace Tru64

View File

@ -0,0 +1,40 @@
/*
* 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: Nathan Binkert
*/
#ifndef __DUMP_MBUF_HH__
#define __DUMP_MBUF_HH__
#include "sim/arguments.hh"
namespace tru64 {
void DumpMbuf(Arguments args);
}
#endif // __DUMP_MBUF_HH__

View File

@ -0,0 +1,100 @@
/*
* 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: Nathan Binkert
*/
#ifndef __MBUF_HH__
#define __MBUF_HH__
#include "arch/isa_traits.hh"
#include "base/types.hh"
namespace tru64 {
struct m_hdr {
Addr mh_next; // 0x00
Addr mh_nextpkt; // 0x08
Addr mh_data; // 0x10
int32_t mh_len; // 0x18
int32_t mh_type; // 0x1C
int32_t mh_flags; // 0x20
int32_t mh_pad0; // 0x24
Addr mh_foo[4]; // 0x28, 0x30, 0x38, 0x40
};
struct pkthdr {
int32_t len;
int32_t protocolSum;
Addr rcvif;
};
struct m_ext {
Addr ext_buf; // 0x00
Addr ext_free; // 0x08
uint32_t ext_size; // 0x10
uint32_t ext_pad0; // 0x14
Addr ext_arg; // 0x18
struct ext_refq {
Addr forw, back; // 0x20, 0x28
} ext_ref;
Addr uiomove_f; // 0x30
int32_t protocolSum; // 0x38
int32_t bytesSummed; // 0x3C
Addr checksum; // 0x40
};
struct mbuf {
struct m_hdr m_hdr;
union {
struct {
struct pkthdr MH_pkthdr;
union {
struct m_ext MH_ext;
char MH_databuf[1];
} MH_dat;
} MH;
char M_databuf[1];
} M_dat;
};
#define m_attr m_hdr.mh_attr
#define m_next m_hdr.mh_next
#define m_len m_hdr.mh_len
#define m_data m_hdr.mh_data
#define m_type m_hdr.mh_type
#define m_flags m_hdr.mh_flags
#define m_nextpkt m_hdr.mh_nextpkt
#define m_act m_nextpkt
#define m_pkthdr M_dat.MH.MH_pkthdr
#define m_ext M_dat.MH.MH_dat.MH_ext
#define m_pktdat M_dat.MH.MH_dat.MH_databuf
#define m_dat M_dat.M_databuf
}
#endif // __MBUF_HH__

View File

@ -0,0 +1,271 @@
/*
* 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: Nathan Binkert
*/
#include <sys/types.h>
#include <algorithm>
#include "arch/vtophys.hh"
#include "base/cprintf.hh"
#include "base/trace.hh"
#include "base/types.hh"
#include "sim/arguments.hh"
using namespace std;
namespace tru64 {
void
Printf(Arguments args)
{
std::ostream &out = Trace::output();
char *p = (char *)args++;
ios::fmtflags saved_flags = out.flags();
char old_fill = out.fill();
int old_precision = out.precision();
while (*p) {
switch (*p) {
case '%': {
bool more = true;
bool islong = false;
bool leftjustify = false;
bool format = false;
bool zero = false;
int width = 0;
while (more && *++p) {
switch (*p) {
case 'l':
case 'L':
islong = true;
break;
case '-':
leftjustify = true;
break;
case '#':
format = true;
break;
case '0':
if (width)
width *= 10;
else
zero = true;
break;
default:
if (*p >= '1' && *p <= '9')
width = 10 * width + *p - '0';
else
more = false;
break;
}
}
bool hexnum = false;
bool octal = false;
bool sign = false;
switch (*p) {
case 'X':
case 'x':
hexnum = true;
break;
case 'O':
case 'o':
octal = true;
break;
case 'D':
case 'd':
sign = true;
break;
case 'P':
format = true;
case 'p':
hexnum = true;
break;
}
switch (*p) {
case 'D':
case 'd':
case 'U':
case 'u':
case 'X':
case 'x':
case 'O':
case 'o':
case 'P':
case 'p': {
if (hexnum)
out << hex;
if (octal)
out << oct;
if (format) {
if (!zero)
out.setf(ios::showbase);
else {
if (hexnum) {
out << "0x";
width -= 2;
} else if (octal) {
out << "0";
width -= 1;
}
}
}
if (zero)
out.fill('0');
if (width > 0)
out.width(width);
if (leftjustify && !zero)
out.setf(ios::left);
if (sign) {
if (islong)
out << (int64_t)args;
else
out << (int32_t)args;
} else {
if (islong)
out << (uint64_t)args;
else
out << (uint32_t)args;
}
if (zero)
out.fill(' ');
if (width > 0)
out.width(0);
out << dec;
++args;
}
break;
case 's': {
const char *s = (const char *)args;
if (!s)
s = "<NULL>";
if (width > 0)
out.width(width);
if (leftjustify)
out.setf(ios::left);
out << s;
++args;
}
break;
case 'C':
case 'c': {
uint64_t mask = (*p == 'C') ? 0xffL : 0x7fL;
uint64_t num;
int width;
if (islong) {
num = (uint64_t)args;
width = sizeof(uint64_t);
} else {
num = (uint32_t)args;
width = sizeof(uint32_t);
}
while (width-- > 0) {
char c = (char)(num & mask);
if (c)
out << c;
num >>= 8;
}
++args;
}
break;
case 'b': {
uint64_t n = (uint64_t)args++;
char *s = (char *)args++;
out << s << ": " << n;
}
break;
case 'n':
case 'N': {
args += 2;
#if 0
uint64_t n = (uint64_t)args++;
struct reg_values *rv = (struct reg_values *)args++;
#endif
}
break;
case 'r':
case 'R': {
args += 2;
#if 0
uint64_t n = (uint64_t)args++;
struct reg_desc *rd = (struct reg_desc *)args++;
#endif
}
break;
case '%':
out << '%';
break;
}
++p;
}
break;
case '\n':
out << endl;
++p;
break;
case '\r':
++p;
if (*p != '\n')
out << endl;
break;
default: {
size_t len = strcspn(p, "%\n\r\0");
out.write(p, len);
p += len;
}
}
}
out.flags(saved_flags);
out.fill(old_fill);
out.precision(old_precision);
}
} // namespace Tru64

View File

@ -0,0 +1,40 @@
/*
* 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: Nathan Binkert
*/
#ifndef __PRINTF_HH__
#define __PRINTF_HH__
#include "sim/arguments.hh"
namespace tru64 {
void Printf(Arguments args);
}
#endif // __PRINTF_HH__

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,114 @@
/*
* 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: Nathan Binkert
* Lisa Hsu
*/
#include "arch/alpha/ev5.hh"
#include "arch/isa_traits.hh"
#include "config/the_isa.hh"
#include "cpu/base.hh"
#include "cpu/thread_context.hh"
#include "debug/BADADDR.hh"
#include "debug/DebugPrintf.hh"
#include "debug/Printf.hh"
#include "kern/tru64/dump_mbuf.hh"
#include "kern/tru64/printf.hh"
#include "kern/tru64/tru64_events.hh"
#include "kern/system_events.hh"
#include "sim/arguments.hh"
#include "sim/system.hh"
using namespace TheISA;
//void SkipFuncEvent::process(ExecContext *tc);
void
BadAddrEvent::process(ThreadContext *tc)
{
// The following gross hack is the equivalent function to the
// annotation for vmunix::badaddr in:
// simos/simulation/apps/tcl/osf/tlaser.tcl
uint64_t a0 = tc->readIntReg(16);
AddrRangeIter iter;
bool found = false;
MasterPort &dataPort = tc->getCpuPtr()->getDataPort();
AddrRangeList resp = dataPort.getSlavePort().getAddrRanges();
for (iter = resp.begin(); iter != resp.end(); iter++) {
if (*iter == (K0Seg2Phys(a0) & PAddrImplMask))
found = true;
}
if (!IsK0Seg(a0) || found ) {
DPRINTF(BADADDR, "badaddr arg=%#x bad\n", a0);
tc->setIntReg(ReturnValueReg, 0x1);
SkipFuncEvent::process(tc);
} else {
DPRINTF(BADADDR, "badaddr arg=%#x good\n", a0);
}
}
void
PrintfEvent::process(ThreadContext *tc)
{
if (DTRACE(Printf)) {
StringWrap name(tc->getSystemPtr()->name());
DPRINTFN("");
Arguments args(tc);
tru64::Printf(args);
}
}
void
DebugPrintfEvent::process(ThreadContext *tc)
{
if (DTRACE(DebugPrintf)) {
if (!raw) {
StringWrap name(tc->getSystemPtr()->name());
DPRINTFN("");
}
Arguments args(tc);
tru64::Printf(args);
}
}
void
DumpMbufEvent::process(ThreadContext *tc)
{
if (DTRACE(DebugPrintf)) {
Arguments args(tc);
tru64::DumpMbuf(args);
}
}

View File

@ -0,0 +1,86 @@
/*
* 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: Nathan Binkert
* Lisa Hsu
*/
#ifndef __TRU64_EVENTS_HH__
#define __TRU64_EVENTS_HH__
#include <string>
#include "cpu/pc_event.hh"
#include "kern/system_events.hh"
class ThreadContext;
class BadAddrEvent : public SkipFuncEvent
{
public:
BadAddrEvent(PCEventQueue *q, const std::string &desc, Addr addr)
: SkipFuncEvent(q, desc, addr) {}
virtual void process(ThreadContext *tc);
};
class PrintfEvent : public PCEvent
{
public:
PrintfEvent(PCEventQueue *q, const std::string &desc, Addr addr)
: PCEvent(q, desc, addr) {}
virtual void process(ThreadContext *tc);
};
class DebugPrintfEvent : public PCEvent
{
private:
bool raw;
public:
DebugPrintfEvent(PCEventQueue *q, const std::string &desc, Addr addr,
bool r = false)
: PCEvent(q, desc, addr), raw(r) {}
virtual void process(ThreadContext *tc);
};
class DebugPrintfrEvent : public DebugPrintfEvent
{
public:
DebugPrintfrEvent(PCEventQueue *q, const std::string &desc, Addr addr)
: DebugPrintfEvent(q, desc, addr, true)
{}
};
class DumpMbufEvent : public PCEvent
{
public:
DumpMbufEvent(PCEventQueue *q, const std::string &desc, Addr addr)
: PCEvent(q, desc, addr) {}
virtual void process(ThreadContext *tc);
};
#endif // __TRU64_EVENTS_HH__

View File

@ -0,0 +1,440 @@
/*
* 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: Nathan Binkert
*/
#include "kern/tru64/tru64_syscalls.hh"
namespace {
const char *
standard_strings[SystemCalls<Tru64>::StandardNumber] = {
"syscall", // 0
"exit", // 1
"fork", // 2
"read", // 3
"write", // 4
"old_open", // 5
"close", // 6
"wait4", // 7
"old_creat", // 8
"link", // 9
"unlink", // 10
"execv", // 11
"chdir", // 12
"fchdir", // 13
"mknod", // 14
"chmod", // 15
"chown", // 16
"obreak", // 17
"pre_F64_getfsstat", // 18
"lseek", // 19
"getpid", // 20
"mount", // 21
"unmount", // 22
"setuid", // 23
"getuid", // 24
"exec_with_loader", // 25
"ptrace", // 26
"recvmsg", // 27
"sendmsg", // 28
"recvfrom", // 29
"accept", // 30
"getpeername", // 31
"getsockname", // 32
"access", // 33
"chflags", // 34
"fchflags", // 35
"sync", // 36
"kill", // 37
"old_stat", // 38
"setpgid", // 39
"old_lstat", // 40
"dup", // 41
"pipe", // 42
"set_program_attributes", // 43
"profil", // 44
"open", // 45
"obsolete_osigaction", // 46
"getgid", // 47
"sigprocmask", // 48
"getlogin", // 49
"setlogin", // 50
"acct", // 51
"sigpending", // 52
"classcntl", // 53
"ioctl", // 54
"reboot", // 55
"revoke", // 56
"symlink", // 57
"readlink", // 58
"execve", // 59
"umask", // 60
"chroot", // 61
"old_fstat", // 62
"getpgrp", // 63
"getpagesize", // 64
"mremap", // 65
"vfork", // 66
"pre_F64_stat", // 67
"pre_F64_lstat", // 68
"sbrk", // 69
"sstk", // 70
"mmap", // 71
"ovadvise", // 72
"munmap", // 73
"mprotect", // 74
"madvise", // 75
"old_vhangup", // 76
"kmodcall", // 77
"mincore", // 78
"getgroups", // 79
"setgroups", // 80
"old_getpgrp", // 81
"setpgrp", // 82
"setitimer", // 83
"old_wait", // 84
"table", // 85
"getitimer", // 86
"gethostname", // 87
"sethostname", // 88
"getdtablesize", // 89
"dup2", // 90
"pre_F64_fstat", // 91
"fcntl", // 92
"select", // 93
"poll", // 94
"fsync", // 95
"setpriority", // 96
"socket", // 97
"connect", // 98
"old_accept", // 99
"getpriority", // 100
"old_send", // 101
"old_recv", // 102
"sigreturn", // 103
"bind", // 104
"setsockopt", // 105
"listen", // 106
"plock", // 107
"old_sigvec", // 108
"old_sigblock", // 109
"old_sigsetmask", // 110
"sigsuspend", // 111
"sigstack", // 112
"old_recvmsg", // 113
"old_sendmsg", // 114
"obsolete_vtrcae", // 115
"gettimeofday", // 116
"getrusage", // 117
"getsockopt", // 118
"numa_syscalls", // 119
"readv", // 120
"writev", // 121
"settimeofday", // 122
"fchown", // 123
"fchmod", // 124
"old_recvfrom", // 125
"setreuid", // 126
"setregid", // 127
"rename", // 128
"truncate", // 129
"ftruncate", // 130
"flock", // 131
"setgid", // 132
"sendto", // 133
"shutdown", // 134
"socketpair", // 135
"mkdir", // 136
"rmdir", // 137
"utimes", // 138
"obsolete_42_sigreturn", // 139
"adjtime", // 140
"old_getpeername", // 141
"gethostid", // 142
"sethostid", // 143
"getrlimit", // 144
"setrlimit", // 145
"old_killpg", // 146
"setsid", // 147
"quotactl", // 148
"oldquota", // 149
"old_getsockname", // 150
"pread", // 151
"pwrite", // 152
"pid_block", // 153
"pid_unblock", // 154
"signal_urti", // 155
"sigaction", // 156
"sigwaitprim", // 157
"nfssvc", // 158
"getdirentries", // 159
"pre_F64_statfs", // 160
"pre_F64_fstatfs", // 161
0, // 162
"async_daemon", // 163
"getfh", // 164
"getdomainname", // 165
"setdomainname", // 166
0, // 167
0, // 168
"exportfs", // 169
0, // 170
0, // 171
0, // 172
0, // 173
0, // 174
0, // 175
0, // 176
0, // 177
0, // 178
0, // 179
0, // 180
"alt_plock", // 181
0, // 182
0, // 183
"getmnt", // 184
0, // 185
0, // 186
"alt_sigpending", // 187
"alt_setsid", // 188
0, // 189
0, // 190
0, // 191
0, // 192
0, // 193
0, // 194
0, // 195
0, // 196
0, // 197
0, // 198
"swapon", // 199
"msgctl", // 200
"msgget", // 201
"msgrcv", // 202
"msgsnd", // 203
"semctl", // 204
"semget", // 205
"semop", // 206
"uname", // 207
"lchown", // 208
"shmat", // 209
"shmctl", // 210
"shmdt", // 211
"shmget", // 212
"mvalid", // 213
"getaddressconf", // 214
"msleep", // 215
"mwakeup", // 216
"msync", // 217
"signal", // 218
"utc_gettime", // 219
"utc_adjtime", // 220
0, // 221
"security", // 222
"kloadcall", // 223
"stat", // 224
"lstat", // 225
"fstat", // 226
"statfs", // 227
"fstatfs", // 228
"getfsstat", // 229
"gettimeofday64", // 230
"settimeofday64", // 231
0, // 232
"getpgid", // 233
"getsid", // 234
"sigaltstack", // 235
"waitid", // 236
"priocntlset", // 237
"sigsendset", // 238
"set_speculative", // 239
"msfs_syscall", // 240
"sysinfo", // 241
"uadmin", // 242
"fuser", // 243
"proplist_syscall", // 244
"ntp_adjtime", // 245
"ntp_gettime", // 246
"pathconf", // 247
"fpathconf", // 248
"sync2", // 249
"uswitch", // 250
"usleep_thread", // 251
"audcntl", // 252
"audgen", // 253
"sysfs", // 254
"subsys_info", // 255
"getsysinfo", // 256
"setsysinfo", // 257
"afs_syscall", // 258
"swapctl", // 259
"memcntl", // 260
"fdatasync", // 261
"oflock", // 262
"_F64_readv", // 263
"_F64_writev", // 264
"cdslxlate", // 265
"sendfile", // 266
};
const char *
mach_strings[SystemCalls<Tru64>::MachNumber] = {
0, // 0
0, // 1
0, // 2
0, // 3
0, // 4
0, // 5
0, // 6
0, // 7
0, // 8
0, // 9
"task_self", // 10
"thread_reply", // 11
"task_notify", // 12
"thread_self", // 13
0, // 14
0, // 15
0, // 16
0, // 17
0, // 18
0, // 19
"msg_send_trap", // 20
"msg_receive_trap", // 21
"msg_rpc_trap", // 22
0, // 23
"nxm_block", // 24
"nxm_unblock", // 25
0, // 26
0, // 27
0, // 28
"nxm_thread_destroy", // 29
"lw_wire", // 30
"lw_unwire", // 31
"nxm_thread_create", // 32
"nxm_task_init", // 33
0, // 34
"nxm_idle", // 35
"nxm_wakeup_idle", // 36
"nxm_set_pthid", // 37
"nxm_thread_kill", // 38
"nxm_thread_block", // 39
"nxm_thread_wakeup", // 40
"init_process", // 41
"nxm_get_binding", // 42
"map_fd", // 43
"nxm_resched", // 44
"nxm_set_cancel", // 45
"nxm_set_binding", // 46
"stack_create", // 47
"nxm_get_state", // 48
"nxm_thread_suspend", // 49
"nxm_thread_resume", // 50
"nxm_signal_check", // 51
"htg_unix_syscall", // 52
0, // 53
0, // 54
"host_self", // 55
"host_priv_self", // 56
0, // 57
0, // 58
"swtch_pri", // 59
"swtch", // 60
"thread_switch", // 61
"semop_fast", // 62
"nxm_pshared_init", // 63
"nxm_pshared_block", // 64
"nxm_pshared_unblock", // 65
"nxm_pshared_destroy", // 66
"nxm_swtch_pri", // 67
"lw_syscall", // 68
0, // 69
"mach_sctimes_0", // 70
"mach_sctimes_1", // 71
"mach_sctimes_2", // 72
"mach_sctimes_3", // 73
"mach_sctimes_4", // 74
"mach_sctimes_5", // 75
"mach_sctimes_6", // 76
"mach_sctimes_7", // 77
"mach_sctimes_8", // 78
"mach_sctimes_9", // 79
"mach_sctimes_10", // 80
"mach_sctimes_11", // 81
"mach_sctimes_port_alloc_dealloc", // 82
};
}
const char *
SystemCalls<Tru64>::name(int num)
{
if (num >= Number)
return 0;
else if (num >= StandardNumber)
return mach_strings[num - StandardNumber];
else if (num >= 0)
return standard_strings[num];
else if (num > -MachNumber)
return mach_strings[-num];
else
return 0;
}

View File

@ -0,0 +1,361 @@
/*
* 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: Nathan Binkert
*/
#ifndef __KERN_TRU64_TRU64_SYSCALLS_HH__
#define __KERN_TRU64_TRU64_SYSCALLS_HH__
#include "kern/tru64/tru64.hh"
template <class OS>
class SystemCalls;
template <>
class SystemCalls<Tru64>
{
public:
enum {
syscall = 0,
exit = 1,
fork = 2,
read = 3,
write = 4,
old_open = 5,
close = 6,
wait4 = 7,
old_creat = 8,
link = 9,
unlink = 10,
execv = 11,
chdir = 12,
fchdir = 13,
mknod = 14,
chmod = 15,
chown = 16,
obreak = 17,
pre_F64_getfsstat = 18,
lseek = 19,
getpid = 20,
mount = 21,
unmount = 22,
setuid = 23,
getuid = 24,
exec_with_loader = 25,
ptrace = 26,
recvmsg = 27,
sendmsg = 28,
recvfrom = 29,
accept = 30,
getpeername = 31,
getsockname = 32,
access = 33,
chflags = 34,
fchflags = 35,
sync = 36,
kill = 37,
old_stat = 38,
setpgid = 39,
old_lstat = 40,
dup = 41,
pipe = 42,
set_program_attributes = 43,
profil = 44,
open = 45,
obsolete_osigaction = 46,
getgid = 47,
sigprocmask = 48,
getlogin = 49,
setlogin = 50,
acct = 51,
sigpending = 52,
classcntl = 53,
ioctl = 54,
reboot = 55,
revoke = 56,
symlink = 57,
readlink = 58,
execve = 59,
umask = 60,
chroot = 61,
old_fstat = 62,
getpgrp = 63,
getpagesize = 64,
mremap = 65,
vfork = 66,
pre_F64_stat = 67,
pre_F64_lstat = 68,
sbrk = 69,
sstk = 70,
mmap = 71,
ovadvise = 72,
munmap = 73,
mprotect = 74,
madvise = 75,
old_vhangup = 76,
kmodcall = 77,
mincore = 78,
getgroups = 79,
setgroups = 80,
old_getpgrp = 81,
setpgrp = 82,
setitimer = 83,
old_wait = 84,
table = 85,
getitimer = 86,
gethostname = 87,
sethostname = 88,
getdtablesize = 89,
dup2 = 90,
pre_F64_fstat = 91,
fcntl = 92,
select = 93,
poll = 94,
fsync = 95,
setpriority = 96,
socket = 97,
connect = 98,
old_accept = 99,
getpriority = 100,
old_send = 101,
old_recv = 102,
sigreturn = 103,
bind = 104,
setsockopt = 105,
listen = 106,
plock = 107,
old_sigvec = 108,
old_sigblock = 109,
old_sigsetmask = 110,
sigsuspend = 111,
sigstack = 112,
old_recvmsg = 113,
old_sendmsg = 114,
obsolete_vtrcae = 115,
gettimeofday = 116,
getrusage = 117,
getsockopt = 118,
numa_syscalls = 119,
readv = 120,
writev = 121,
settimeofday = 122,
fchown = 123,
fchmod = 124,
old_recvfrom = 125,
setreuid = 126,
setregid = 127,
rename = 128,
truncate = 129,
ftruncate = 130,
flock = 131,
setgid = 132,
sendto = 133,
shutdown = 134,
socketpair = 135,
mkdir = 136,
rmdir = 137,
utimes = 138,
obsolete_42_sigreturn = 139,
adjtime = 140,
old_getpeername = 141,
gethostid = 142,
sethostid = 143,
getrlimit = 144,
setrlimit = 145,
old_killpg = 146,
setsid = 147,
quotactl = 148,
oldquota = 149,
old_getsockname = 150,
pread = 151,
pwrite = 152,
pid_block = 153,
pid_unblock = 154,
signal_urti = 155,
sigaction = 156,
sigwaitprim = 157,
nfssvc = 158,
getdirentries = 159,
pre_F64_statfs = 160,
pre_F64_fstatfs = 161,
async_daemon = 163,
getfh = 164,
getdomainname = 165,
setdomainname = 166,
exportfs = 169,
alt_plock = 181,
getmnt = 184,
alt_sigpending = 187,
alt_setsid = 188,
swapon = 199,
msgctl = 200,
msgget = 201,
msgrcv = 202,
msgsnd = 203,
semctl = 204,
semget = 205,
semop = 206,
uname = 207,
lchown = 208,
shmat = 209,
shmctl = 210,
shmdt = 211,
shmget = 212,
mvalid = 213,
getaddressconf = 214,
msleep = 215,
mwakeup = 216,
msync = 217,
signal = 218,
utc_gettime = 219,
utc_adjtime = 220,
security = 222,
kloadcall = 223,
stat = 224,
lstat = 225,
fstat = 226,
statfs = 227,
fstatfs = 228,
getfsstat = 229,
gettimeofday64 = 230,
settimeofday64 = 231,
getpgid = 233,
getsid = 234,
sigaltstack = 235,
waitid = 236,
priocntlset = 237,
sigsendset = 238,
set_speculative = 239,
msfs_syscall = 240,
sysinfo = 241,
uadmin = 242,
fuser = 243,
proplist_syscall = 244,
ntp_adjtime = 245,
ntp_gettime = 246,
pathconf = 247,
fpathconf = 248,
sync2 = 249,
uswitch = 250,
usleep_thread = 251,
audcntl = 252,
audgen = 253,
sysfs = 254,
subsys_info = 255,
getsysinfo = 256,
setsysinfo = 257,
afs_syscall = 258,
swapctl = 259,
memcntl = 260,
fdatasync = 261,
oflock = 262,
_F64_readv = 263,
_F64_writev = 264,
cdslxlate = 265,
sendfile = 266,
StandardNumber
};
enum {
task_self = 10,
thread_reply = 11,
task_notify = 12,
thread_self = 13,
msg_send_trap = 20,
msg_receive_trap = 21,
msg_rpc_trap = 22,
nxm_block = 24,
nxm_unblock = 25,
nxm_thread_destroy = 29,
lw_wire = 30,
lw_unwire = 31,
nxm_thread_create = 32,
nxm_task_init = 33,
nxm_idle = 35,
nxm_wakeup_idle = 36,
nxm_set_pthid = 37,
nxm_thread_kill = 38,
nxm_thread_block = 39,
nxm_thread_wakeup = 40,
init_process = 41,
nxm_get_binding = 42,
map_fd = 43,
nxm_resched = 44,
nxm_set_cancel = 45,
nxm_set_binding = 46,
stack_create = 47,
nxm_get_state = 48,
nxm_thread_suspend = 49,
nxm_thread_resume = 50,
nxm_signal_check = 51,
htg_unix_syscall = 52,
host_self = 55,
host_priv_self = 56,
swtch_pri = 59,
swtch = 60,
thread_switch = 61,
semop_fast = 62,
nxm_pshared_init = 63,
nxm_pshared_block = 64,
nxm_pshared_unblock = 65,
nxm_pshared_destroy = 66,
nxm_swtch_pri = 67,
lw_syscall = 68,
mach_sctimes_0 = 70,
mach_sctimes_1 = 71,
mach_sctimes_2 = 72,
mach_sctimes_3 = 73,
mach_sctimes_4 = 74,
mach_sctimes_5 = 75,
mach_sctimes_6 = 76,
mach_sctimes_7 = 77,
mach_sctimes_8 = 78,
mach_sctimes_9 = 79,
mach_sctimes_10 = 80,
mach_sctimes_11 = 81,
mach_sctimes_port_alloc_dealloc = 82,
MachNumber
};
static const int Number = StandardNumber + MachNumber;
static const char *name(int num);
static bool validSyscallNumber(int num) {
return -MachNumber < num && num < StandardNumber;
}
static int convert(int syscall_num) {
if (!validSyscallNumber(syscall_num))
return -1;
return syscall_num < 0 ? StandardNumber - syscall_num : syscall_num;
}
};
#endif // __KERN_TRU64_TRU64_SYSCALLS_HH__