From owner-svn-src-head@FreeBSD.ORG Sat Aug 17 19:25:00 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 3D42A332; Sat, 17 Aug 2013 19:25:00 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 29ECA2764; Sat, 17 Aug 2013 19:25:00 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r7HJP0Ae082949; Sat, 17 Aug 2013 19:25:00 GMT (envelope-from jilles@svn.freebsd.org) Received: (from jilles@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r7HJOxKr082925; Sat, 17 Aug 2013 19:24:59 GMT (envelope-from jilles@svn.freebsd.org) Message-Id: <201308171924.r7HJOxKr082925@svn.freebsd.org> From: Jilles Tjoelker Date: Sat, 17 Aug 2013 19:24:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r254463 - in head: lib/libc/amd64/sys lib/libc/gen lib/libc/i386/sys sys/amd64/include sys/i386/include X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Aug 2013 19:25:00 -0000 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@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@PLT #define PIC_GOT(x) x@GOT(%ebx) +#define PIC_GOTOFF(x) x@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 /*