summaryrefslogtreecommitdiffstats
path: root/lib/libc/amd64/sys/setlogin.S
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2004-02-22 02:11:39 +0000
committerpeter <peter@FreeBSD.org>2004-02-22 02:11:39 +0000
commit6d00d752a240fbb14fdf51e256ce843e61cb43c9 (patch)
tree478774f8cbfbb2455bb0eed32d8a09c56df5ff8e /lib/libc/amd64/sys/setlogin.S
parent2a9068ac03f4d66f08009d4aa0bb2ec199ae8030 (diff)
downloadFreeBSD-src-6d00d752a240fbb14fdf51e256ce843e61cb43c9.zip
FreeBSD-src-6d00d752a240fbb14fdf51e256ce843e61cb43c9.tar.gz
Change the syscall stub branch orders so that the static branch prediction
will assume that syscalls will succeed rather than fail.
Diffstat (limited to 'lib/libc/amd64/sys/setlogin.S')
-rw-r--r--lib/libc/amd64/sys/setlogin.S16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/libc/amd64/sys/setlogin.S b/lib/libc/amd64/sys/setlogin.S
index cb355d2..439e417 100644
--- a/lib/libc/amd64/sys/setlogin.S
+++ b/lib/libc/amd64/sys/setlogin.S
@@ -44,7 +44,14 @@ __FBSDID("$FreeBSD$");
.globl CNAME(_logname_valid) /* in _getlogin() */
-SYSCALL(setlogin)
+ .weak _setlogin
+ .set _setlogin,__sys_setlogin
+ .weak setlogin
+ .set setlogin,__sys_setlogin
+ENTRY(__sys_setlogin)
+ mov $SYS_setlogin,%rax
+ KERNCALL
+ jb 1f
#ifdef PIC
movq PIC_GOT(CNAME(_logname_valid)),%rdx
movl $0,(%rdx)
@@ -52,3 +59,10 @@ SYSCALL(setlogin)
movl $0,CNAME(_logname_valid)(%rip)
#endif
ret /* setlogin(name) */
+1:
+#ifdef PIC
+ movq PIC_GOT(HIDENAME(cerror)),%rdx
+ jmp *%rdx
+#else
+ jmp HIDENAME(cerror)
+#endif
OpenPOWER on IntegriCloud