1 #ifndef _ERRNO_H 2 #include <stdlib/errno.h> 3 #if !defined _ISOMAC && !defined __ASSEMBLER__ 4 5 # if IS_IN (rtld) 6 # include <dl-sysdep.h> 7 # ifndef RTLD_PRIVATE_ERRNO 8 # error "dl-sysdep.h must define RTLD_PRIVATE_ERRNO!" 9 # endif 10 # else 11 # define RTLD_PRIVATE_ERRNO 0 12 # endif 13 14 # if RTLD_PRIVATE_ERRNO 15 /* The dynamic linker uses its own private errno variable. 16 All access to errno inside the dynamic linker is serialized, 17 so a single (hidden) global variable is all it needs. */ 18 19 # undef errno 20 # define errno rtld_errno 21 extern int rtld_errno attribute_hidden; 22 23 # elif IS_IN_LIB && !IS_IN (rtld) 24 25 # undef errno 26 # if IS_IN (libc) 27 # define errno __libc_errno 28 # else 29 # define errno errno /* For #ifndef errno tests. */ 30 # endif 31 extern __thread int errno attribute_tls_model_ie; 32 33 # endif /* IS_IN_LIB */ 34 35 # define __set_errno(val) (errno = (val)) 36 37 extern int *__errno_location (void) __THROW __attribute_const__ 38 # if RTLD_PRIVATE_ERRNO 39 attribute_hidden 40 # endif 41 ; 42 libc_hidden_proto (__errno_location) 43 44 #endif /* !_ISOMAC && !__ASSEMBLER__ */ 45 #endif /* !_ERRNO_H */ 46