diff --git a/src/arch/sparc/linux/linux.hh b/src/arch/sparc/linux/linux.hh index ed50a30c30..431ec06274 100644 --- a/src/arch/sparc/linux/linux.hh +++ b/src/arch/sparc/linux/linux.hh @@ -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); } }; diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh index 05a29f9feb..9d1f6e2725 100644 --- a/src/sim/syscall_emul.hh +++ b/src/sim/syscall_emul.hh @@ -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();