From 3886c4a8f2e1bfe17cbf7a5a76ba0fc978c6bb48 Mon Sep 17 00:00:00 2001 From: Brandon Potter Date: Wed, 9 Nov 2016 14:27:40 -0600 Subject: syscall_emul: [patch 5/22] remove LiveProcess class and use Process instead The EIOProcess class was removed recently and it was the only other class which derived from Process. Since every Process invocation is also a LiveProcess invocation, it makes sense to simplify the organization by combining the fields from LiveProcess into Process. --- src/arch/sparc/faults.cc | 20 ++++++++---------- src/arch/sparc/linux/process.cc | 12 +++++------ src/arch/sparc/linux/process.hh | 10 ++++----- src/arch/sparc/linux/syscalls.cc | 8 +++---- src/arch/sparc/process.cc | 44 +++++++++++++++++++-------------------- src/arch/sparc/process.hh | 23 ++++++++++---------- src/arch/sparc/solaris/process.cc | 8 +++---- src/arch/sparc/solaris/process.hh | 4 ++-- 8 files changed, 63 insertions(+), 66 deletions(-) (limited to 'src/arch/sparc') diff --git a/src/arch/sparc/faults.cc b/src/arch/sparc/faults.cc index e2ff87726..6c3b35c9a 100644 --- a/src/arch/sparc/faults.cc +++ b/src/arch/sparc/faults.cc @@ -768,12 +768,11 @@ SpillNNormal::invoke(ThreadContext *tc, const StaticInstPtr &inst) Process *p = tc->getProcessPtr(); - //XXX This will only work in faults from a SparcLiveProcess - SparcLiveProcess *lp = dynamic_cast(p); - assert(lp); + SparcProcess *sp = dynamic_cast(p); + assert(sp); // Then adjust the PC and NPC - tc->pcState(lp->readSpillStart()); + tc->pcState(sp->readSpillStart()); } void @@ -788,12 +787,11 @@ FillNNormal::invoke(ThreadContext *tc, const StaticInstPtr &inst) Process *p = tc->getProcessPtr(); - //XXX This will only work in faults from a SparcLiveProcess - SparcLiveProcess *lp = dynamic_cast(p); - assert(lp); + SparcProcess *sp = dynamic_cast(p); + assert(sp); // Then adjust the PC and NPC - tc->pcState(lp->readFillStart()); + tc->pcState(sp->readFillStart()); } void @@ -810,10 +808,10 @@ TrapInstruction::invoke(ThreadContext *tc, const StaticInstPtr &inst) Process *p = tc->getProcessPtr(); - SparcLiveProcess *lp = dynamic_cast(p); - assert(lp); + SparcProcess *sp = dynamic_cast(p); + assert(sp); - lp->handleTrap(_n, tc); + sp->handleTrap(_n, tc); // We need to explicitly advance the pc, since that's not done for us // on a faulting instruction diff --git a/src/arch/sparc/linux/process.cc b/src/arch/sparc/linux/process.cc index a95498ea0..0f72c69c7 100644 --- a/src/arch/sparc/linux/process.cc +++ b/src/arch/sparc/linux/process.cc @@ -60,9 +60,9 @@ SparcLinuxProcess::getDesc32(int callnum) return &syscall32Descs[callnum]; } -Sparc32LinuxProcess::Sparc32LinuxProcess(LiveProcessParams * params, +Sparc32LinuxProcess::Sparc32LinuxProcess(ProcessParams * params, ObjectFile *objFile) - : Sparc32LiveProcess(params, objFile) + : Sparc32Process(params, objFile) {} void Sparc32LinuxProcess::handleTrap(int trapNum, ThreadContext *tc) @@ -72,13 +72,13 @@ void Sparc32LinuxProcess::handleTrap(int trapNum, ThreadContext *tc) tc->syscall(tc->readIntReg(1)); break; default: - SparcLiveProcess::handleTrap(trapNum, tc); + SparcProcess::handleTrap(trapNum, tc); } } -Sparc64LinuxProcess::Sparc64LinuxProcess(LiveProcessParams * params, +Sparc64LinuxProcess::Sparc64LinuxProcess(ProcessParams * params, ObjectFile *objFile) - : Sparc64LiveProcess(params, objFile) + : Sparc64Process(params, objFile) {} void Sparc64LinuxProcess::handleTrap(int trapNum, ThreadContext *tc) @@ -89,6 +89,6 @@ void Sparc64LinuxProcess::handleTrap(int trapNum, ThreadContext *tc) tc->syscall(tc->readIntReg(1)); break; default: - SparcLiveProcess::handleTrap(trapNum, tc); + SparcProcess::handleTrap(trapNum, tc); } } diff --git a/src/arch/sparc/linux/process.hh b/src/arch/sparc/linux/process.hh index 022b1176d..1c38576fd 100644 --- a/src/arch/sparc/linux/process.hh +++ b/src/arch/sparc/linux/process.hh @@ -58,11 +58,11 @@ class SparcLinuxProcess }; /// A process with emulated SPARC/Linux syscalls. -class Sparc32LinuxProcess : public SparcLinuxProcess, public Sparc32LiveProcess +class Sparc32LinuxProcess : public SparcLinuxProcess, public Sparc32Process { public: /// Constructor. - Sparc32LinuxProcess(LiveProcessParams * params, ObjectFile *objFile); + Sparc32LinuxProcess(ProcessParams * params, ObjectFile *objFile); SyscallDesc* getDesc(int callnum) @@ -74,11 +74,11 @@ class Sparc32LinuxProcess : public SparcLinuxProcess, public Sparc32LiveProcess }; /// A process with emulated 32 bit SPARC/Linux syscalls. -class Sparc64LinuxProcess : public SparcLinuxProcess, public Sparc64LiveProcess +class Sparc64LinuxProcess : public SparcLinuxProcess, public Sparc64Process { public: /// Constructor. - Sparc64LinuxProcess(LiveProcessParams * params, ObjectFile *objFile); + Sparc64LinuxProcess(ProcessParams * params, ObjectFile *objFile); SyscallDesc* getDesc(int callnum) @@ -90,7 +90,7 @@ class Sparc64LinuxProcess : public SparcLinuxProcess, public Sparc64LiveProcess }; SyscallReturn getresuidFunc(SyscallDesc *desc, int num, - LiveProcess *p, ThreadContext *tc); + Process *p, ThreadContext *tc); } // namespace SparcISA #endif // __SPARC_LINUX_PROCESS_HH__ diff --git a/src/arch/sparc/linux/syscalls.cc b/src/arch/sparc/linux/syscalls.cc index 33140f1b8..6825b2abb 100644 --- a/src/arch/sparc/linux/syscalls.cc +++ b/src/arch/sparc/linux/syscalls.cc @@ -32,15 +32,15 @@ #include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" -class LiveProcess; +class Process; class ThreadContext; namespace SparcISA { /// Target uname() handler. static SyscallReturn -unameFunc(SyscallDesc *desc, int callnum, LiveProcess *process, - ThreadContext *tc) +unameFunc(SyscallDesc *desc, int callnum, Process *process, + ThreadContext *tc) { int index = 0; TypedBufferArg name(process->getSyscallArg(tc, index)); @@ -58,7 +58,7 @@ unameFunc(SyscallDesc *desc, int callnum, LiveProcess *process, SyscallReturn -getresuidFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc) +getresuidFunc(SyscallDesc *desc, int num, Process *p, ThreadContext *tc) { const IntReg id = htog(100); int index = 0; diff --git a/src/arch/sparc/process.cc b/src/arch/sparc/process.cc index 75c2529ef..87790e9c3 100644 --- a/src/arch/sparc/process.cc +++ b/src/arch/sparc/process.cc @@ -52,9 +52,9 @@ using namespace SparcISA; static const int FirstArgumentReg = 8; -SparcLiveProcess::SparcLiveProcess(LiveProcessParams * params, - ObjectFile *objFile, Addr _StackBias) - : LiveProcess(params, objFile), StackBias(_StackBias) +SparcProcess::SparcProcess(ProcessParams * params, ObjectFile *objFile, + Addr _StackBias) + : Process(params, objFile), StackBias(_StackBias) { // XXX all the below need to be updated for SPARC - Ali @@ -70,7 +70,7 @@ SparcLiveProcess::SparcLiveProcess(LiveProcessParams * params, } void -SparcLiveProcess::handleTrap(int trapNum, ThreadContext *tc) +SparcProcess::handleTrap(int trapNum, ThreadContext *tc) { PCState pc = tc->pcState(); switch (trapNum) { @@ -111,9 +111,9 @@ SparcLiveProcess::handleTrap(int trapNum, ThreadContext *tc) } void -SparcLiveProcess::initState() +SparcProcess::initState() { - LiveProcess::initState(); + Process::initState(); ThreadContext *tc = system->getThreadContext(contextIds[0]); // From the SPARC ABI @@ -160,9 +160,9 @@ SparcLiveProcess::initState() } void -Sparc32LiveProcess::initState() +Sparc32Process::initState() { - SparcLiveProcess::initState(); + SparcProcess::initState(); ThreadContext *tc = system->getThreadContext(contextIds[0]); // The process runs in user mode with 32 bit addresses @@ -175,9 +175,9 @@ Sparc32LiveProcess::initState() } void -Sparc64LiveProcess::initState() +Sparc64Process::initState() { - SparcLiveProcess::initState(); + SparcProcess::initState(); ThreadContext *tc = system->getThreadContext(contextIds[0]); // The process runs in user mode @@ -190,7 +190,7 @@ Sparc64LiveProcess::initState() template void -SparcLiveProcess::argsInit(int pageSize) +SparcProcess::argsInit(int pageSize) { int intSize = sizeof(IntType); @@ -419,9 +419,9 @@ SparcLiveProcess::argsInit(int pageSize) } void -Sparc64LiveProcess::argsInit(int intSize, int pageSize) +Sparc64Process::argsInit(int intSize, int pageSize) { - SparcLiveProcess::argsInit(pageSize); + SparcProcess::argsInit(pageSize); // Stuff the trap handlers into the process address space initVirtMem.writeBlob(fillStart, @@ -431,9 +431,9 @@ Sparc64LiveProcess::argsInit(int intSize, int pageSize) } void -Sparc32LiveProcess::argsInit(int intSize, int pageSize) +Sparc32Process::argsInit(int intSize, int pageSize) { - SparcLiveProcess::argsInit(pageSize); + SparcProcess::argsInit(pageSize); // Stuff the trap handlers into the process address space initVirtMem.writeBlob(fillStart, @@ -442,7 +442,7 @@ Sparc32LiveProcess::argsInit(int intSize, int pageSize) (uint8_t*)spillHandler32, sizeof(MachInst) * numSpillInsts); } -void Sparc32LiveProcess::flushWindows(ThreadContext *tc) +void Sparc32Process::flushWindows(ThreadContext *tc) { IntReg Cansave = tc->readIntReg(NumIntArchRegs + 3); IntReg Canrestore = tc->readIntReg(NumIntArchRegs + 4); @@ -477,7 +477,7 @@ void Sparc32LiveProcess::flushWindows(ThreadContext *tc) } void -Sparc64LiveProcess::flushWindows(ThreadContext *tc) +Sparc64Process::flushWindows(ThreadContext *tc) { IntReg Cansave = tc->readIntReg(NumIntArchRegs + 3); IntReg Canrestore = tc->readIntReg(NumIntArchRegs + 4); @@ -512,35 +512,35 @@ Sparc64LiveProcess::flushWindows(ThreadContext *tc) } IntReg -Sparc32LiveProcess::getSyscallArg(ThreadContext *tc, int &i) +Sparc32Process::getSyscallArg(ThreadContext *tc, int &i) { assert(i < 6); return bits(tc->readIntReg(FirstArgumentReg + i++), 31, 0); } void -Sparc32LiveProcess::setSyscallArg(ThreadContext *tc, int i, IntReg val) +Sparc32Process::setSyscallArg(ThreadContext *tc, int i, IntReg val) { assert(i < 6); tc->setIntReg(FirstArgumentReg + i, bits(val, 31, 0)); } IntReg -Sparc64LiveProcess::getSyscallArg(ThreadContext *tc, int &i) +Sparc64Process::getSyscallArg(ThreadContext *tc, int &i) { assert(i < 6); return tc->readIntReg(FirstArgumentReg + i++); } void -Sparc64LiveProcess::setSyscallArg(ThreadContext *tc, int i, IntReg val) +Sparc64Process::setSyscallArg(ThreadContext *tc, int i, IntReg val) { assert(i < 6); tc->setIntReg(FirstArgumentReg + i, val); } void -SparcLiveProcess::setSyscallReturn(ThreadContext *tc, SyscallReturn sysret) +SparcProcess::setSyscallReturn(ThreadContext *tc, SyscallReturn sysret) { // check for error condition. SPARC syscall convention is to // indicate success/failure in reg the carry bit of the ccr diff --git a/src/arch/sparc/process.hh b/src/arch/sparc/process.hh index 23a1a8c52..69ea6b41f 100644 --- a/src/arch/sparc/process.hh +++ b/src/arch/sparc/process.hh @@ -40,9 +40,8 @@ #include "sim/process.hh" class ObjectFile; -class System; -class SparcLiveProcess : public LiveProcess +class SparcProcess : public Process { protected: @@ -51,8 +50,8 @@ class SparcLiveProcess : public LiveProcess // The locations of the fill and spill handlers Addr fillStart, spillStart; - SparcLiveProcess(LiveProcessParams * params, - ObjectFile *objFile, Addr _StackBias); + SparcProcess(ProcessParams * params, ObjectFile *objFile, + Addr _StackBias); void initState(); @@ -71,12 +70,12 @@ class SparcLiveProcess : public LiveProcess void setSyscallReturn(ThreadContext *tc, SyscallReturn return_value); }; -class Sparc32LiveProcess : public SparcLiveProcess +class Sparc32Process : public SparcProcess { protected: - Sparc32LiveProcess(LiveProcessParams * params, ObjectFile *objFile) : - SparcLiveProcess(params, objFile, 0) + Sparc32Process(ProcessParams * params, ObjectFile *objFile) + : SparcProcess(params, objFile, 0) { // Set up stack. On SPARC Linux, stack goes from the top of memory // downward, less the hole for the kernel address space. @@ -96,17 +95,17 @@ class Sparc32LiveProcess : public SparcLiveProcess SparcISA::IntReg getSyscallArg(ThreadContext *tc, int &i); /// Explicitly import the otherwise hidden getSyscallArg - using LiveProcess::getSyscallArg; + using Process::getSyscallArg; void setSyscallArg(ThreadContext *tc, int i, SparcISA::IntReg val); }; -class Sparc64LiveProcess : public SparcLiveProcess +class Sparc64Process : public SparcProcess { protected: - Sparc64LiveProcess(LiveProcessParams * params, ObjectFile *objFile) : - SparcLiveProcess(params, objFile, 2047) + Sparc64Process(ProcessParams * params, ObjectFile *objFile) + : SparcProcess(params, objFile, 2047) { // Set up stack. On SPARC Linux, stack goes from the top of memory // downward, less the hole for the kernel address space. @@ -126,7 +125,7 @@ class Sparc64LiveProcess : public SparcLiveProcess SparcISA::IntReg getSyscallArg(ThreadContext *tc, int &i); /// Explicitly import the otherwise hidden getSyscallArg - using LiveProcess::getSyscallArg; + using Process::getSyscallArg; void setSyscallArg(ThreadContext *tc, int i, SparcISA::IntReg val); }; diff --git a/src/arch/sparc/solaris/process.cc b/src/arch/sparc/solaris/process.cc index b26d37fe7..1afa35398 100644 --- a/src/arch/sparc/solaris/process.cc +++ b/src/arch/sparc/solaris/process.cc @@ -45,7 +45,7 @@ using namespace SparcISA; /// Target uname() handler. static SyscallReturn -unameFunc(SyscallDesc *desc, int callnum, LiveProcess *process, +unameFunc(SyscallDesc *desc, int callnum, Process *process, ThreadContext *tc) { int index = 0; @@ -322,9 +322,9 @@ SyscallDesc SparcSolarisProcess::syscallDescs[] = { /* 255 */ SyscallDesc("umount2", unimplementedFunc) }; -SparcSolarisProcess::SparcSolarisProcess(LiveProcessParams * params, - ObjectFile *objFile) - : Sparc64LiveProcess(params, objFile), +SparcSolarisProcess::SparcSolarisProcess(ProcessParams * params, + ObjectFile *objFile) + : Sparc64Process(params, objFile), Num_Syscall_Descs(sizeof(syscallDescs) / sizeof(SyscallDesc)) { // The sparc syscall table must be <= 284 entries because that is all there diff --git a/src/arch/sparc/solaris/process.hh b/src/arch/sparc/solaris/process.hh index 2cf56f6ba..660802cef 100644 --- a/src/arch/sparc/solaris/process.hh +++ b/src/arch/sparc/solaris/process.hh @@ -38,11 +38,11 @@ namespace SparcISA { /// A process with emulated SPARC/Solaris syscalls. -class SparcSolarisProcess : public Sparc64LiveProcess +class SparcSolarisProcess : public Sparc64Process { public: /// Constructor. - SparcSolarisProcess(LiveProcessParams * params, ObjectFile *objFile); + SparcSolarisProcess(ProcessParams * params, ObjectFile *objFile); virtual SyscallDesc* getDesc(int callnum); -- cgit v1.2.3