diff options
Diffstat (limited to 'src/arch/arm/linux')
-rw-r--r-- | src/arch/arm/linux/linux.hh | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/arch/arm/linux/linux.hh b/src/arch/arm/linux/linux.hh index 9e9ca1f80..e1f27a761 100644 --- a/src/arch/arm/linux/linux.hh +++ b/src/arch/arm/linux/linux.hh @@ -58,9 +58,6 @@ class ArmLinux : public Linux uint64_t stack, uint64_t tls) { ArmISA::copyRegs(ptc, ctc); - - if (stack) - ctc->setIntReg(TheISA::StackPointerReg, stack); } }; @@ -271,6 +268,18 @@ class ArmLinux32 : public ArmLinux int32_t tms_cutime; //!< user time of children int32_t tms_cstime; //!< system time of children }; + + static void + archClone(uint64_t flags, + Process *pp, Process *cp, + ThreadContext *ptc, ThreadContext *ctc, + uint64_t stack, uint64_t tls) + { + ArmLinux::archClone(flags, pp, cp, ptc, ctc, stack, tls); + + if (stack) + ctc->setIntReg(ArmISA::INTREG_SP, stack); + } }; class ArmLinux64 : public ArmLinux @@ -516,6 +525,17 @@ class ArmLinux64 : public ArmLinux int64_t tms_cutime; //!< user time of children int64_t tms_cstime; //!< system time of children }; + + static void archClone(uint64_t flags, + Process *pp, Process *cp, + ThreadContext *ptc, ThreadContext *ctc, + uint64_t stack, uint64_t tls) + { + ArmLinux::archClone(flags, pp, cp, ptc, ctc, stack, tls); + + if (stack) + ctc->setIntReg(ArmISA::INTREG_SP0, stack); + } }; #endif |