From afa6ba0660b4c2d2fadb1d7e117ffb79d1b063aa Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 28 Nov 2019 00:04:16 -0800 Subject: [PATCH] x86: Convert x86 specific syscalls to GuestABI. Jira Issue: https://gem5.atlassian.net/browse/GEM5-187 Change-Id: I2ad9c0ac72eb875f30ece27d58549244de84e191 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23201 Reviewed-by: Bobby R. Bruce Maintainer: Gabe Black Tested-by: kokoro --- src/arch/x86/linux/process.cc | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/arch/x86/linux/process.cc b/src/arch/x86/linux/process.cc index 991bbf5cd..ee3f4cc9c 100644 --- a/src/arch/x86/linux/process.cc +++ b/src/arch/x86/linux/process.cc @@ -89,11 +89,10 @@ X86LinuxObjectFileLoader 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 name(process->getSyscallArg(tc, index)); + TypedBufferArg name(utsname); strcpy(name->sysname, "Linux"); strcpy(name->nodename, "sim.gem5.org"); @@ -107,7 +106,8 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc) } static SyscallReturn -archPrctlFunc(SyscallDesc *desc, int callnum, ThreadContext *tc) +archPrctlFunc(SyscallDesc *desc, int callnum, ThreadContext *tc, + int code, uint64_t addr) { enum ArchPrctlCodes { @@ -117,11 +117,6 @@ archPrctlFunc(SyscallDesc *desc, int callnum, ThreadContext *tc) GetGS = 0x1004 }; - // First argument is the code, second is the address - int index = 0; - auto process = tc->getProcessPtr(); - int code = process->getSyscallArg(tc, index); - uint64_t addr = process->getSyscallArg(tc, index); uint64_t fsBase, gsBase; PortProxy &p = tc->getVirtProxy(); switch(code) @@ -173,7 +168,8 @@ struct UserDesc64 { }; static SyscallReturn -setThreadArea32Func(SyscallDesc *desc, int callnum, ThreadContext *tc) +setThreadArea32Func(SyscallDesc *desc, int callnum, ThreadContext *tc, + Addr userDescPtr) { const int minTLSEntry = 6; const int numTLSEntries = 3; @@ -186,8 +182,7 @@ setThreadArea32Func(SyscallDesc *desc, int callnum, ThreadContext *tc) assert((maxTLSEntry + 1) * sizeof(uint64_t) <= x86p->gdtSize()); - int argIndex = 0; - TypedBufferArg userDesc(process->getSyscallArg(tc, argIndex)); + TypedBufferArg userDesc(userDescPtr); TypedBufferArg gdt(x86p->gdtStart() + minTLSEntry * sizeof(uint64_t), numTLSEntries * sizeof(uint64_t)); -- 2.30.2