]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
2002-03-11 Roland McGrath <roland@frob.com>
authorRoland McGrath <roland@gnu.org>
Mon, 11 Mar 2002 21:27:01 +0000 (21:27 +0000)
committerRoland McGrath <roland@gnu.org>
Mon, 11 Mar 2002 21:27:01 +0000 (21:27 +0000)
* 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.

Versions.def
hurd/Makefile
hurd/Versions
hurd/errno.c [new file with mode: 0644]
sysdeps/mach/hurd/bits/errno.h

index a5829cf98c4a24af23182e5ac7fcd0072998883a..ef90f875abb5f344efd316482acf238efe9a178f 100644 (file)
@@ -14,6 +14,7 @@ libc {
   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
index dbe3ee33efa11c7ae93292c13af1015520eeb565..9487c963cfbdddb4b14d1e6effb1a9124c0c2fb8 100644 (file)
@@ -59,6 +59,7 @@ routines = hurdstartup hurdinit \
           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 \
index bac36c75f96738c143db40f44d99aeec80d2a4a1..aca1a21a135f4baf50f7b8f1cff44503d89be057 100644 (file)
@@ -22,6 +22,9 @@ libc {
     # 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
@@ -124,11 +127,6 @@ libc {
     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;
 
@@ -149,6 +147,10 @@ libc {
     _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 {
diff --git a/hurd/errno.c b/hurd/errno.c
new file mode 100644 (file)
index 0000000..85e4e7d
--- /dev/null
@@ -0,0 +1,28 @@
+/* __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)
index a553d11564f4bf739063af5dc297b376d38bdeb6..78597af703fc9d387447a37d9547d9280bc17223 100644 (file)
@@ -305,10 +305,12 @@ typedef enum __error_t_codes error_t;
 #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.  */