From acd42b789378ab70046966872003347c0ef067db Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 28 Nov 2002 08:32:24 +0000 Subject: [PATCH] Update. 2002-11-28 Ulrich Drepper * sysdeps/unix/sysv/linux/x86_64/vfork.S: Don't trash the CPU's branch prediction buffers by using unpaired call/ret. --- ChangeLog | 5 +++++ sysdeps/unix/sysv/linux/x86_64/vfork.S | 13 +++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 74344ba..6f33fb4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-11-28 Ulrich Drepper + + * 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 * sysdeps/unix/sysv/linux/i386/sysdep.h (ASMFMT_2): Fix typo in diff --git a/sysdeps/unix/sysv/linux/x86_64/vfork.S b/sysdeps/unix/sysv/linux/x86_64/vfork.S index 79f3260..3315df7 100644 --- a/sysdeps/unix/sysv/linux/x86_64/vfork.S +++ b/sysdeps/unix/sysv/linux/x86_64/vfork.S @@ -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 -- 2.7.4