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.
This commit is contained in:
parent
a678ca234f
commit
0f3a4d8051
@ -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)
|
||||
|
||||
|
@ -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 *
|
||||
|
@ -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)
|
||||
|
||||
|
@ -43,7 +43,6 @@
|
||||
#define PIC_GOT(x) x@GOTPCREL(%rip)
|
||||
#else
|
||||
#define PIC_PLT(x) x
|
||||
#define PIC_GOT(x) x
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -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
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user