sparc: Convert SPARC specific syscalls to Guest ABI.
authorGabe Black <gabeblack@google.com>
Thu, 28 Nov 2019 08:04:36 +0000 (00:04 -0800)
committerGabe Black <gabeblack@google.com>
Thu, 12 Mar 2020 00:43:28 +0000 (00:43 +0000)
Jira Issue: https://gem5.atlassian.net/browse/GEM5-187

Change-Id: I144fc3fb0e408380294ea91fefa881494f44098b
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23203
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/arch/sparc/linux/process.hh
src/arch/sparc/linux/syscalls.cc
src/arch/sparc/solaris/process.cc

index 2bb56e511ab8d60150d27489cff78e6af92570b4..3b79b39fd85f812ad66e62b439b15043776747e5 100644 (file)
@@ -92,7 +92,8 @@ class Sparc64LinuxProcess : public SparcLinuxProcess, public Sparc64Process
     void handleTrap(int trapNum, ThreadContext *tc, Fault *fault) override;
 };
 
-SyscallReturn getresuidFunc(SyscallDesc *desc, int num, ThreadContext *tc);
+SyscallReturn getresuidFunc(SyscallDesc *desc, int num, ThreadContext *tc,
+                            Addr ruid, Addr euid, Addr suid);
 
 } // namespace SparcISA
 #endif // __SPARC_LINUX_PROCESS_HH__
index 405b7d0ed2f1e7e32a9a626ea437f2f1357f8eb0..2c4992ccff3d4832c98e7cf54163de57178a55e0 100644 (file)
@@ -37,11 +37,10 @@ namespace SparcISA {
 
 /// Target uname() handler.
 static SyscallReturn
-unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
+unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc, Addr utsname)
 {
-    int index = 0;
     auto process = tc->getProcessPtr();
-    TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
+    TypedBufferArg<Linux::utsname> name(utsname);
 
     strcpy(name->sysname, "Linux");
     strcpy(name->nodename, "sim.gem5.org");
@@ -56,14 +55,10 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
 
 
 SyscallReturn
-getresuidFunc(SyscallDesc *desc, int num, ThreadContext *tc)
+getresuidFunc(SyscallDesc *desc, int num, ThreadContext *tc,
+              Addr ruid, Addr euid, Addr suid)
 {
     const uint64_t id = htobe(100);
-    int index = 0;
-    auto p = tc->getProcessPtr();
-    Addr ruid = p->getSyscallArg(tc, index);
-    Addr euid = p->getSyscallArg(tc, index);
-    Addr suid = p->getSyscallArg(tc, index);
     // Handle the EFAULT case
     // Set the ruid
     if (ruid) {
index 026372fa125a7d45da1190ab55414cdff48f9f49..20fb3cf8f5bd86dcd3d6b0dc3f052da2c044f834 100644 (file)
@@ -70,11 +70,10 @@ SparcSolarisObjectFileLoader loader;
 
 /// Target uname() handler.
 static SyscallReturn
-unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
+unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc, Addr utsname)
 {
-    int index = 0;
     auto process = tc->getProcessPtr();
-    TypedBufferArg<Solaris::utsname> name(process->getSyscallArg(tc, index));
+    TypedBufferArg<Solaris::utsname> name(utsname);
 
     strcpy(name->sysname, "SunOS");
     strcpy(name->nodename, "m5.eecs.umich.edu");