+++ /dev/null
-/*
- * Copyright 2020 Google Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "arch/sparc/solaris/se_workload.hh"
-
-#include <sys/syscall.h>
-
-#include "arch/sparc/process.hh"
-#include "base/loader/object_file.hh"
-#include "base/trace.hh"
-#include "cpu/thread_context.hh"
-#include "sim/proxy_ptr.hh"
-#include "sim/syscall_desc.hh"
-#include "sim/syscall_emul.hh"
-
-namespace
-{
-
-class SolarisLoader : public Process::Loader
-{
- public:
- Process *
- load(const ProcessParams ¶ms, ::Loader::ObjectFile *obj) override
- {
- auto arch = obj->getArch();
- auto opsys = obj->getOpSys();
-
- if (arch != ::Loader::SPARC64)
- return nullptr;
-
- if (opsys != ::Loader::Solaris)
- return nullptr;
-
- return new Sparc64Process(params, obj);
- }
-};
-
-SolarisLoader loader;
-
-} // anonymous namespace
-
-namespace SparcISA
-{
-
-EmuSolaris::EmuSolaris(const Params &p) : SEWorkload(p), _params(p)
-{}
-
-void
-EmuSolaris::syscall(ThreadContext *tc)
-{
- Process *process = tc->getProcessPtr();
- // Call the syscall function in the base Process class to update stats.
- // This will move into the base SEWorkload function at some point.
- process->Process::syscall(tc);
-
- syscallDescs.get(tc->readIntReg(1))->doSyscall(tc);
-}
-
-/// Target uname() handler.
-static SyscallReturn
-unameFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<Solaris::utsname> name)
-{
- auto process = tc->getProcessPtr();
-
- strcpy(name->sysname, "SunOS");
- strcpy(name->nodename, "m5.eecs.umich.edu");
- strcpy(name->release, process->release.c_str());
- strcpy(name->version, "Generic_118558-21");
- strcpy(name->machine, "sun4u");
-
- return 0;
-}
-
-
-SyscallDescTable<SEWorkload::SyscallABI64> EmuSolaris::syscallDescs = {
- { 0, "syscall" },
- { 1, "exit", exitFunc },
- { 2, "fork" },
- { 3, "read", readFunc<SparcSolaris> },
- { 4, "write", writeFunc<SparcSolaris> },
- { 5, "open", openFunc<SparcSolaris> },
- { 6, "close", closeFunc },
- { 7, "wait" },
- { 8, "creat" },
- { 9, "link" },
- { 10, "unlink", unlinkFunc },
- { 11, "exec" },
- { 12, "chdir" },
- { 13, "time" },
- { 14, "mknod" },
- { 15, "chmod", chmodFunc<Solaris> },
- { 16, "chown", chownFunc },
- { 17, "brk", brkFunc },
- { 18, "stat" },
- { 19, "lseek", lseekFunc },
- { 20, "getpid", getpidFunc },
- { 21, "mount" },
- { 22, "umount" },
- { 23, "setuid", ignoreFunc },
- { 24, "getuid", getuidFunc },
- { 25, "stime" },
- { 26, "pcsample" },
- { 27, "alarm" },
- { 28, "fstat", fstatFunc<SparcSolaris> },
- { 29, "pause" },
- { 30, "utime" },
- { 31, "stty" },
- { 32, "gtty" },
- { 33, "access" },
- { 34, "nice" },
- { 35, "statfs" },
- { 36, "sync" },
- { 37, "kill" },
- { 38, "fstatfs" },
- { 39, "pgrpsys" },
- { 40, "xenix" },
- { 41, "dup" },
- { 42, "pipe", pipePseudoFunc },
- { 43, "times" },
- { 44, "profil" },
- { 45, "plock" },
- { 46, "setgid" },
- { 47, "getgid", getgidFunc },
- { 48, "signal" },
- { 49, "msgsys" },
- { 50, "syssun" },
- { 51, "acct" },
- { 52, "shmsys" },
- { 53, "semsys" },
- { 54, "ioctl" },
- { 55, "uadmin" },
- { 56, "RESERVED" },
- { 57, "utssys" },
- { 58, "fdsync" },
- { 59, "execve" },
- { 60, "umask", umaskFunc },
- { 61, "chroot" },
- { 62, "fcntl" },
- { 63, "ulimit" },
- { 64, "reserved_64" },
- { 65, "reserved_65" },
- { 66, "reserved_66" },
- { 67, "reserved_67" },
- { 68, "reserved_68" },
- { 69, "reserved_69" },
- { 70, "tasksys" },
- { 71, "acctctl" },
- { 72, "reserved_72" },
- { 73, "getpagesizes" },
- { 74, "rctlsys" },
- { 75, "issetugid" },
- { 76, "fsat" },
- { 77, "lwp_park" },
- { 78, "sendfilev" },
- { 79, "rmdir" },
- { 80, "mkdir" },
- { 81, "getdents" },
- { 82, "reserved_82" },
- { 83, "reserved_83" },
- { 84, "sysfs" },
- { 85, "getmsg" },
- { 86, "putmsg" },
- { 87, "poll" },
- { 88, "lstat" },
- { 89, "symlink" },
- { 90, "readlink", readlinkFunc },
- { 91, "setgroups" },
- { 92, "getgroups" },
- { 93, "fchmod" },
- { 94, "fchown" },
- { 95, "sigprocmask" },
- { 96, "sigsuspend" },
- { 97, "sigaltstack" },
- { 98, "sigaction" },
- { 99, "sigpending" },
- { 100, "context" },
- { 101, "evsys" },
- { 102, "evtrapret" },
- { 103, "statvfs" },
- { 104, "fstatvfs" },
- { 105, "getloadavg" },
- { 106, "nfssys" },
- { 107, "waitsys" },
- { 108, "sigsendsys" },
- { 109, "hrtsys" },
- { 110, "acancel" },
- { 111, "async" },
- { 112, "priocntlsys" },
- { 113, "pathconf" },
- { 114, "mincore" },
- { 115, "mmap", mmapFunc<SparcSolaris> },
- { 116, "mprotect" },
- { 117, "munmap", munmapFunc },
- { 118, "fpathconf" },
- { 119, "vfork" },
- { 120, "fchdir" },
- { 121, "readv" },
- { 122, "writev" },
- { 123, "xstat" },
- { 124, "lxstat" },
- { 125, "fxstat" },
- { 126, "xmknod" },
- { 127, "clocal" },
- { 128, "setrlimit" },
- { 129, "getrlimit" },
- { 130, "lchown" },
- { 131, "memcntl" },
- { 132, "getpmsg" },
- { 133, "putpmsg" },
- { 134, "rename" },
- { 135, "uname", unameFunc },
- { 136, "setegid" },
- { 137, "sysconfig" },
- { 138, "adjtime" },
- { 139, "systeminfo" },
- { 140, "reserved_140" },
- { 141, "seteuid" },
- { 142, "vtrace" },
- { 143, "fork1" },
- { 144, "sigtimedwait" },
- { 145, "lwp_info" },
- { 146, "yield" },
- { 147, "lwp_sema_wait" },
- { 148, "lwp_sema_post" },
- { 149, "lwp_sema_trywait" },
- { 150, "lwp_detach" },
- { 151, "corectl" },
- { 152, "modctl" },
- { 153, "fchroot" },
- { 154, "utimes" },
- { 155, "vhangup" },
- { 156, "gettimeofday" },
- { 157, "getitimer" },
- { 158, "setitimer" },
- { 159, "lwp_create" },
- { 160, "lwp_exit" },
- { 161, "lwp_suspend" },
- { 162, "lwp_continue" },
- { 163, "lwp_kill" },
- { 164, "lwp_self" },
- { 165, "lwp_setprivate" },
- { 166, "lwp_getprivate" },
- { 167, "lwp_wait" },
- { 168, "lwp_mutex_wakeup" },
- { 169, "lwp_mutex_lock" },
- { 170, "lwp_cond_wait" },
- { 171, "lwp_cond_signal" },
- { 172, "lwp_cond_broadcast" },
- { 173, "pread" },
- { 174, "pwrite" },
- { 175, "llseek" },
- { 176, "inst_sync" },
- { 177, "srmlimitsys" },
- { 178, "kaio" },
- { 179, "cpc" },
- { 180, "lgrpsys_meminfosys" },
- { 181, "rusagesys" },
- { 182, "reserved_182" },
- { 183, "reserved_183" },
- { 184, "tsolsys" },
- { 185, "acl" },
- { 186, "auditsys" },
- { 187, "processor_bind" },
- { 188, "processor_info" },
- { 189, "p_online" },
- { 190, "sigqueue" },
- { 191, "clock_gettime" },
- { 192, "clock_settime" },
- { 193, "clock_getres" },
- { 194, "timer_create" },
- { 195, "timer_delete" },
- { 196, "timer_settime" },
- { 197, "timer_gettime" },
- { 198, "timer_getoverrun" },
- { 199, "nanosleep" },
- { 200, "facl" },
- { 201, "door" },
- { 202, "setreuid" },
- { 203, "setregid" },
- { 204, "install_utrap" },
- { 205, "signotify" },
- { 206, "schedctl" },
- { 207, "pset" },
- { 208, "sparc_utrap_install" },
- { 209, "resolvepath" },
- { 210, "signotifywait" },
- { 211, "lwp_sigredirect" },
- { 212, "lwp_alarm" },
- { 213, "getdents64" },
- { 214, "mmap64" },
- { 215, "stat64" },
- { 216, "lstat64" },
- { 217, "fstat64" },
- { 218, "statvfs64" },
- { 219, "fstatvfs64" },
- { 220, "setrlimit64" },
- { 221, "getrlimit64" },
- { 222, "pread64" },
- { 223, "pwrite64" },
- { 224, "creat64" },
- { 225, "open64" },
- { 226, "rpcsys" },
- { 227, "reserved_227" },
- { 228, "reserved_228" },
- { 229, "reserved_229" },
- { 230, "so_socket" },
- { 231, "so_socketpair" },
- { 232, "bind" },
- { 233, "listen" },
- { 234, "accept" },
- { 235, "connect" },
- { 236, "shutdown" },
- { 237, "recv" },
- { 238, "recvfrom" },
- { 239, "recvmsg" },
- { 240, "send" },
- { 241, "sendmsg" },
- { 242, "sendto" },
- { 243, "getpeername" },
- { 244, "getsockname" },
- { 245, "getsockopt" },
- { 246, "setsockopt" },
- { 247, "sockconfig" },
- { 248, "ntp_gettime" },
- { 249, "ntp_adjtime" },
- { 250, "lwp_mutex_unlock" },
- { 251, "lwp_mutex_trylock" },
- { 252, "lwp_mutex_init" },
- { 253, "cladm" },
- { 254, "lwp_sigtimedwait" },
- { 255, "umount2" }
-};
-
-} // namespace SparcISA
-
-SparcISA::EmuSolaris *
-SparcEmuSolarisParams::create() const
-{
- return new SparcISA::EmuSolaris(*this);
-}
+++ /dev/null
-/*
- * Copyright 2020 Google Inc.
- *
- * 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.
- */
-
-#ifndef __ARCH_SPARC_SOLARIS_SE_WORKLOAD_HH__
-#define __ARCH_SPARC_SOLARIS_SE_WORKLOAD_HH__
-
-#include "arch/sparc/se_workload.hh"
-#include "arch/sparc/solaris/solaris.hh"
-#include "params/SparcEmuSolaris.hh"
-#include "sim/syscall_desc.hh"
-
-namespace SparcISA
-{
-
-class EmuSolaris : public SEWorkload
-{
- public:
- using Params = SparcEmuSolarisParams;
-
- protected:
- const Params &_params;
-
- /// Array of syscall descriptors, indexed by call number.
- static SyscallDescTable<SEWorkload::SyscallABI64> syscallDescs;
-
- public:
- const Params ¶ms() const { return _params; }
-
- EmuSolaris(const Params &p);
-
- ::Loader::Arch getArch() const override { return ::Loader::SPARC64; }
-
- void syscall(ThreadContext *tc) override;
-};
-
-} // namespace SparcISA
-
-#endif // __ARCH_SPARC_SOLARIS_SE_WORKLOAD_HH__