diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2019-01-09 14:51:33 +0000 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2019-01-10 17:50:28 +0000 |
commit | 13daa2e0620e71a1c11f94d1f8a864f73a52b94d (patch) | |
tree | 0bcb56f5f33c02345dbf66cfb11b98e5fcc89827 | |
parent | 384951540c4bfb4342a16e0827b7811d4f750bf6 (diff) | |
download | gem5-13daa2e0620e71a1c11f94d1f8a864f73a52b94d.tar.xz |
sim-se: Correctly calculate next PC in clone
The clone syscall doesn't propagate all state in the PCState object
when calculating the return PC of a newly created process. Instead of
creating a new PCState object from the next PC address, copy the old
PC and advance it.
Change-Id: Ice53831920bcb5d198865169ed2cca8d06e37cfe
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Cc: Giacomo Travaglini <giacomo.travaglini@arm.com>
Cc: Javier Setoain <javier.setoain@arm.com>
Cc: Brandon Potter <Brandon.Potter@amd.com>
Reviewed-on: https://gem5-review.googlesource.com/c/15417
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Brandon Potter <Brandon.Potter@amd.com>
-rw-r--r-- | src/sim/syscall_emul.hh | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh index 1ff046033..8480c7e94 100644 --- a/src/sim/syscall_emul.hh +++ b/src/sim/syscall_emul.hh @@ -1402,7 +1402,9 @@ cloneFunc(SyscallDesc *desc, int callnum, Process *p, ThreadContext *tc) ctc->setIntReg(TheISA::SyscallPseudoReturnReg, 1); #endif - ctc->pcState(tc->nextInstAddr()); + TheISA::PCState cpc = tc->pcState(); + cpc.advance(); + ctc->pcState(cpc); ctc->activate(); return cp->pid(); |