sparc,sim: Remove special handling of SPARC in the clone system call.
authorGabe Black <gabeblack@google.com>
Mon, 7 Sep 2020 02:03:12 +0000 (19:03 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 15 Sep 2020 03:59:03 +0000 (03:59 +0000)
We can set the extra syscall return values in the ISA specific archClone
function. We don't need a special #ifdef to handle them.

Change-Id: I82904b3d4bdf211c89d271d7277a60151191cdfc
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/34167
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Ciro Santilli <ciro.santilli@arm.com>
src/arch/sparc/linux/linux.hh
src/sim/syscall_emul.hh

index ed50a30c30c112372b1ed1daed666bb4e4ab3f50..431ec06274ca2197c7eb368e4ce63cb189af8f94 100644 (file)
@@ -230,6 +230,11 @@ class SparcLinux : public Linux
 
         if (stack)
             ctc->setIntReg(SparcISA::StackPointerReg, stack);
+
+        // Set these extra values. Since "clone" doesn't return two values,
+        // we can set these and they won't be clobbered by the syscall ABI.
+        ptc->setIntReg(SparcISA::SyscallPseudoReturnReg, 0);
+        ctc->setIntReg(SparcISA::SyscallPseudoReturnReg, 1);
     }
 };
 
index 05a29f9feb85f10dbb864971322d51712827d55f..9d1f6e27251ccd7fea1ed60ca713a22e962998ca 100644 (file)
@@ -1506,11 +1506,6 @@ cloneFunc(SyscallDesc *desc, ThreadContext *tc, RegVal flags, RegVal newStack,
 
     desc->returnInto(ctc, 0);
 
-#if THE_ISA == SPARC_ISA
-    tc->setIntReg(TheISA::SyscallPseudoReturnReg, 0);
-    ctc->setIntReg(TheISA::SyscallPseudoReturnReg, 1);
-#endif
-
     TheISA::PCState cpc = tc->pcState();
     if (!p->kvmInSE)
         cpc.advance();