Update.
2002-11-28 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/x86_64/vfork.S: Don't trash the CPU's branch prediction buffers by using unpaired call/ret.
This commit is contained in:
parent
d08bef807b
commit
acd42b7893
@ -1,3 +1,8 @@
|
|||||||
|
2002-11-28 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/vfork.S: Don't trash the CPU's
|
||||||
|
branch prediction buffers by using unpaired call/ret.
|
||||||
|
|
||||||
2002-11-27 Ulrich Drepper <drepper@redhat.com>
|
2002-11-27 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/i386/sysdep.h (ASMFMT_2): Fix typo in
|
* sysdeps/unix/sysv/linux/i386/sysdep.h (ASMFMT_2): Fix typo in
|
||||||
|
@ -29,22 +29,19 @@ ENTRY (__vfork)
|
|||||||
|
|
||||||
/* Pop the return PC value into RDI. We need a register that
|
/* Pop the return PC value into RDI. We need a register that
|
||||||
is preserved by the syscall and that we're allowed to destroy. */
|
is preserved by the syscall and that we're allowed to destroy. */
|
||||||
popq %rdi
|
popq %rdi
|
||||||
|
|
||||||
/* Stuff the syscall number in RAX and enter into the kernel. */
|
/* Stuff the syscall number in RAX and enter into the kernel. */
|
||||||
movl $SYS_ify (vfork), %eax
|
movl $SYS_ify (vfork), %eax
|
||||||
syscall
|
syscall
|
||||||
cmpl $-4095, %eax
|
|
||||||
jae .Lerror /* Branch forward if it failed. */
|
|
||||||
|
|
||||||
/* Jump to the return PC. */
|
|
||||||
jmp *%rdi
|
|
||||||
|
|
||||||
.Lerror:
|
|
||||||
/* Push back the return PC. */
|
/* Push back the return PC. */
|
||||||
pushq %rdi
|
pushq %rdi
|
||||||
jmp SYSCALL_ERROR_LABEL
|
|
||||||
|
|
||||||
|
cmpl $-4095, %eax
|
||||||
|
jae SYSCALL_ERROR_LABEL /* Branch forward if it failed. */
|
||||||
|
|
||||||
|
/* Normal return. */
|
||||||
.Lpseudo_end:
|
.Lpseudo_end:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user