
1: /* Definition of `errno' variable. Canonical version. 2: Copyright (C) 2002, 2004 Free Software Foundation, Inc. 3: This file is part of the GNU C Library. 4: 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. 9: 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. 14: 15: You should have received a copy of the GNU Lesser General Public 16: License along with the GNU C Library; if not, write to the Free 17: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18: 02111-1307 USA. */ 19: 20: #include <errno.h> 21: #include <tls.h> 22: #include <dl-sysdep.h> 23: #undef errno 24: 25: #if RTLD_PRIVATE_ERRNO 26: 27: /* Code compiled for rtld refers only to this name. */ 28: int rtld_errno attribute_hidden; 29: 30: #elif USE___THREAD 31: 32: __thread int errno; 33: extern __thread int __libc_errno __attribute__ ((alias ("errno"))) 34: attribute_hidden; 35: 36: #else 37: 38: /* This differs from plain `int errno;' in that it doesn't create 39: a common definition, but a plain symbol that resides in .bss, 40: which can have an alias. */ 41: int errno __attribute__ ((nocommon)); 42: strong_alias (errno, _errno) 43: 44: /* We declare these with compat_symbol so that they are not visible at 45: link time. Programs must use the accessor functions. RTLD is special, 46: since it's not exported from there at any time. */ 47: # if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING 48: # include <shlib-compat.h> 49: compat_symbol (libc, errno, errno, GLIBC_2_0); 50: compat_symbol (libc, _errno, _errno, GLIBC_2_0); 51: # endif 52: 53: #endif