summaryrefslogtreecommitdiff
path: root/src/arch/alpha
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/alpha')
-rw-r--r--src/arch/alpha/isa/decoder.isa2
-rw-r--r--src/arch/alpha/linux/process.cc7
-rw-r--r--src/arch/alpha/linux/process.hh2
3 files changed, 10 insertions, 1 deletions
diff --git a/src/arch/alpha/isa/decoder.isa b/src/arch/alpha/isa/decoder.isa
index 020e43359..abf6fb24a 100644
--- a/src/arch/alpha/isa/decoder.isa
+++ b/src/arch/alpha/isa/decoder.isa
@@ -840,7 +840,7 @@ decode OPCODE default Unknown::unknown() {
exitSimLoop("halt instruction encountered");
}}, IsNonSpeculative);
0x83: callsys({{
- xc->syscall(R0, &fault);
+ xc->syscall(&fault);
}}, IsSerializeAfter, IsNonSpeculative, IsSyscall);
// Read uniq reg into ABI return value register (r0)
0x9e: rduniq({{ R0 = Runiq; }}, IsIprAccess);
diff --git a/src/arch/alpha/linux/process.cc b/src/arch/alpha/linux/process.cc
index 1ac53a5a0..26d5f26cd 100644
--- a/src/arch/alpha/linux/process.cc
+++ b/src/arch/alpha/linux/process.cc
@@ -620,3 +620,10 @@ AlphaLinuxProcess::getDesc(int callnum)
return NULL;
return &syscallDescs[callnum];
}
+
+void
+AlphaLinuxProcess::syscall(ThreadContext *tc, Fault *fault)
+{
+ doSyscall(tc->readIntReg(0), tc, fault);
+}
+
diff --git a/src/arch/alpha/linux/process.hh b/src/arch/alpha/linux/process.hh
index 46c22d288..991ddbd08 100644
--- a/src/arch/alpha/linux/process.hh
+++ b/src/arch/alpha/linux/process.hh
@@ -42,6 +42,8 @@ class AlphaLinuxProcess : public AlphaProcess
/// Constructor.
AlphaLinuxProcess(ProcessParams * params, ObjectFile *objFile);
+ void syscall(ThreadContext *tc, Fault *fault) override;
+
virtual SyscallDesc* getDesc(int callnum);
/// Array of syscall descriptors, indexed by call number.