/*
 * Copyright 2005 The Regents of The University of Michigan
 * Copyright 2007 MIPS Technologies, Inc.
 * 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/mips/linux/se_workload.hh"

#include <sys/syscall.h>

#include "arch/mips/process.hh"
#include "arch/mips/regs/misc.hh"
#include "base/loader/object_file.hh"
#include "base/trace.hh"
#include "cpu/thread_context.hh"
#include "sim/syscall_emul.hh"

namespace gem5
{

namespace
{

class LinuxLoader : public Process::Loader
{
  public:
    Process *
    load(const ProcessParams &params, loader::ObjectFile *obj) override
    {
        if (obj->getArch() != loader::Mips)
            return nullptr;

        auto opsys = obj->getOpSys();

        if (opsys == loader::UnknownOpSys) {
            warn("Unknown operating system; assuming Linux.");
            opsys = loader::Linux;
        }

        if (opsys != loader::Linux)
            return nullptr;

        return new MipsProcess(params, obj);
    }
};

LinuxLoader linuxLoader;

} // anonymous namespace

namespace MipsISA
{

void
EmuLinux::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(2))->doSyscall(tc);
}

/// Target uname() handler.
static SyscallReturn
unameFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
{
    auto process = tc->getProcessPtr();

    strcpy(name->sysname, "Linux");
    strcpy(name->nodename,"sim.gem5.org");
    strcpy(name->release, process->release.c_str());
    strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
    strcpy(name->machine, "mips");

    return 0;
}

/// Target sys_getsysyinfo() handler.  Even though this call is
/// borrowed from Tru64, the subcases that get used appear to be
/// different in practice from those used by Tru64 processes.
static SyscallReturn
sys_getsysinfoFunc(SyscallDesc *desc, ThreadContext *tc, unsigned op,
                   unsigned bufPtr, unsigned nbytes)
{
    switch (op) {
      case 45:
        {
            // GSI_IEEE_FP_CONTROL
            VPtr<uint64_t> fpcr(bufPtr, tc);
            // I don't think this exactly matches the HW FPCR
            *fpcr = 0;
            return 0;
        }
      default:
        std::cerr << "sys_getsysinfo: unknown op " << op << std::endl;
        abort();
        break;
    }

    return 1;
}

/// Target sys_setsysinfo() handler.
static SyscallReturn
sys_setsysinfoFunc(SyscallDesc *desc, ThreadContext *tc, unsigned op,
                   VPtr<> bufPtr, unsigned nbytes)
{
    switch (op) {

      case 14:
        {
            // SSI_IEEE_FP_CONTROL
            ConstVPtr<uint64_t> fpcr(bufPtr, tc);
            // I don't think this exactly matches the HW FPCR
            DPRINTFR(SyscallVerbose, "sys_setsysinfo(SSI_IEEE_FP_CONTROL): "
                   " setting FPCR to 0x%x\n", letoh(*fpcr));
            return 0;
        }
      default:
        std::cerr << "sys_setsysinfo: unknown op " << op << std::endl;
        abort();
        break;
    }

    return 1;
}

static SyscallReturn
setThreadAreaFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> addr)
{
    tc->setMiscRegNoEffect(MISCREG_TP_VALUE, addr);
    return 0;
}

SyscallDescTable<MipsISA::SEWorkload::SyscallABI> EmuLinux::syscallDescs = {
    { 4000, "syscall" },
    { 4001, "exit", exitFunc },
    { 4002, "fork" },
    { 4003, "read", readFunc<MipsLinux> },
    { 4004, "write", writeFunc<MipsLinux> },
    { 4005, "open", openFunc<MipsLinux> },
    { 4006, "close", closeFunc },
    { 4007, "waitpid" },
    { 4008, "creat" },
    { 4009, "link" },
    { 4010, "unlink", unlinkFunc },
    { 4011, "execve" },
    { 4012, "chdir" },
    { 4013, "time" },
    { 4014, "mknod" },
    { 4015, "chmod", chmodFunc<MipsLinux> },
    { 4016, "lchown", chownFunc },
    { 4017, "break", brkFunc },
    { 4018, "unused#18" },
    { 4019, "lseek", lseekFunc },
    { 4020, "getpid", getpidFunc },
    { 4021, "mount" },
    { 4022, "umount" },
    { 4023, "setuid", ignoreFunc },
    { 4024, "getuid", getuidFunc },
    { 4025, "stime" },
    { 4026, "ptrace" },
    { 4027, "alarm" },
    { 4028, "unused#28" },
    { 4029, "pause" },
    { 4030, "utime" },
    { 4031, "stty" },
    { 4032, "gtty" },
    { 4033, "access" },
    { 4034, "nice" },
    { 4035, "ftime" },
    { 4036, "sync" },
    { 4037, "kill" },
    { 4038, "rename" },
    { 4039, "mkdir", mkdirFunc },
    { 4040, "rmdir" },
    { 4041, "dup" },
    { 4042, "pipe", pipePseudoFunc },
    { 4043, "times" },
    { 4044, "prof" },
    { 4045, "brk", brkFunc },
    { 4046, "setgid" },
    { 4047, "getgid", getgidFunc },
    { 4048, "signal", ignoreFunc },
    { 4049, "geteuid", geteuidFunc },
    { 4050, "getegid", getegidFunc },
    { 4051, "acct" },
    { 4052, "umount2" },
    { 4053, "lock" },
    { 4054, "ioctl", ioctlFunc<MipsLinux> },
    { 4055, "fcntl", fcntlFunc },
    { 4056, "mpx" },
    { 4057, "setpgid" },
    { 4058, "ulimit" },
    { 4059, "unused#59" },
    { 4060, "umask", umaskFunc },
    { 4061, "chroot" },
    { 4062, "ustat" },
    { 4063, "dup2" },
    { 4064, "getppid", getpagesizeFunc },
    { 4065, "getpgrp" },
    { 4066, "setsid" },
    { 4067, "sigaction" },
    { 4068, "sgetmask" },
    { 4069, "ssetmask" },
    { 4070, "setreuid" },
    { 4071, "setregid" },
    { 4072, "sigsuspend" },
    { 4073, "sigpending" },
    { 4074, "sethostname", ignoreFunc },
    { 4075, "setrlimit" },
    { 4076, "getrlimit" },
    { 4077, "getrusage", getrusageFunc<MipsLinux> },
    { 4078, "gettimeofday" },
    { 4079, "settimeofday" },
    { 4080, "getgroups" },
    { 4081, "setgroups" },
    { 4082, "reserved#82" },
    { 4083, "symlink" },
    { 4084, "unused#84" },
    { 4085, "readlink", readlinkFunc<MipsLinux> },
    { 4086, "uselib" },
    { 4087, "swapon", gethostnameFunc },
    { 4088, "reboot" },
    { 4089, "readdir" },
    { 4090, "mmap", mmapFunc<MipsLinux> },
    { 4091, "munmap",munmapFunc<MipsLinux> },
    { 4092, "truncate", truncateFunc<MipsLinux> },
    { 4093, "ftruncate", ftruncateFunc<MipsLinux> },
    { 4094, "fchmod", fchmodFunc<MipsLinux> },
    { 4095, "fchown", fchownFunc },
    { 4096, "getpriority" },
    { 4097, "setpriority" },
    { 4098, "profil" },
    { 4099, "statfs" },
    { 4100, "fstatfs" },
    { 4101, "ioperm" },
    { 4102, "socketcall" },
    { 4103, "syslog" },
    { 4104, "setitimer" },
    { 4105, "getitimer" },
    { 4106, "stat",  statFunc<MipsLinux> },
    { 4107, "lstat" },
    { 4108, "fstat", fstatFunc<MipsLinux> },
    { 4109, "unused#109" },
    { 4110, "iopl" },
    { 4111, "vhangup" },
    { 4112, "idle", ignoreFunc },
    { 4113, "vm86" },
    { 4114, "wait4" },
    { 4115, "swapoff" },
    { 4116, "sysinfo", sysinfoFunc<MipsLinux> },
    { 4117, "ipc" },
    { 4118, "fsync" },
    { 4119, "sigreturn" },
    { 4120, "clone" },
    { 4121, "setdomainname" },
    { 4122, "uname", unameFunc },
    { 4123, "modify_ldt" },
    { 4124, "adjtimex" },
    { 4125, "mprotect", ignoreFunc },
    { 4126, "sigprocmask" },
    { 4127, "create_module" },
    { 4128, "init_module" },
    { 4129, "delete_module" },
    { 4130, "get_kernel_syms" },
    { 4131, "quotactl" },
    { 4132, "getpgid" },
    { 4133, "fchdir" },
    { 4134, "bdflush" },
    { 4135, "sysfs" },
    { 4136, "personality" },
    { 4137, "afs_syscall" },
    { 4138, "setfsuid" },
    { 4139, "setfsgid" },
    { 4140, "llseek" },
    { 4141, "getdents" },
    { 4142, "newselect" },
    { 4143, "flock" },
    { 4144, "msync" },
    { 4145, "readv" },
    { 4146, "writev", writevFunc<MipsLinux> },
    { 4147, "cacheflush" },
    { 4148, "cachectl" },
    { 4149, "sysmips" },
    { 4150, "unused#150" },
    { 4151, "getsid" },
    { 4152, "fdatasync" },
    { 4153, "sysctl", ignoreFunc },
    { 4154, "mlock" },
    { 4155, "munlock" },
    { 4156, "mlockall" },
    { 4157, "munlockall" },
    { 4158, "sched_setparam" },
    { 4159, "sched_getparam" },
    { 4160, "sched_setscheduler" },
    { 4161, "sched_getscheduler" },
    { 4162, "sched_yield" },
    { 4163, "sched_get_prioritymax" },
    { 4164, "sched_get_priority_min" },
    { 4165, "sched_rr_get_interval" },
    { 4166, "nanosleep" },
    { 4167, "mremap", mremapFunc<MipsLinux> },
    { 4168, "accept" },
    { 4169, "bind" },
    { 4170, "connect" },
    { 4171, "getpeername" },
    { 4172, "getsockname" },
    { 4173, "getsockopt" },
    { 4174, "listen" },
    { 4175, "recv" },
    { 4176, "recvmsg" },
    { 4177, "send" },
    { 4178, "sendmsg", ignoreFunc },
    { 4179, "sendto" },
    { 4180, "setsockopt" },
    { 4181, "shutdown" },
    { 4182, "unknown #182" },
    { 4183, "socket", ignoreFunc },
    { 4184, "socketpair" },
    { 4185, "setresuid" },
    { 4186, "getresuid" },
    { 4187, "query_module" },
    { 4188, "poll" },
    { 4189, "nfsservctl" },
    { 4190, "setresgid" },
    { 4191, "getresgid" },
    { 4192, "prctl" },
    { 4193, "rt_sigreturn" },
    { 4194, "rt_sigaction" },
    { 4195, "rt_sigprocmask" },
    { 4196, "rt_sigpending" },
    { 4197, "rt_sigtimedwait" },
    { 4198, "rt_sigqueueinfo", ignoreFunc },
    { 4199, "rt_sigsuspend" },
    { 4200, "pread64" },
    { 4201, "pwrite64" },
    { 4202, "chown" },
    { 4203, "getcwd", getcwdFunc },
    { 4204, "capget" },
    { 4205, "capset" },
    { 4206, "sigalstack" },
    { 4207, "sendfile" },
    { 4208, "getpmsg" },
    { 4209, "putpmsg" },
    { 4210, "mmap2" },
    { 4211, "truncate64" },
    { 4212, "ftruncate64" },
    { 4213, "stat64" },
    { 4214, "lstat64", lstat64Func<MipsLinux> },
    { 4215, "fstat64", fstat64Func<MipsLinux> },
    { 4216, "pivot_root" },
    { 4217, "mincore" },
    { 4218, "madvise" },
    { 4219, "getdents64" },
    { 4220, "fcntl64", fcntl64Func },
    { 4221, "reserved#221" },
    { 4222, "gettid" },
    { 4223, "readahead" },
    { 4224, "setxattr" },
    { 4225, "lsetxattr" },
    { 4226, "fsetxattr" },
    { 4227, "getxattr" },
    { 4228, "lgetxattr" },
    { 4229, "fgetxattr" },
    { 4230, "listxattr" },
    { 4231, "llistxattr" },
    { 4232, "flistxattr" },
    { 4233, "removexattr" },
    { 4234, "lremovexattr" },
    { 4235, "fremovexattr", ignoreFunc },
    { 4236, "tkill" },
    { 4237, "sendfile64" },
    { 4238, "futex" },
    { 4239, "sched_setaffinity" },
    { 4240, "sched_getaffinity" },
    { 4241, "io_setup" },
    { 4242, "io_destroy" },
    { 4243, "io_getevents" },
    { 4244, "io_submit" },
    { 4245, "io_cancel" },
    { 4246, "exit_group", exitFunc },
    { 4247, "lookup_dcookie" },
    { 4248, "epoll_create" },
    { 4249, "epoll_ctl" },
    { 4250, "epoll_wait" },
    { 4251, "remap_file_pages" },
    { 4252, "set_tid_address" },
    { 4253, "restart_syscall" },
    { 4254, "fadvise64" },
    { 4255, "statfs64" },
    { 4256, "fstafs64" },
    { 4257, "timer_create", sys_getsysinfoFunc },
    { 4258, "timer_settime", sys_setsysinfoFunc },
    { 4259, "timer_gettime" },
    { 4260, "timer_getoverrun" },
    { 4261, "timer_delete" },
    { 4262, "clock_settime" },
    { 4263, "clock_gettime" },
    { 4264, "clock_getres" },
    { 4265, "clock_nanosleep" },
    { 4266, "tgkill" },
    { 4267, "utimes" },
    { 4268, "mbind" },
    { 4269, "get_mempolicy" },
    { 4270, "set_mempolicy" },
    { 4271, "mq_open" },
    { 4272, "mq_unlink" },
    { 4273, "mq_timedsend" },
    { 4274, "mq_timedreceive" },
    { 4275, "mq_notify" },
    { 4276, "mq_getsetattr" },
    { 4277, "vserver" },
    { 4278, "waitid" },
    { 4279, "unknown #279" },
    { 4280, "add_key" },
    { 4281, "request_key" },
    { 4282, "keyctl" },
    { 4283, "set_thread_area", setThreadAreaFunc },
    { 4284, "inotify_init" },
    { 4285, "inotify_add_watch" },
    { 4286, "inotify_rm_watch" },
    { 4287, "migrate_pages" },
    { 4288, "openat" },
    { 4289, "mkdirat" },
    { 4290, "mknodat" },
    { 4291, "fchownat" },
    { 4292, "futimesat" },
    { 4293, "fstatat64" },
    { 4294, "unlinkat" },
    { 4295, "renameat" },
    { 4296, "linkat" },
    { 4297, "symlinkat" },
    { 4298, "readlinkat" },
    { 4299, "fchmodat" },
    { 4300, "faccessat" },
    { 4301, "pselect6" },
    { 4302, "ppoll" },
    { 4303, "unshare" },
    { 4304, "splice" },
    { 4305, "sync_file_range" },
    { 4306, "tee" },
    { 4307, "vmsplice" },
    { 4308, "move_pages" },
    { 4309, "set_robust_list" },
    { 4310, "get_robust_list" },
    { 4311, "kexec_load" },
    { 4312, "getcpu" },
    { 4313, "epoll_pwait" },
    { 4314, "ioprio_set" },
    { 4315, "ioprio_get" },
    { 4316, "utimensat" },
    { 4317, "signalfd" },
    { 4318, "timerfd" },
    { 4319, "eventfd" }
};

} // namespace MipsISA
} // namespace gem5
