Processes: Make getting and setting system call arguments part of a process object.

This commit is contained in:
Gabe Black
2009-02-27 09:22:14 -08:00
parent 60aab03e85
commit 9a000c5173
47 changed files with 401 additions and 726 deletions

View File

@@ -1281,32 +1281,6 @@ InOrderCPU::syscall(int64_t callnum, int tid)
nonSpecInstActive[tid] = false;
}
IntReg
InOrderCPU::getSyscallArg(int idx, int tid)
{
return readIntReg(ArgumentReg0 + idx, tid);
}
void
InOrderCPU::setSyscallArg(int idx, IntReg val, int tid)
{
setIntReg(ArgumentReg0 + idx, val, tid);
}
void
InOrderCPU::setSyscallReturn(SyscallReturn return_value, int tid)
{
if (return_value.successful()) {
// no error
setIntReg(SyscallSuccessReg, 0, tid);
setIntReg(ReturnValueReg, return_value.value(), tid);
} else {
// got an error, return details
setIntReg(SyscallSuccessReg, (IntReg) -1, tid);
setIntReg(ReturnValueReg, -return_value.value(), tid);
}
}
Fault
InOrderCPU::read(DynInstPtr inst)
{

View File

@@ -511,15 +511,6 @@ class InOrderCPU : public BaseCPU
/** Executes a syscall.*/
void syscall(int64_t callnum, int tid);
/** Gets a syscall argument. */
IntReg getSyscallArg(int i, int tid);
/** Used to shift args for indirect syscall. */
void setSyscallArg(int i, IntReg val, int tid);
/** Sets the return value of a syscall. */
void setSyscallReturn(SyscallReturn return_value, int tid);
public:
/** Per-Thread List of all the instructions in flight. */
std::list<DynInstPtr> instList[ThePipeline::MaxThreads];

View File

@@ -262,21 +262,3 @@ InOrderThreadContext::setMiscReg(int misc_reg, const MiscReg &val)
{
cpu->setMiscReg(misc_reg, val, thread->readTid());
}
TheISA::IntReg
InOrderThreadContext::getSyscallArg(int i)
{
return cpu->getSyscallArg(i, thread->readTid());
}
void
InOrderThreadContext::setSyscallArg(int i, IntReg val)
{
cpu->setSyscallArg(i, val, thread->readTid());
}
void
InOrderThreadContext::setSyscallReturn(SyscallReturn return_value)
{
cpu->setSyscallReturn(return_value, thread->readTid());
}

View File

@@ -236,15 +236,6 @@ class InOrderThreadContext : public ThreadContext
* misspeculating, this is set as false. */
virtual bool misspeculating() { return false; }
/** Gets a syscall argument by index. */
virtual IntReg getSyscallArg(int i);
/** Sets a syscall argument. */
virtual void setSyscallArg(int i, IntReg val);
/** Sets the syscall return value. */
virtual void setSyscallReturn(SyscallReturn return_value);
/** Executes a syscall in SE mode. */
virtual void syscall(int64_t callnum)
{ return cpu->syscall(callnum, thread->readTid()); }