diff options
Diffstat (limited to 'sysdeps/unix/i386/sysdep.S')
-rw-r--r-- | sysdeps/unix/i386/sysdep.S | 43 |
1 files changed, 5 insertions, 38 deletions
diff --git a/sysdeps/unix/i386/sysdep.S b/sysdeps/unix/i386/sysdep.S index 3bc872add8..9f279e15b1 100644 --- a/sysdeps/unix/i386/sysdep.S +++ b/sysdeps/unix/i386/sysdep.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,1992,1993,1994,1995,1996,1997,2000,2002,2004,2005 +/* Copyright (C) 1991-1997,2000,2002,2004,2005,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -46,57 +46,24 @@ syscall_error: notb: #endif #ifndef PIC -# if USE___THREAD -# ifndef NO_TLS_DIRECT_SEG_REFS +# ifndef NO_TLS_DIRECT_SEG_REFS movl %eax, %gs:C_SYMBOL_NAME(errno@NTPOFF) -# else +# else movl %gs:0, %ecx movl %eax, C_SYMBOL_NAME(errno@NTPOFF)(%ecx) -# endif -# elif !defined _LIBC_REENTRANT - movl %eax, C_SYMBOL_NAME(errno) -# else - pushl %eax - PUSH_ERRNO_LOCATION_RETURN - call BP_SYM (__errno_location) - POP_ERRNO_LOCATION_RETURN - popl %ecx - movl %ecx, (%eax) # endif #else /* The caller has pushed %ebx and then set it up to point to the GOT before calling us through the PLT. */ -# if USE___THREAD movl C_SYMBOL_NAME(errno@GOTNTPOFF)(%ebx), %ecx /* Pop %ebx value saved before jumping here. */ popl %ebx -# ifndef NO_TLS_DIRECT_SEG_REFS +# ifndef NO_TLS_DIRECT_SEG_REFS addl %gs:0, %ecx movl %eax, (%ecx) -# else - movl %eax, %gs:0(%ecx) -# endif -# elif RTLD_PRIVATE_ERRNO - movl %eax, C_SYMBOL_NAME(rtld_errno@GOTOFF)(%ebx) - - /* Pop %ebx value saved before jumping here. */ - popl %ebx -# elif !defined _LIBC_REENTRANT - movl C_SYMBOL_NAME(errno@GOT)(%ebx), %ecx - - /* Pop %ebx value saved before jumping here. */ - popl %ebx - movl %eax, (%ecx) # else - pushl %eax - PUSH_ERRNO_LOCATION_RETURN - call C_SYMBOL_NAME (BP_SYM (__errno_location)@PLT) - POP_ERRNO_LOCATION_RETURN - popl %ecx - /* Pop %ebx value saved before jumping here. */ - popl %ebx - movl %ecx, (%eax) + movl %eax, %gs:0(%ecx) # endif #endif movl $-1, %eax |