process.cc revision 11794
111723Sar4jc@virginia.edu/* 211723Sar4jc@virginia.edu * Copyright (c) 2005 The Regents of The University of Michigan 311723Sar4jc@virginia.edu * Copyright (c) 2007 MIPS Technologies, Inc. 411723Sar4jc@virginia.edu * Copyright (c) 2016 The University of Virginia 511723Sar4jc@virginia.edu * All rights reserved. 611723Sar4jc@virginia.edu * 711723Sar4jc@virginia.edu * Redistribution and use in source and binary forms, with or without 811723Sar4jc@virginia.edu * modification, are permitted provided that the following conditions are 911723Sar4jc@virginia.edu * met: redistributions of source code must retain the above copyright 1011723Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer; 1111723Sar4jc@virginia.edu * redistributions in binary form must reproduce the above copyright 1211723Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer in the 1311723Sar4jc@virginia.edu * documentation and/or other materials provided with the distribution; 1411723Sar4jc@virginia.edu * neither the name of the copyright holders nor the names of its 1511723Sar4jc@virginia.edu * contributors may be used to endorse or promote products derived from 1611723Sar4jc@virginia.edu * this software without specific prior written permission. 1711723Sar4jc@virginia.edu * 1811723Sar4jc@virginia.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1911723Sar4jc@virginia.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2011723Sar4jc@virginia.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2111723Sar4jc@virginia.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2211723Sar4jc@virginia.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2311723Sar4jc@virginia.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2411723Sar4jc@virginia.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2511723Sar4jc@virginia.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2611723Sar4jc@virginia.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2711723Sar4jc@virginia.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2811723Sar4jc@virginia.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2911723Sar4jc@virginia.edu * 3011723Sar4jc@virginia.edu * Authors: Gabe Black 3111723Sar4jc@virginia.edu * Korey Sewell 3211723Sar4jc@virginia.edu * Alec Roelke 3311723Sar4jc@virginia.edu */ 3411723Sar4jc@virginia.edu 3511723Sar4jc@virginia.edu#include "arch/riscv/linux/process.hh" 3611723Sar4jc@virginia.edu 3711723Sar4jc@virginia.edu#include <map> 3811723Sar4jc@virginia.edu 3911723Sar4jc@virginia.edu#include "arch/riscv/isa_traits.hh" 4011723Sar4jc@virginia.edu#include "arch/riscv/linux/linux.hh" 4111723Sar4jc@virginia.edu#include "base/trace.hh" 4211723Sar4jc@virginia.edu#include "cpu/thread_context.hh" 4311723Sar4jc@virginia.edu#include "debug/SyscallVerbose.hh" 4411723Sar4jc@virginia.edu#include "kern/linux/linux.hh" 4511723Sar4jc@virginia.edu#include "sim/eventq.hh" 4611723Sar4jc@virginia.edu#include "sim/process.hh" 4711794Sbrandon.potter@amd.com#include "sim/syscall_desc.hh" 4811723Sar4jc@virginia.edu#include "sim/syscall_emul.hh" 4911723Sar4jc@virginia.edu#include "sim/system.hh" 5011723Sar4jc@virginia.edu 5111723Sar4jc@virginia.eduusing namespace std; 5211723Sar4jc@virginia.eduusing namespace RiscvISA; 5311723Sar4jc@virginia.edu 5411723Sar4jc@virginia.edu/// Target uname() handler. 5511723Sar4jc@virginia.edustatic SyscallReturn 5611723Sar4jc@virginia.eduunameFunc(SyscallDesc *desc, int callnum, LiveProcess *process, 5711723Sar4jc@virginia.edu ThreadContext *tc) 5811723Sar4jc@virginia.edu{ 5911723Sar4jc@virginia.edu int index = 0; 6011723Sar4jc@virginia.edu TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index)); 6111723Sar4jc@virginia.edu 6211723Sar4jc@virginia.edu strcpy(name->sysname, "Linux"); 6311723Sar4jc@virginia.edu strcpy(name->nodename,"sim.gem5.org"); 6411723Sar4jc@virginia.edu strcpy(name->release, "3.0.0"); 6511723Sar4jc@virginia.edu strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003"); 6611723Sar4jc@virginia.edu strcpy(name->machine, "riscv"); 6711723Sar4jc@virginia.edu 6811723Sar4jc@virginia.edu name.copyOut(tc->getMemProxy()); 6911723Sar4jc@virginia.edu return 0; 7011723Sar4jc@virginia.edu} 7111723Sar4jc@virginia.edu 7211723Sar4jc@virginia.edustd::map<int, SyscallDesc> RiscvLinuxProcess::syscallDescs = { 7311723Sar4jc@virginia.edu {17, SyscallDesc("getcwd", getcwdFunc)}, 7411723Sar4jc@virginia.edu {23, SyscallDesc("dup", dupFunc)}, 7511728Sar4jc@virginia.edu {25, SyscallDesc("fcntl", fcntl64Func)}, 7611723Sar4jc@virginia.edu {29, SyscallDesc("ioctl", ioctlFunc<RiscvLinux>)}, 7711723Sar4jc@virginia.edu {34, SyscallDesc("mkdirat", unimplementedFunc)}, 7811723Sar4jc@virginia.edu {35, SyscallDesc("unlinkat", unlinkatFunc<RiscvLinux>)}, 7911723Sar4jc@virginia.edu {37, SyscallDesc("linkat", unimplementedFunc)}, 8011723Sar4jc@virginia.edu {38, SyscallDesc("renameat", renameatFunc<RiscvLinux>)}, 8111728Sar4jc@virginia.edu {46, SyscallDesc("ftruncate", ftruncate64Func)}, 8211723Sar4jc@virginia.edu {48, SyscallDesc("faccessat", faccessatFunc<RiscvLinux>)}, 8311723Sar4jc@virginia.edu {49, SyscallDesc("chdir", unimplementedFunc)}, 8411723Sar4jc@virginia.edu {56, SyscallDesc("openat", openatFunc<RiscvLinux>)}, 8511723Sar4jc@virginia.edu {57, SyscallDesc("close", closeFunc)}, 8611723Sar4jc@virginia.edu {61, SyscallDesc("getdents", unimplementedFunc)}, 8711723Sar4jc@virginia.edu {62, SyscallDesc("lseek", lseekFunc)}, 8811723Sar4jc@virginia.edu {63, SyscallDesc("read", readFunc)}, 8911723Sar4jc@virginia.edu {64, SyscallDesc("write", writeFunc)}, 9011723Sar4jc@virginia.edu {66, SyscallDesc("writev", writevFunc<RiscvLinux>)}, 9111723Sar4jc@virginia.edu {67, SyscallDesc("pread", unimplementedFunc)}, 9211728Sar4jc@virginia.edu {68, SyscallDesc("pwrite", pwrite64Func<RiscvLinux>)}, 9311723Sar4jc@virginia.edu {78, SyscallDesc("readlinkat", readlinkatFunc<RiscvLinux>)}, 9411728Sar4jc@virginia.edu {79, SyscallDesc("fstatat", fstatat64Func<RiscvLinux>)}, 9511728Sar4jc@virginia.edu {80, SyscallDesc("fstat", fstat64Func<RiscvLinux>)}, 9611723Sar4jc@virginia.edu {93, SyscallDesc("exit", exitFunc)}, 9711723Sar4jc@virginia.edu {94, SyscallDesc("exit_group", exitGroupFunc)}, 9811723Sar4jc@virginia.edu {113, SyscallDesc("clock_gettime", clock_gettimeFunc<RiscvLinux>)}, 9911723Sar4jc@virginia.edu {129, SyscallDesc("kill", unimplementedFunc)}, 10011723Sar4jc@virginia.edu {134, SyscallDesc("rt_sigaction", ignoreFunc, SyscallDesc::WarnOnce)}, 10111723Sar4jc@virginia.edu {135, SyscallDesc("rt_sigprocmask", ignoreFunc, SyscallDesc::WarnOnce)}, 10211723Sar4jc@virginia.edu {153, SyscallDesc("times", timesFunc<RiscvLinux>)}, 10311723Sar4jc@virginia.edu {160, SyscallDesc("uname", unameFunc)}, 10411723Sar4jc@virginia.edu {163, SyscallDesc("getrlimit", getrlimitFunc<RiscvLinux>)}, 10511723Sar4jc@virginia.edu {164, SyscallDesc("setrlimit", ignoreFunc)}, 10611723Sar4jc@virginia.edu {165, SyscallDesc("getrusage", getrusageFunc<RiscvLinux>)}, 10711723Sar4jc@virginia.edu {169, SyscallDesc("gettimeofday", gettimeofdayFunc<RiscvLinux>)}, 10811723Sar4jc@virginia.edu {172, SyscallDesc("getpid", getpidFunc)}, 10911723Sar4jc@virginia.edu {174, SyscallDesc("getuid", getuidFunc)}, 11011723Sar4jc@virginia.edu {175, SyscallDesc("geteuid", geteuidFunc)}, 11111723Sar4jc@virginia.edu {176, SyscallDesc("getgid", getgidFunc)}, 11211723Sar4jc@virginia.edu {177, SyscallDesc("getegid", getegidFunc)}, 11311723Sar4jc@virginia.edu {214, SyscallDesc("brk", brkFunc)}, 11411723Sar4jc@virginia.edu {215, SyscallDesc("munmap", munmapFunc)}, 11511723Sar4jc@virginia.edu {216, SyscallDesc("mremap", mremapFunc<RiscvLinux>)}, 11611723Sar4jc@virginia.edu {222, SyscallDesc("mmap", mmapFunc<RiscvLinux>)}, 11711723Sar4jc@virginia.edu {226, SyscallDesc("mprotect", ignoreFunc)}, 11811723Sar4jc@virginia.edu {1024, SyscallDesc("open", openFunc<RiscvLinux>)}, 11911723Sar4jc@virginia.edu {1025, SyscallDesc("link", unimplementedFunc)}, 12011723Sar4jc@virginia.edu {1026, SyscallDesc("unlink", unlinkFunc)}, 12111723Sar4jc@virginia.edu {1030, SyscallDesc("mkdir", mkdirFunc)}, 12211723Sar4jc@virginia.edu {1033, SyscallDesc("access", accessFunc)}, 12311728Sar4jc@virginia.edu {1038, SyscallDesc("stat", stat64Func<RiscvLinux>)}, 12411728Sar4jc@virginia.edu {1039, SyscallDesc("lstat", lstat64Func<RiscvLinux>)}, 12511723Sar4jc@virginia.edu {1062, SyscallDesc("time", timeFunc<RiscvLinux>)}, 12611723Sar4jc@virginia.edu {2011, SyscallDesc("getmainvars", unimplementedFunc)}, 12711723Sar4jc@virginia.edu}; 12811723Sar4jc@virginia.edu 12911723Sar4jc@virginia.eduRiscvLinuxProcess::RiscvLinuxProcess(LiveProcessParams * params, 13011723Sar4jc@virginia.edu ObjectFile *objFile) : RiscvLiveProcess(params, objFile) 13111723Sar4jc@virginia.edu{} 13211723Sar4jc@virginia.edu 13311723Sar4jc@virginia.eduSyscallDesc* 13411723Sar4jc@virginia.eduRiscvLinuxProcess::getDesc(int callnum) 13511723Sar4jc@virginia.edu{ 13611723Sar4jc@virginia.edu return syscallDescs.find(callnum) != syscallDescs.end() ? 13711723Sar4jc@virginia.edu &syscallDescs.at(callnum) : nullptr; 13811723Sar4jc@virginia.edu} 139