sparc: Convert SPARC specific syscalls to Guest ABI.

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>
This commit is contained in:
Gabe Black
2019-11-28 00:04:36 -08:00
parent 33593d77f9
commit 19c9ccf6e6
3 changed files with 8 additions and 13 deletions

View 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__

View 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) {

View 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");