diff options
author | peter <peter@FreeBSD.org> | 2004-02-22 02:11:39 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2004-02-22 02:11:39 +0000 |
commit | 6d00d752a240fbb14fdf51e256ce843e61cb43c9 (patch) | |
tree | 478774f8cbfbb2455bb0eed32d8a09c56df5ff8e /lib/libc/amd64/sys/setlogin.S | |
parent | 2a9068ac03f4d66f08009d4aa0bb2ec199ae8030 (diff) | |
download | FreeBSD-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.S | 16 |
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 |