mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
linux(4): Simplify %r10 restoring on amd64
Restore %r10 at system call entry to avoid doing this multiply times. Differential Revision: https://reviews.freebsd.org/D40154 MFC after: 1 month
This commit is contained in:
parent
a463dd8108
commit
185bd9fa30
2 changed files with 3 additions and 9 deletions
|
|
@ -350,12 +350,6 @@ linux_ptrace_getregs_machdep(struct thread *td, pid_t pid,
|
|||
linux_msg(td, "PT_LWPINFO failed with error %d", error);
|
||||
return (error);
|
||||
}
|
||||
if ((lwpinfo.pl_flags & PL_FLAG_SCE) != 0) {
|
||||
/*
|
||||
* Undo the mangling done in exception.S:fast_syscall_common().
|
||||
*/
|
||||
l_regset->r10 = l_regset->rcx;
|
||||
}
|
||||
if ((lwpinfo.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX)) != 0) {
|
||||
/*
|
||||
* In Linux, the syscall number - passed to the syscall
|
||||
|
|
|
|||
|
|
@ -167,6 +167,9 @@ linux_fetch_syscall_args(struct thread *td)
|
|||
else
|
||||
sa->callp = &p->p_sysent->sv_table[sa->code];
|
||||
|
||||
/* Restore r10 earlier to avoid doing this multiply times. */
|
||||
frame->tf_r10 = frame->tf_rcx;
|
||||
|
||||
td->td_retval[0] = 0;
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -181,7 +184,6 @@ linux_set_syscall_retval(struct thread *td, int error)
|
|||
switch (error) {
|
||||
case 0:
|
||||
frame->tf_rax = td->td_retval[0];
|
||||
frame->tf_r10 = frame->tf_rcx;
|
||||
break;
|
||||
|
||||
case ERESTART:
|
||||
|
|
@ -192,7 +194,6 @@ linux_set_syscall_retval(struct thread *td, int error)
|
|||
*
|
||||
*/
|
||||
frame->tf_rip -= frame->tf_err;
|
||||
frame->tf_r10 = frame->tf_rcx;
|
||||
break;
|
||||
|
||||
case EJUSTRETURN:
|
||||
|
|
@ -200,7 +201,6 @@ linux_set_syscall_retval(struct thread *td, int error)
|
|||
|
||||
default:
|
||||
frame->tf_rax = bsd_to_linux_errno(error);
|
||||
frame->tf_r10 = frame->tf_rcx;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue