* Versions.def (libc): Add GLIBC_2.2.6.
* hurd/Versions (libc: GLIBC_2.2.6): Add __errno_location.
* sysdeps/mach/hurd/errnos.awk: In generated macro, use
__errno_location instead of __hurd_errno_location, and don't inline it.
* sysdeps/mach/hurd/bits/errno.h: Regenerated.
* hurd/errno.c: New file.
* hurd/Makefile (routines): Add errno.
GLIBC_2.2.3
GLIBC_2.2.4
GLIBC_2.2.5
+ GLIBC_2.2.6
%ifdef USE_IN_LIBIO
HURD_CTHREADS_0.3
%endif
fopenport \
vpprintf \
ports-get ports-set hurdports hurdmsg \
+ errno \
$(sig) $(dtable) $(inlines) port-cleanup report-wait
sig = hurdsig hurdfault siginfo hurd-raise preempt-sig \
trampoline longjmp-ts catch-exc exc2signal hurdkill sigunwind \
# cthreads functions with stubs in libc
cthread_keycreate; cthread_getspecific; cthread_setspecific;
__libc_getspecific;
+
+ # weak refs to libthreads functions that libc calls iff libthreads in use
+ cthread_fork; cthread_detach;
%endif
# necessary for the Hurd brk implementation
seteuids;
}
GLIBC_2.1.3 {
-%if SHLIB_COMPAT (libc, GLIBC_2_1_3, HURD_CTHREADS_0_3)
- # c*
- cthread_fork; cthread_detach;
-%endif
-
# d*
directory_name_split;
_hurdsig_interrupt_timeout;
_hurdsig_fault_preemptor; _hurdsig_fault_env;
}
+ GLIBC_2.2.6 {
+ # functions used in macros & inline functions
+ __errno_location;
+ }
%if !SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
HURD_CTHREADS_0.3 {
--- /dev/null
+/* __errno_location -- helper function for locating per-thread errno value
+ Copyright (C) 2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <hurd/threadvar.h>
+
+int *
+__errno_location (void)
+{
+ return (int *) __hurd_threadvar_location (_HURD_THREADVAR_ERRNO);
+}
+strong_alias (__errno_location, __hurd_errno_location)
#define __error_t_defined 1
#endif
-/* errno is a per-thread variable. */
-#include <hurd/threadvar.h>
-#define errno (*__hurd_errno_location ())
-#define __set_errno(val) errno = (val)
+/* Return the current thread's location for `errno'.
+ The syntax of this function allows redeclarations like `int errno'. */
+extern int *__errno_location (void) __THROW __attribute__ ((__const__));
+
+#define errno (*__errno_location ())
+#define __set_errno(val) (errno = (val))
#endif /* <errno.h> included. */