svn commit: r254463 - in head: lib/libc/amd64/sys lib/libc/gen lib/libc/i386/sys sys/amd64/include sys/i386/include

Jilles Tjoelker jilles at FreeBSD.org
Sat Aug 17 19:25:00 UTC 2013


Author: jilles
Date: Sat Aug 17 19:24:58 2013
New Revision: 254463
URL: http://svnweb.freebsd.org/changeset/base/254463

Log:
  libc: Access _logname_valid more efficiently.
  
  The variable _logname_valid is not exported via the version script;
  therefore, change C and i386/amd64 assembler code to remove indirection
  (which allowed interposition). This makes the code slightly smaller and
  faster.
  
  Also, remove #define PIC_GOT from i386/amd64 in !PIC mode. Without PIC,
  there is no place containing the address of each variable, so there is no
  possible definition for PIC_GOT.

Modified:
  head/lib/libc/amd64/sys/setlogin.S
  head/lib/libc/gen/getlogin.c
  head/lib/libc/i386/sys/setlogin.S
  head/sys/amd64/include/asm.h
  head/sys/i386/include/asm.h

Modified: head/lib/libc/amd64/sys/setlogin.S
==============================================================================
--- head/lib/libc/amd64/sys/setlogin.S	Sat Aug 17 19:23:35 2013	(r254462)
+++ head/lib/libc/amd64/sys/setlogin.S	Sat Aug 17 19:24:58 2013	(r254463)
@@ -48,12 +48,7 @@ ENTRY(__sys_setlogin)
 	mov	$SYS_setlogin,%rax
 	KERNCALL
 	jb	HIDENAME(cerror)
-#ifdef PIC
-	movq	PIC_GOT(CNAME(_logname_valid)),%rdx
-	movl	$0,(%rdx)
-#else
 	movl	$0,CNAME(_logname_valid)(%rip)
-#endif
 	ret				/* setlogin(name) */
 END(__sys_setlogin)
 

Modified: head/lib/libc/gen/getlogin.c
==============================================================================
--- head/lib/libc/gen/getlogin.c	Sat Aug 17 19:23:35 2013	(r254462)
+++ head/lib/libc/gen/getlogin.c	Sat Aug 17 19:24:58 2013	(r254463)
@@ -50,7 +50,7 @@ __FBSDID("$FreeBSD$");
 
 extern int		_getlogin(char *, int);
 
-int			_logname_valid;		/* known to setlogin() */
+int			_logname_valid __hidden; /* known to setlogin() */
 static pthread_mutex_t	logname_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static char *

Modified: head/lib/libc/i386/sys/setlogin.S
==============================================================================
--- head/lib/libc/i386/sys/setlogin.S	Sat Aug 17 19:23:35 2013	(r254462)
+++ head/lib/libc/i386/sys/setlogin.S	Sat Aug 17 19:24:58 2013	(r254463)
@@ -41,16 +41,9 @@ __FBSDID("$FreeBSD$");
 .globl	CNAME(_logname_valid)		/* in _getlogin() */
 
 SYSCALL(setlogin)
-#ifdef PIC
 	PIC_PROLOGUE
-	pushl	%eax
-	movl	PIC_GOT(CNAME(_logname_valid)),%eax
-	movl	$0,(%eax)
-	popl	%eax
+	movl	$0,PIC_GOTOFF(CNAME(_logname_valid))
 	PIC_EPILOGUE
-#else
-	movl	$0,CNAME(_logname_valid)
-#endif
 	ret				/* setlogin(name) */
 END(__sys_setlogin)
 

Modified: head/sys/amd64/include/asm.h
==============================================================================
--- head/sys/amd64/include/asm.h	Sat Aug 17 19:23:35 2013	(r254462)
+++ head/sys/amd64/include/asm.h	Sat Aug 17 19:24:58 2013	(r254463)
@@ -43,7 +43,6 @@
 #define	PIC_GOT(x)	x at GOTPCREL(%rip)
 #else
 #define	PIC_PLT(x)	x
-#define	PIC_GOT(x)	x
 #endif
 
 /*

Modified: head/sys/i386/include/asm.h
==============================================================================
--- head/sys/i386/include/asm.h	Sat Aug 17 19:23:35 2013	(r254462)
+++ head/sys/i386/include/asm.h	Sat Aug 17 19:24:58 2013	(r254463)
@@ -49,11 +49,12 @@
 	popl	%ebx
 #define	PIC_PLT(x)	x at PLT
 #define	PIC_GOT(x)	x at GOT(%ebx)
+#define	PIC_GOTOFF(x)	x at GOTOFF(%ebx)
 #else
 #define	PIC_PROLOGUE
 #define	PIC_EPILOGUE
 #define	PIC_PLT(x)	x
-#define	PIC_GOT(x)	x
+#define	PIC_GOTOFF(x)	x
 #endif
 
 /*


More information about the svn-src-head mailing list