BZ#13696: Add --disable-nscd configure option.
[glibc.git] / sysdeps / unix / i386 / sysdep.S
blobeec60a0bfd60b58d2808a78017baa944264f7b06
1 /* Copyright (C) 1991-1997,2000,2002,2004,2005,2011,2012
2         Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
19 #include <sysdep.h>
20 #define _ERRNO_H
21 #include <bits/errno.h>
22 #include <bp-asm.h>
23 #include <bp-sym.h>
25 #ifdef IS_IN_rtld
26 # include <dl-sysdep.h>         /* Defines RTLD_PRIVATE_ERRNO.  */
27 #endif
29 .globl C_SYMBOL_NAME(errno)
30 .globl syscall_error
32 __syscall_error:
33 #if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
34         /* We translate the system's EWOULDBLOCK error into EAGAIN.
35            The GNU C library always defines EWOULDBLOCK==EAGAIN.
36            EWOULDBLOCK_sys is the original number.  */
37         cmpl $EWOULDBLOCK_sys, %eax /* Is it the old EWOULDBLOCK?  */
38         jne notb                /* Branch if not.  */
39         movl $EAGAIN, %eax      /* Yes; translate it to EAGAIN.  */
40 notb:
41 #endif
42 #ifndef PIC
43 # ifndef NO_TLS_DIRECT_SEG_REFS
44         movl %eax, %gs:C_SYMBOL_NAME(errno@NTPOFF)
45 # else
46         movl %gs:0, %ecx
47         movl %eax, C_SYMBOL_NAME(errno@NTPOFF)(%ecx)
48 # endif
49 #else
50         /* The caller has pushed %ebx and then set it up to
51            point to the GOT before calling us through the PLT.  */
52         movl C_SYMBOL_NAME(errno@GOTNTPOFF)(%ebx), %ecx
54         /* Pop %ebx value saved before jumping here.  */
55         popl %ebx
56 # ifndef NO_TLS_DIRECT_SEG_REFS
57         addl %gs:0, %ecx
58         movl %eax, (%ecx)
59 # else
60         movl %eax, %gs:0(%ecx)
61 # endif
62 #endif
63         movl $-1, %eax
64         ret
66 #undef  __syscall_error
67 END (__syscall_error)