Message ID | d7749ab770601258be7ae862b5827c42bb35e44c.1464353863.git.riku.voipio@linaro.org |
---|---|
State | Accepted |
Commit | d7749ab770601258be7ae862b5827c42bb35e44c |
Headers | show |
diff --git a/linux-user/main.c b/linux-user/main.c index 4607e48..c5da418 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -2983,6 +2983,13 @@ void cpu_loop(CPUMBState *env) env->regs[10], 0, 0); env->regs[3] = ret; + /* All syscall exits result in guest r14 being equal to the + * PC we return to, because the kernel syscall exit "rtbd" does + * this. (This is true even for sigreturn(); note that r14 is + * not a userspace-usable register, as the kernel may clobber it + * at any point.) + */ + env->regs[14] = env->sregs[SR_PC]; break; case EXCP_HW_EXCP: env->regs[17] = env->sregs[SR_PC] + 4;