Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 28 Nov 2002 08:32:24 +0000 (08:32 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 28 Nov 2002 08:32:24 +0000 (08:32 +0000)
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.

ChangeLog
sysdeps/unix/sysv/linux/x86_64/vfork.S

index 74344ba..6f33fb4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * sysdeps/unix/sysv/linux/i386/sysdep.h (ASMFMT_2): Fix typo in
index 79f3260..3315df7 100644 (file)
@@ -29,22 +29,19 @@ ENTRY (__vfork)
 
        /* Pop the return PC value into RDI.  We need a register that
           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.  */
        movl    $SYS_ify (vfork), %eax
        syscall
-       cmpl    $-4095, %eax
-       jae     .Lerror         /* Branch forward if it failed.  */
-
-       /* Jump to the return PC.  */
-       jmp     *%rdi
 
-.Lerror:
        /* Push back the return PC.  */
        pushq   %rdi
-       jmp     SYSCALL_ERROR_LABEL
 
+       cmpl    $-4095, %eax
+       jae SYSCALL_ERROR_LABEL         /* Branch forward if it failed.  */
+
+       /* Normal return.  */
 .Lpseudo_end:
        ret