about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-02-01 23:24:05 +0000
committerUlrich Drepper <drepper@redhat.com>2002-02-01 23:24:05 +0000
commitfb23eb252f19c0066fdd45b69673a1beb328295f (patch)
tree77fa8a57b8a956426e4ed8ba058314f0103fe820
parent9c1084a38005ab319ce3f34e2faf087b59e9b0e8 (diff)
downloadglibc-fb23eb252f19c0066fdd45b69673a1beb328295f.tar.gz
glibc-fb23eb252f19c0066fdd45b69673a1beb328295f.tar.xz
glibc-fb23eb252f19c0066fdd45b69673a1beb328295f.zip
Update.
2002-02-01  Jakub Jelinek  <jakub@redhat.com>

	* Versions.def (libc): Add GLIBC_PRIVATE.
	(libdb, libnss_db, libdb1): Remove.
	(libnss_compat, libnss_dns, libnss_files, libnss_hesiod, libnss_nis,
	libnss_nisplus): Move all symbols to GLIBC_PRIVATE.
	(libpthread): Add GLIBC_PRIVATE.
	(libresolv): Likewise, remove GLIBC_2.1.
	(ld): Add GLIBC_PRIVATE, remove GLIBC_2.1.1, GLIBC_2.2, GLIBC_2.2.1,
	GLIBC_2.2.3, GLIBC_2.3.
	* catgets/Versions (__open_catalog): Move to GLIBC_PRIVATE.
	* elf/Versions (_dl_open, _dl_close, _dl_addr, _dl_init_first,
	_dl_sym, _dl_vsym): Likewise.
	(__libc_enable_secure, __libc_stack_end, _dl_argv, _dl_catch_error,
	_dl_check_all_versions, _dl_check_map_versions, _dl_debug_initialize,
	_dl_debug_printf, _dl_debug_state, _dl_dst_count, _dl_dst_substitute,
	_dl_init, _dl_lookup_symbol, _dl_lookup_symbol_skip,
	_dl_lookup_versioned_symbol, _dl_lookup_versioned_symbol_skip,
	_dl_map_object, _dl_map_object_deps, _dl_out_of_memory,
	_dl_relocate_object, _dl_signal_error, _dl_start_profile,
	_dl_starting_up, _dl_sysdep_start, _dl_unload_cache, _rtld_global):
	Likewise.
	(_dl_object_relocation_scope): Remove.
	* hesiod/Versions: Move all symbols to GLIBC_PRIVATE.
	* iconv/Versions (__gconv_alias_db, __gconv_modules_db,
	__gconv_cache): Move to GLIBC_PRIVATE.
	* inet/Versions (__internal_endnetgrent, __internal_getnetgrent_r,
	__internal_setnetgrent): Likewise.
	* io/Versions (__libc_open, __libc_close, __libc_read, __libc_write,
	__libc_lseek, __libc_fcntl, __libc_open64, __libc_lseek64): Likewise.
	* locale/Versions (__collate_element_hash, __collate_element_strings,
	__collate_symbol_classes, __collate_symbol_hash,
	__collate_symbol_strings, _nl_current_LC_COLLATE,
	_nl_current_LC_CTYPE): Likewise.
	* misc/Versions (__libc_fsync, __libc_msync): Likewise.
	* nis/Versions (libnss_compat): Move all symbols to GLIBC_PRIVATE.
	(libnss_nis, libnss_nisplus): Likewise.
	* nss/Versions (_nss_files_parse_grent, _nss_files_parse_pwent,
	_nss_files_parse_spent): Move to GLIBC_PRIVATE.
	(libnss_files): Move all symbols to GLIBC_PRIVATE.
	* posix/Versions (__libc_wait, __libc_waitpid, __libc_pause,
	__libc_nanosleep, __libc_fork, __libc_pread, __libc_pread64,
	__libc_pwrite, __libc_pwrite64): Move to GLIBC_PRIVATE.
	* resolv/Versions (__gai_sigqueue, __ns_name_unpack, __ns_name_ntop,
	__ns_get16, __ns_samename): Likewise.
	(libnss_dns): Move all symbols to GLIBC_PRIVATE.
	* setjmp/Versions (__libc_longjmp, __libc_siglongjmp): Move to
	GLIBC_PRIVATE.
	* socket/Versions (__libc_accept, __libc_send, __libc_recvfrom,
	__libc_recvmsg, __libc_sendmsg, __libc_recv, __libc_sendto,
	__libc_connect): Likewise.
	* stdio-common/Versions (_itoa_lower_digits, _itoa_upper_digits):
	Likewise.
	* stdlib/Versions (__libc_system): Likewise.
	* sunrpc/Versions (__rpc_thread_destroy): Likewise.
	* sysdeps/hppa/Versions: Move all symbols to GLIBC_PRIVATE.
	* sysdeps/ia64/fpu/Versions: Likewise.
	* sysdeps/ia64/Versions: Likewise.
	* sysdeps/unix/sysv/linux/ia64/Versions: Likewise.
	* sysdeps/unix/sysv/linux/i386/Versions (__modify_ldt): Move
	to GLIBC_PRIVATE.
	* sysdeps/unix/sysv/linux/x86_64/Versions (__modify_ldt): Likewise.
	* sysdeps/unix/sysv/linux/Versions (__syscall_rt_sigqueueinfo,
	__libc_sigaction): Likewise.
	* termios/Versions (__libc_tcdrain): Likewise.

	* misc/sys/cdefs (__attribute_noinline__): Define.
	* elf/dl-lookup.c (_dl_do_lookup, _dl_do_lookup_versioned): Add
	__attribute_noinline__.

	* elf/Makefile (rtld-routines): Add dl-xstat64, dl-fxstat64.
	* elf/dl-xstat64.c: New file.
	* elf/dl-fxstat64.c: New file.
	* sysdeps/unix/sysv/linux/fxstat64.c: If RTLD_STAT64 is defined,
	don't export __fxstat64 at multiple versions.
	* sysdeps/unix/sysv/linux/lxstat64.c: Similarly.
	* sysdeps/unix/sysv/linux/xstat64.c: Similarly.
-rw-r--r--ChangeLog78
-rw-r--r--Versions.def35
-rw-r--r--catgets/Versions7
-rw-r--r--elf/Makefile3
-rw-r--r--elf/Versions55
-rw-r--r--elf/dl-fxstat64.c25
-rw-r--r--elf/dl-lookup.c4
-rw-r--r--elf/dl-xstat64.c25
-rw-r--r--hesiod/Versions4
-rw-r--r--iconv/Versions9
-rw-r--r--inet/Versions9
-rw-r--r--io/Versions15
-rw-r--r--linuxthreads/ChangeLog10
-rw-r--r--linuxthreads/Versions18
-rw-r--r--linuxthreads/sysdeps/i386/i586/Versions2
-rw-r--r--linuxthreads/sysdeps/i386/i686/Versions2
-rw-r--r--linuxthreads/sysdeps/ia64/Versions2
-rw-r--r--linuxthreads/sysdeps/sparc/sparc32/sparcv9/Versions5
-rw-r--r--linuxthreads/sysdeps/sparc/sparc64/Versions5
-rw-r--r--locale/Versions10
-rw-r--r--misc/Versions9
-rw-r--r--misc/sys/cdefs.h2
-rw-r--r--nis/Versions10
-rw-r--r--nss/Versions8
-rw-r--r--posix/Versions16
-rw-r--r--resolv/Versions14
-rw-r--r--setjmp/Versions2
-rw-r--r--socket/Versions11
-rw-r--r--stdio-common/Versions6
-rw-r--r--stdlib/Versions9
-rw-r--r--sunrpc/Versions6
-rw-r--r--sysdeps/hppa/Versions2
-rw-r--r--sysdeps/ia64/Versions2
-rw-r--r--sysdeps/ia64/fpu/Versions2
-rw-r--r--sysdeps/unix/sysv/linux/Versions13
-rw-r--r--sysdeps/unix/sysv/linux/fxstat64.c11
-rw-r--r--sysdeps/unix/sysv/linux/i386/Versions5
-rw-r--r--sysdeps/unix/sysv/linux/ia64/Versions6
-rw-r--r--sysdeps/unix/sysv/linux/lxstat64.c11
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/Versions5
-rw-r--r--sysdeps/unix/sysv/linux/xstat64.c11
-rw-r--r--termios/Versions9
42 files changed, 317 insertions, 176 deletions
diff --git a/ChangeLog b/ChangeLog
index d03f977ec7..53d321496f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,81 @@
+2002-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+	* Versions.def (libc): Add GLIBC_PRIVATE.
+	(libdb, libnss_db, libdb1): Remove.
+	(libnss_compat, libnss_dns, libnss_files, libnss_hesiod, libnss_nis,
+	libnss_nisplus): Move all symbols to GLIBC_PRIVATE.
+	(libpthread): Add GLIBC_PRIVATE.
+	(libresolv): Likewise, remove GLIBC_2.1.
+	(ld): Add GLIBC_PRIVATE, remove GLIBC_2.1.1, GLIBC_2.2, GLIBC_2.2.1,
+	GLIBC_2.2.3, GLIBC_2.3.
+	* catgets/Versions (__open_catalog): Move to GLIBC_PRIVATE.
+	* elf/Versions (_dl_open, _dl_close, _dl_addr, _dl_init_first,
+	_dl_sym, _dl_vsym): Likewise.
+	(__libc_enable_secure, __libc_stack_end, _dl_argv, _dl_catch_error,
+	_dl_check_all_versions, _dl_check_map_versions, _dl_debug_initialize,
+	_dl_debug_printf, _dl_debug_state, _dl_dst_count, _dl_dst_substitute,
+	_dl_init, _dl_lookup_symbol, _dl_lookup_symbol_skip,
+	_dl_lookup_versioned_symbol, _dl_lookup_versioned_symbol_skip,
+	_dl_map_object, _dl_map_object_deps, _dl_out_of_memory,
+	_dl_relocate_object, _dl_signal_error, _dl_start_profile,
+	_dl_starting_up, _dl_sysdep_start, _dl_unload_cache, _rtld_global):
+	Likewise.
+	(_dl_object_relocation_scope): Remove.
+	* hesiod/Versions: Move all symbols to GLIBC_PRIVATE.
+	* iconv/Versions (__gconv_alias_db, __gconv_modules_db,
+	__gconv_cache): Move to GLIBC_PRIVATE.
+	* inet/Versions (__internal_endnetgrent, __internal_getnetgrent_r,
+	__internal_setnetgrent): Likewise.
+	* io/Versions (__libc_open, __libc_close, __libc_read, __libc_write,
+	__libc_lseek, __libc_fcntl, __libc_open64, __libc_lseek64): Likewise.
+	* locale/Versions (__collate_element_hash, __collate_element_strings,
+	__collate_symbol_classes, __collate_symbol_hash,
+	__collate_symbol_strings, _nl_current_LC_COLLATE,
+	_nl_current_LC_CTYPE): Likewise.
+	* misc/Versions (__libc_fsync, __libc_msync): Likewise.
+	* nis/Versions (libnss_compat): Move all symbols to GLIBC_PRIVATE.
+	(libnss_nis, libnss_nisplus): Likewise.
+	* nss/Versions (_nss_files_parse_grent, _nss_files_parse_pwent,
+	_nss_files_parse_spent): Move to GLIBC_PRIVATE.
+	(libnss_files): Move all symbols to GLIBC_PRIVATE.
+	* posix/Versions (__libc_wait, __libc_waitpid, __libc_pause,
+	__libc_nanosleep, __libc_fork, __libc_pread, __libc_pread64,
+	__libc_pwrite, __libc_pwrite64): Move to GLIBC_PRIVATE.
+	* resolv/Versions (__gai_sigqueue, __ns_name_unpack, __ns_name_ntop,
+	__ns_get16, __ns_samename): Likewise.
+	(libnss_dns): Move all symbols to GLIBC_PRIVATE.
+	* setjmp/Versions (__libc_longjmp, __libc_siglongjmp): Move to
+	GLIBC_PRIVATE.
+	* socket/Versions (__libc_accept, __libc_send, __libc_recvfrom,
+	__libc_recvmsg, __libc_sendmsg, __libc_recv, __libc_sendto,
+	__libc_connect): Likewise.
+	* stdio-common/Versions (_itoa_lower_digits, _itoa_upper_digits):
+	Likewise.
+	* stdlib/Versions (__libc_system): Likewise.
+	* sunrpc/Versions (__rpc_thread_destroy): Likewise.
+	* sysdeps/hppa/Versions: Move all symbols to GLIBC_PRIVATE.
+	* sysdeps/ia64/fpu/Versions: Likewise.
+	* sysdeps/ia64/Versions: Likewise.
+	* sysdeps/unix/sysv/linux/ia64/Versions: Likewise.
+	* sysdeps/unix/sysv/linux/i386/Versions (__modify_ldt): Move
+	to GLIBC_PRIVATE.
+	* sysdeps/unix/sysv/linux/x86_64/Versions (__modify_ldt): Likewise.
+	* sysdeps/unix/sysv/linux/Versions (__syscall_rt_sigqueueinfo,
+	__libc_sigaction): Likewise.
+	* termios/Versions (__libc_tcdrain): Likewise.
+
+	* misc/sys/cdefs (__attribute_noinline__): Define.
+	* elf/dl-lookup.c (_dl_do_lookup, _dl_do_lookup_versioned): Add
+	__attribute_noinline__.
+
+	* elf/Makefile (rtld-routines): Add dl-xstat64, dl-fxstat64.
+	* elf/dl-xstat64.c: New file.
+	* elf/dl-fxstat64.c: New file.
+	* sysdeps/unix/sysv/linux/fxstat64.c: If RTLD_STAT64 is defined,
+	don't export __fxstat64 at multiple versions.
+	* sysdeps/unix/sysv/linux/lxstat64.c: Similarly.
+	* sysdeps/unix/sysv/linux/xstat64.c: Similarly.
+
 2002-01-18  Isamu Hasegawa  <isamu@yamato.ibm.com>
 
 	* locale/program/ld-collate.c (collate_finish): Assign a wide
diff --git a/Versions.def b/Versions.def
index e89a34cf90..f1cdec9140 100644
--- a/Versions.def
+++ b/Versions.def
@@ -20,15 +20,11 @@ libc {
 %ifdef EXPORT_UNWIND_FIND_FDE
   GCC_3.0
 %endif
+  GLIBC_PRIVATE
 }
 libcrypt {
   GLIBC_2.0
 }
-libdb {
-  GLIBC_2.0
-  GLIBC_2.1
-  GLIBC_2.2
-}
 libdl {
   GLIBC_2.0
   GLIBC_2.1
@@ -45,27 +41,22 @@ libnsl {
   GLIBC_2.2
 }
 libnss_compat {
-  GLIBC_2.0
-}
-libnss_db {
-  GLIBC_2.0
+  GLIBC_PRIVATE
 }
 libnss_dns {
-  GLIBC_2.0
+  GLIBC_PRIVATE
 }
 libnss_files {
-  GLIBC_2.0
-  GLIBC_2.1
+  GLIBC_PRIVATE
 }
 libnss_hesiod {
-  GLIBC_2.1
-  GLIBC_2.2
+  GLIBC_PRIVATE
 }
 libnss_nis {
-  GLIBC_2.0
+  GLIBC_PRIVATE
 }
 libnss_nisplus {
-  GLIBC_2.0
+  GLIBC_PRIVATE
 }
 libpthread {
   GLIBC_2.0
@@ -74,11 +65,12 @@ libpthread {
   GLIBC_2.1.2
   GLIBC_2.2
   GLIBC_2.2.3
+  GLIBC_PRIVATE
 }
 libresolv {
   GLIBC_2.0
-  GLIBC_2.1
   GLIBC_2.2
+  GLIBC_PRIVATE
 }
 librt {
   GLIBC_2.1
@@ -87,17 +79,10 @@ librt {
 libutil {
   GLIBC_2.0
 }
-libdb1 {
-  GLIBC_2.0
-}
 ld {
   GLIBC_2.0
   GLIBC_2.1
-  GLIBC_2.1.1
-  GLIBC_2.2
-  GLIBC_2.2.1
-  GLIBC_2.2.3
-  GLIBC_2.3
+  GLIBC_PRIVATE
 }
 libthread_db {
   GLIBC_2.1.3
diff --git a/catgets/Versions b/catgets/Versions
index f225be2634..6434f2bd03 100644
--- a/catgets/Versions
+++ b/catgets/Versions
@@ -1,9 +1,10 @@
 libc {
   GLIBC_2.0 {
-    # functions with required interface outside normal name space
-    __open_catalog;
-
     # c*
     catclose; catgets; catopen;
   }
+  GLIBC_PRIVATE {
+    # functions with required interface outside normal name space
+    __open_catalog;
+  }
 }
diff --git a/elf/Makefile b/elf/Makefile
index 05f5c5aeb1..12277741c4 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -37,7 +37,8 @@ elide-routines.os = $(all-dl-routines) dl-support enbl-secure \
 
 # ld.so uses those routines, plus some special stuff for being the program
 # interpreter and operating independent of libc.
-rtld-routines	:= rtld $(dl-routines) dl-sysdep dl-environ dl-minimal
+rtld-routines	:= rtld $(dl-routines) dl-sysdep dl-environ dl-minimal \
+		   dl-xstat64 dl-fxstat64
 all-rtld-routines = $(rtld-routines) $(sysdep-rtld-routines)
 
 distribute	:= $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
diff --git a/elf/Versions b/elf/Versions
index af4f4b84a8..4c7806d8e6 100644
--- a/elf/Versions
+++ b/elf/Versions
@@ -1,7 +1,5 @@
 libc {
   GLIBC_2.0 {
-    # functions used in other libraries
-    _dl_open; _dl_close; _dl_addr;
 %ifdef EXPORT_UNWIND_FIND_FDE
     __register_frame_info; __deregister_frame_info;
 %endif
@@ -10,13 +8,6 @@ libc {
     # functions used in other libraries
     _dl_mcount_wrapper; _dl_mcount_wrapper_check;
   }
-  GLIBC_2.2 {
-    # this is defined in ld.so and overridden by libc
-    _dl_init_first;
-
-    # functions used in other libraries
-    _dl_sym; _dl_vsym;
-  }
   GLIBC_2.2.4 {
     dl_iterate_phdr;
   }
@@ -26,44 +17,34 @@ libc {
     __register_frame_info_table_bases; _Unwind_Find_FDE;
   }
 %endif
+  GLIBC_PRIVATE {
+    # functions used in other libraries
+    _dl_open; _dl_close; _dl_addr;
+    _dl_sym; _dl_vsym; _dl_init_first;
+  }
 }
 
 ld {
   GLIBC_2.0 {
-    # Those are in the dynamic linker, but used by libc.so.
-    __libc_enable_secure; _dl_catch_error; _dl_check_all_versions;
-    _dl_debug_initialize; _dl_debug_state;
-    _dl_lookup_symbol;
-    _dl_map_object; _dl_map_object_deps; _dl_object_relocation_scope;
-    _dl_relocate_object; _dl_signal_error; _dl_starting_up;
-    _dl_sysdep_start; _r_debug;
-    _dl_lookup_symbol_skip;
-    _dl_lookup_versioned_symbol; _dl_lookup_versioned_symbol_skip;
-
     # Function from libc.so which must be shared with libc.
     calloc; free; malloc; realloc;
-  }
-  GLIBC_2.1 {
-    # global variables
-    __libc_stack_end;
 
-    # functions used in other libraries
-    _dl_start_profile; _dl_mcount; _dl_unload_cache;
+    _r_debug;
   }
-  GLIBC_2.1.1 {
+  GLIBC_2.1 {
     # functions used in other libraries
-    _dl_dst_count; _dl_dst_substitute;
+    _dl_mcount;
   }
-  GLIBC_2.2 {
-    _dl_init; _dl_argv; _dl_check_map_versions;
-
-    # variables used elsewhere
-    _dl_out_of_memory;
-  }
-  GLIBC_2.2.3 {
-    _dl_debug_printf;
-  }
-  GLIBC_2.3 {
+  GLIBC_PRIVATE {
+    # Those are in the dynamic linker, but used by libc.so.
+    __libc_enable_secure; __libc_stack_end;
+    _dl_argv; _dl_catch_error; _dl_check_all_versions; _dl_check_map_versions;
+    _dl_debug_initialize; _dl_debug_printf; _dl_debug_state; _dl_dst_count;
+    _dl_dst_substitute; _dl_init; _dl_lookup_symbol; _dl_lookup_symbol_skip;
+    _dl_lookup_versioned_symbol; _dl_lookup_versioned_symbol_skip;
+    _dl_map_object; _dl_map_object_deps; _dl_out_of_memory;
+    _dl_relocate_object; _dl_signal_error; _dl_start_profile; _dl_starting_up;
+    _dl_sysdep_start; _dl_unload_cache;
     _rtld_global;
   }
 }
diff --git a/elf/dl-fxstat64.c b/elf/dl-fxstat64.c
new file mode 100644
index 0000000000..38d445d4d4
--- /dev/null
+++ b/elf/dl-fxstat64.c
@@ -0,0 +1,25 @@
+/* Dynamic linker's private version of __fxstat64.
+   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.  */
+
+/* This special file is needed because some fxstat64.c implementations
+   use versioning for __fxstat64 and we need to keep it local to
+   the dynamic linker.  */
+
+#define RTLD_STAT64
+#include <fxstat64.c>
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 695ce54b4e..4f3285fee5 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -661,7 +661,7 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map,
 
 /* These are here so that we only inline do_lookup{,_versioned} in the common
    case, not everywhere.  */
-static int
+static int __attribute_noinline__
 internal_function
 _dl_do_lookup (const char *undef_name, unsigned long int hash,
 	       const ElfW(Sym) *ref, struct sym_val *result,
@@ -672,7 +672,7 @@ _dl_do_lookup (const char *undef_name, unsigned long int hash,
 		    type_class);
 }
 
-static int
+static int __attribute_noinline__
 internal_function
 _dl_do_lookup_versioned (const char *undef_name, unsigned long int hash,
 			 const ElfW(Sym) *ref, struct sym_val *result,
diff --git a/elf/dl-xstat64.c b/elf/dl-xstat64.c
new file mode 100644
index 0000000000..4484f990e0
--- /dev/null
+++ b/elf/dl-xstat64.c
@@ -0,0 +1,25 @@
+/* Dynamic linker's private version of __xstat64.
+   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.  */
+
+/* This special file is needed because some xstat64.c implementations
+   use versioning for __xstat64 and we need to keep it local to
+   the dynamic linker.  */
+
+#define RTLD_STAT64
+#include <xstat64.c>
diff --git a/hesiod/Versions b/hesiod/Versions
index 180befb5b3..1255b6825c 100644
--- a/hesiod/Versions
+++ b/hesiod/Versions
@@ -1,13 +1,11 @@
 libnss_hesiod {
-  GLIBC_2.1 {
+  GLIBC_PRIVATE {
     _nss_hesiod_setpwent; _nss_hesiod_endpwent;
     _nss_hesiod_getpwnam_r; _nss_hesiod_getpwuid_r;
     _nss_hesiod_setgrent; _nss_hesiod_endgrent;
     _nss_hesiod_getgrnam_r; _nss_hesiod_getgrgid_r;
     _nss_hesiod_setservent; _nss_hesiod_endservent;
     _nss_hesiod_getservbyname_r;
-  }
-  GLIBC_2.2 {
     _nss_hesiod_initgroups_dyn;
     _nss_hesiod_getservbyport_r;
     _nss_hesiod_setprotoent; _nss_hesiod_endprotoent;
diff --git a/iconv/Versions b/iconv/Versions
index 8d6b70c53e..0661c8ce4c 100644
--- a/iconv/Versions
+++ b/iconv/Versions
@@ -1,13 +1,10 @@
 libc {
   GLIBC_2.1 {
-    # global variables
-    __gconv_alias_db; __gconv_modules_db;
-
     # i*
     iconv_open; iconv; iconv_close;
   }
-  GLIBC_2.2.5 {
-    # variable shared with iconv program
-    __gconv_cache;
+  GLIBC_PRIVATE {
+    # variables shared with iconv program
+    __gconv_alias_db; __gconv_modules_db; __gconv_cache;
   }
 }
diff --git a/inet/Versions b/inet/Versions
index 1b1baa5b35..eb3b13c9d2 100644
--- a/inet/Versions
+++ b/inet/Versions
@@ -3,10 +3,6 @@ libc {
     # functions with required interface outside normal name space
     __ivaliduser; __check_rhosts_file; __rcmd_errstr;
 
-    # functions used in other libraries
-    __internal_endnetgrent; __internal_getnetgrent_r;
-    __internal_setnetgrent;
-
     # variables in normal name space
     rexecoptions;
 
@@ -68,4 +64,9 @@ libc {
     # r*
     rcmd_af; rexec_af; rresvport_af; ruserok_af;
   }
+  GLIBC_PRIVATE {
+    # functions used in other libraries
+    __internal_endnetgrent; __internal_getnetgrent_r;
+    __internal_setnetgrent;
+  }
 }
diff --git a/io/Versions b/io/Versions
index e090a6822e..eaf25d7b1e 100644
--- a/io/Versions
+++ b/io/Versions
@@ -1,10 +1,5 @@
 libc {
   GLIBC_2.0 {
-    # functions which have an additional interface since they are
-    # are cancelable.
-    __libc_open; __libc_close; __libc_read; __libc_write;
-    __libc_lseek; __libc_fcntl;
-
     # functions used in inline functions or macros
     __xstat; __fxstat; __lxstat; __xmknod; __write; __close; __fcntl;
     __lseek; __open; __read;
@@ -83,14 +78,16 @@ libc {
     # s*
     statfs64; statvfs; statvfs64;
   }
-  GLIBC_2.1.3 {
-    # For the cancelation wrappers.
-    __libc_open64; __libc_lseek64;
-  }
   GLIBC_2.2 {
     # p*
     posix_fadvise; posix_fadvise64; posix_fallocate; posix_fallocate64;
 
     __open64;
   }
+  GLIBC_PRIVATE {
+    # functions which have an additional interface since they are
+    # cancelable.
+    __libc_open; __libc_close; __libc_read; __libc_write;
+    __libc_lseek; __libc_fcntl; __libc_open64; __libc_lseek64;
+  }
 }
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 93620d276f..b0cdf63a8c 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,13 @@
+2002-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+	* Versions (__libc_internal_tsd_get, __libc_internal_tsd_set,
+	__pthread_kill_other_threads_np): Move to GLIBC_PRIVATE.
+	* sysdeps/i386/i586/Versions: Move all symbols to GLIBC_PRIVATE.
+	* sysdeps/i386/i686/Versions: Move all symbols to GLIBC_PRIVATE.
+	* sysdeps/sparc/sparc32/sparcv9/Versions: New file.
+	* sysdeps/sparc/sparc64/Versions: New file.
+	* sysdeps/ia64/Versions: Move all symbols to GLIBC_PRIVATE.
+
 2002-01-31  Ulrich Drepper  <drepper@redhat.com>
 
 	* pthread.c: _dl_cpuclock_offset is not any longer a global variable
diff --git a/linuxthreads/Versions b/linuxthreads/Versions
index 2e7c11aff6..ac66f305f6 100644
--- a/linuxthreads/Versions
+++ b/linuxthreads/Versions
@@ -13,17 +13,18 @@ libc {
     pthread_mutexattr_getkind_np; pthread_mutexattr_setkind_np;
     pthread_self; pthread_setcancelstate; pthread_setcanceltype;
     pthread_setschedparam;
-
-    # Internal libc interface to libpthread
-    __libc_internal_tsd_get; __libc_internal_tsd_set;
   }
   GLIBC_2.1 {
     pthread_attr_init;
   }
+  GLIBC_PRIVATE {
+    # Internal libc interface to libpthread
+    __libc_internal_tsd_get; __libc_internal_tsd_set;
+  }
 }
 
 ld {
-  GLIBC_2.0 {
+  GLIBC_PRIVATE {
     # Internal libc interface to libpthread
     __libc_internal_tsd_get; __libc_internal_tsd_set;
   }
@@ -35,9 +36,6 @@ libpthread {
     _pthread_cleanup_pop; _pthread_cleanup_pop_restore; _pthread_cleanup_push;
     _pthread_cleanup_push_defer;
 
-    # Internal libc interface to libpthread
-    __libc_internal_tsd_get; __libc_internal_tsd_set;
-
     # Overwritten libc functions.
     accept; close; connect; fcntl; fork; fsync; longjmp; lseek; msync;
     nanosleep; open; pause; raise; read; recv; recvfrom; recvmsg; send;
@@ -118,7 +116,6 @@ libpthread {
     sem_close; sem_open; sem_unlink;
   }
   GLIBC_2.1.2 {
-    __pthread_kill_other_threads_np;
     __vfork;
   }
   GLIBC_2.2 {
@@ -156,4 +153,9 @@ libpthread {
     # Extensions.
     pthread_getattr_np;
   }
+  GLIBC_PRIVATE {
+    # Internal libc interface to libpthread
+    __libc_internal_tsd_get; __libc_internal_tsd_set;
+    __pthread_kill_other_threads_np;
+  }
 }
diff --git a/linuxthreads/sysdeps/i386/i586/Versions b/linuxthreads/sysdeps/i386/i586/Versions
index f9921aff55..32da57080d 100644
--- a/linuxthreads/sysdeps/i386/i586/Versions
+++ b/linuxthreads/sysdeps/i386/i586/Versions
@@ -1,5 +1,5 @@
 libpthread {
-  GLIBC_2.2.3 {
+  GLIBC_PRIVATE {
     __pthread_clock_gettime; __pthread_clock_settime;
   }
 }
diff --git a/linuxthreads/sysdeps/i386/i686/Versions b/linuxthreads/sysdeps/i386/i686/Versions
index f9921aff55..32da57080d 100644
--- a/linuxthreads/sysdeps/i386/i686/Versions
+++ b/linuxthreads/sysdeps/i386/i686/Versions
@@ -1,5 +1,5 @@
 libpthread {
-  GLIBC_2.2.3 {
+  GLIBC_PRIVATE {
     __pthread_clock_gettime; __pthread_clock_settime;
   }
 }
diff --git a/linuxthreads/sysdeps/ia64/Versions b/linuxthreads/sysdeps/ia64/Versions
index f9921aff55..32da57080d 100644
--- a/linuxthreads/sysdeps/ia64/Versions
+++ b/linuxthreads/sysdeps/ia64/Versions
@@ -1,5 +1,5 @@
 libpthread {
-  GLIBC_2.2.3 {
+  GLIBC_PRIVATE {
     __pthread_clock_gettime; __pthread_clock_settime;
   }
 }
diff --git a/linuxthreads/sysdeps/sparc/sparc32/sparcv9/Versions b/linuxthreads/sysdeps/sparc/sparc32/sparcv9/Versions
new file mode 100644
index 0000000000..32da57080d
--- /dev/null
+++ b/linuxthreads/sysdeps/sparc/sparc32/sparcv9/Versions
@@ -0,0 +1,5 @@
+libpthread {
+  GLIBC_PRIVATE {
+    __pthread_clock_gettime; __pthread_clock_settime;
+  }
+}
diff --git a/linuxthreads/sysdeps/sparc/sparc64/Versions b/linuxthreads/sysdeps/sparc/sparc64/Versions
new file mode 100644
index 0000000000..32da57080d
--- /dev/null
+++ b/linuxthreads/sysdeps/sparc/sparc64/Versions
@@ -0,0 +1,5 @@
+libpthread {
+  GLIBC_PRIVATE {
+    __pthread_clock_gettime; __pthread_clock_settime;
+  }
+}
diff --git a/locale/Versions b/locale/Versions
index 9c3bda4ffd..6bce99f5c5 100644
--- a/locale/Versions
+++ b/locale/Versions
@@ -7,9 +7,7 @@ libBrokenLocale {
 libc {
   GLIBC_2.0 {
     # global variables
-    __collate_element_hash; __collate_element_strings;
-    __collate_symbol_classes; __collate_symbol_hash; __collate_symbol_strings;
-    _libc_intl_domainname; _nl_current_LC_COLLATE; _nl_current_LC_CTYPE;
+    _libc_intl_domainname;
 
     # functions used in inline functions or macros
     __ctype_get_mb_cur_max;
@@ -48,4 +46,10 @@ libc {
     # missing function from the experimental locale implementation
     __nl_langinfo_l;
   }
+  GLIBC_PRIVATE {
+    # global variables
+    __collate_element_hash; __collate_element_strings;
+    __collate_symbol_classes; __collate_symbol_hash; __collate_symbol_strings;
+    _nl_current_LC_COLLATE; _nl_current_LC_CTYPE;
+  }
 }
diff --git a/misc/Versions b/misc/Versions
index d9b596bd20..4a37d601ba 100644
--- a/misc/Versions
+++ b/misc/Versions
@@ -3,10 +3,6 @@ libc {
     # global variables
     ___brk_addr; __curbrk; __progname; __progname_full;
 
-    # functions which have an additional interface since they are
-    # are cancelable.
-    __libc_fsync; __libc_msync;
-
     # interface of malloc functions
     __sbrk; __getpagesize;
 
@@ -112,4 +108,9 @@ libc {
     # p*
     posix_madvise;
   }
+  GLIBC_PRIVATE {
+    # functions which have an additional interface since they are
+    # cancelable.
+    __libc_fsync; __libc_msync;
+  }
 }
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index 45d2ac3662..ff9a891e52 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -165,8 +165,10 @@
    (although this would be possible) since it generates warnings.  */
 #if __GNUC_PREREQ (3,1)
 # define __attribute_used__ __attribute__ ((__used__))
+# define __attribute_noinline__ __attribute__ ((__noinline__))
 #else
 # define __attribute_used__ __attribute__ ((__unused__))
+# define __attribute_noinline__ /* Ignore */
 #endif
 
 /* At some point during the gcc 2.8 development the `format_arg' attribute
diff --git a/nis/Versions b/nis/Versions
index 427fd6bba0..d6b6a972f6 100644
--- a/nis/Versions
+++ b/nis/Versions
@@ -60,20 +60,18 @@ libnsl {
 }
 
 libnss_compat {
-  GLIBC_2.0 {
+  GLIBC_PRIVATE {
     _nss_compat_endgrent; _nss_compat_endpwent; _nss_compat_endspent;
     _nss_compat_getgrent_r; _nss_compat_getgrgid_r; _nss_compat_getgrnam_r;
     _nss_compat_getpwent_r; _nss_compat_getpwnam_r; _nss_compat_getpwuid_r;
     _nss_compat_getspent_r; _nss_compat_getspnam_r;
     _nss_compat_setgrent; _nss_compat_setpwent; _nss_compat_setspent;
-  }
-  GLIBC_2.2 {
     _nss_compat_initgroups_dyn;
   }
 }
 
 libnss_nis {
-  GLIBC_2.0 {
+  GLIBC_PRIVATE {
     _nss_nis_endaliasent; _nss_nis_endetherent; _nss_nis_endgrent;
     _nss_nis_endhostent; _nss_nis_endnetent; _nss_nis_endnetgrent;
     _nss_nis_endprotoent; _nss_nis_endpwent; _nss_nis_endrpcent;
@@ -93,14 +91,12 @@ libnss_nis {
     _nss_nis_setgrent; _nss_nis_sethostent; _nss_nis_setnetent;
     _nss_nis_setnetgrent; _nss_nis_setprotoent; _nss_nis_setpwent;
     _nss_nis_setrpcent; _nss_nis_setservent; _nss_nis_setspent;
-  }
-  GLIBC_2.2 {
     _nss_nis_initgroups_dyn;
   }
 }
 
 libnss_nisplus {
-  GLIBC_2.1 {
+  GLIBC_PRIVATE {
     _nss_nisplus_endaliasent; _nss_nisplus_endetherent; _nss_nisplus_endgrent;
     _nss_nisplus_endhostent; _nss_nisplus_endnetent; _nss_nisplus_endnetgrent;
     _nss_nisplus_endprotoent; _nss_nisplus_endpwent; _nss_nisplus_endrpcent;
diff --git a/nss/Versions b/nss/Versions
index 26115f2d27..9ba0054abc 100644
--- a/nss/Versions
+++ b/nss/Versions
@@ -2,16 +2,18 @@ libc {
   GLIBC_2.0 {
      # functions used in other libraries
     __nss_passwd_lookup; __nss_group_lookup; __nss_hosts_lookup; __nss_next;
-    _nss_files_parse_grent; _nss_files_parse_pwent; _nss_files_parse_spent;
     __nss_database_lookup; __nss_configure_lookup;
   }
   GLIBC_2.2.2 {
     __nss_hostname_digits_dots;
   }
+  GLIBC_PRIVATE {
+    _nss_files_parse_grent; _nss_files_parse_pwent; _nss_files_parse_spent;
+  }
 }
 
 libnss_files {
-  GLIBC_2.0 {
+  GLIBC_PRIVATE {
     _nss_files_setaliasent;
     _nss_files_endaliasent;
     _nss_files_getaliasbyname_r;
@@ -81,8 +83,6 @@ libnss_files {
     _nss_files_getspnam_r;
 
     _nss_netgroup_parseline;
-  }
-  GLIBC_2.1 {
     _nss_files_getpublickey;
     _nss_files_getsecretkey;
   }
diff --git a/posix/Versions b/posix/Versions
index a302f7bed3..c79a042aa3 100644
--- a/posix/Versions
+++ b/posix/Versions
@@ -3,10 +3,6 @@ libc {
     # functions with special/multiple interfaces
     __bsd_getpgrp; __setpgid; __getpgid;
 
-    # functions which have an additional interface since they are
-    # are cancelable.
-    __libc_wait; __libc_waitpid; __libc_pause; __libc_nanosleep;
-
     # functions with required interface outside normal name space
     _exit;
 
@@ -86,11 +82,7 @@ libc {
   }
   GLIBC_2.1.2 {
     # functions used in other libraries
-    __libc_fork; __vfork;
-  }
-  GLIBC_2.1.3 {
-    # For the cancelation wrappers.
-    __libc_pread; __libc_pread64; __libc_pwrite; __libc_pwrite64;
+    __vfork;
   }
   GLIBC_2.2 {
     # p*
@@ -113,4 +105,10 @@ libc {
     # Extended Interface.
     fnmatch;
   }
+  GLIBC_PRIVATE {
+    # functions which have an additional interface since they are
+    # are cancelable.
+    __libc_wait; __libc_waitpid; __libc_pause; __libc_nanosleep; __libc_fork;
+    __libc_pread; __libc_pread64; __libc_pwrite; __libc_pwrite64;
+  }
 }
diff --git a/resolv/Versions b/resolv/Versions
index b76b112a4b..668f643363 100644
--- a/resolv/Versions
+++ b/resolv/Versions
@@ -22,7 +22,7 @@ libc {
     # r*
     __res_state; __res_init; __res_nclose; __res_ninit; _res_hconf;
   }
-  GLIBC_2.2.3 {
+  GLIBC_PRIVATE {
     __gai_sigqueue;
   }
 }
@@ -49,21 +49,21 @@ libresolv {
     __res_send;
     __sym_ntop; __sym_ntos; __sym_ston;
   }
-  GLIBC_2.1 {
-    # Needed in libnss_dns.
-    __ns_name_unpack; __ns_name_ntop;
-  }
   GLIBC_2.2 {
     __dn_expand;
-    __ns_get16; __ns_samename;
     __res_hostalias; __res_mkquery; __res_nmkquery; __res_nquery;
     __res_nquerydomain; __res_nsearch; __res_nsend; __res_query;
     __res_querydomain; __res_search;
   }
+  GLIBC_PRIVATE {
+    # Needed in libnss_dns.
+    __ns_name_unpack; __ns_name_ntop;
+    __ns_get16; __ns_samename;
+  }
 }
 
 libnss_dns {
-  GLIBC_2.0 {
+  GLIBC_PRIVATE {
     _nss_dns_gethostbyaddr_r; _nss_dns_gethostbyname2_r;
     _nss_dns_gethostbyname_r; _nss_dns_getnetbyaddr_r;
     _nss_dns_getnetbyname_r;
diff --git a/setjmp/Versions b/setjmp/Versions
index 68292ee70a..2baa49ae8a 100644
--- a/setjmp/Versions
+++ b/setjmp/Versions
@@ -9,7 +9,7 @@ libc {
     # s*
     setjmp;
   }
-  GLIBC_2.1 {
+  GLIBC_PRIVATE {
     # helper functions
     __libc_longjmp; __libc_siglongjmp;
   }
diff --git a/socket/Versions b/socket/Versions
index e9ac6093e5..b469e1932f 100644
--- a/socket/Versions
+++ b/socket/Versions
@@ -1,10 +1,5 @@
 libc {
   GLIBC_2.0 {
-    # functions which have an additional interface since they are
-    # are cancelable.
-    __libc_accept; __libc_send; __libc_recvfrom;
-    __libc_recvmsg; __libc_sendmsg; __libc_recv; __libc_sendto; __libc_connect;
-
     # functions used in other libraries
     __connect; __send;
 
@@ -36,4 +31,10 @@ libc {
     # Addition from P1003.1-200x
     sockatmark;
   }
+  GLIBC_PRIVATE {
+    # functions which have an additional interface since they are
+    # cancelable.
+    __libc_accept; __libc_send; __libc_recvfrom;
+    __libc_recvmsg; __libc_sendmsg; __libc_recv; __libc_sendto; __libc_connect;
+  }
 }
diff --git a/stdio-common/Versions b/stdio-common/Versions
index 11e0900f01..1afb73481f 100644
--- a/stdio-common/Versions
+++ b/stdio-common/Versions
@@ -1,8 +1,7 @@
 libc {
   GLIBC_2.0 {
     # global variables
-    _itoa_lower_digits; _itoa_upper_digits; _sys_errlist; _sys_nerr;
-    _sys_siglist;
+    _sys_errlist; _sys_nerr; _sys_siglist;
 
     # functions used in other libraries
     __printf_fp; __vfscanf;
@@ -47,4 +46,7 @@ libc {
     # t*
     tmpfile; tmpfile64;
   }
+  GLIBC_PRIVATE {
+    # global variables
+    _itoa_lower_digits; _itoa_upper_digits;
 }
diff --git a/stdlib/Versions b/stdlib/Versions
index 034125a200..6854c5a6d6 100644
--- a/stdlib/Versions
+++ b/stdlib/Versions
@@ -1,9 +1,5 @@
 libc {
   GLIBC_2.0 {
-    # functions which have an additional interface since they are
-    # are cancelable.
-    __libc_system;
-
     # functions with required interface outside normal name space
     __xpg_basename;
 
@@ -94,4 +90,9 @@ libc {
     # used by new G++ ABI
     __cxa_atexit; __cxa_finalize;
   }
+  GLIBC_PRIVATE {
+    # functions which have an additional interface since they are
+    # are cancelable.
+    __libc_system;
+  }
 }
diff --git a/sunrpc/Versions b/sunrpc/Versions
index 54b25df16f..4e40927ce7 100644
--- a/sunrpc/Versions
+++ b/sunrpc/Versions
@@ -110,7 +110,11 @@ libc {
     svc_getreq_common; svc_getreq_poll; svc_max_pollfd; svc_pollfd;
   }
   GLIBC_2.2.3 {
-    __rpc_thread_destroy; __rpc_thread_svc_fdset; __rpc_thread_createerr;
+    __rpc_thread_svc_fdset; __rpc_thread_createerr;
     __rpc_thread_svc_pollfd; __rpc_thread_svc_max_pollfd;
   }
+  GLIBC_PRIVATE {
+    # needed by libpthread.
+    __rpc_thread_destroy;
+  }
 }
diff --git a/sysdeps/hppa/Versions b/sysdeps/hppa/Versions
index c5f35d4971..909d50bbf5 100644
--- a/sysdeps/hppa/Versions
+++ b/sysdeps/hppa/Versions
@@ -1,5 +1,5 @@
 ld {
-  GLIBC_2.2 {
+  GLIBC_PRIVATE {
     # hppa specific functions in the dynamic linker, but used by libc.so.
     _dl_symbol_address; _dl_unmap; _dl_lookup_address;
     _dl_function_address;
diff --git a/sysdeps/ia64/Versions b/sysdeps/ia64/Versions
index 1e1387f9d4..70a183cc02 100644
--- a/sysdeps/ia64/Versions
+++ b/sysdeps/ia64/Versions
@@ -1,5 +1,5 @@
 ld {
-  GLIBC_2.2 {
+  GLIBC_PRIVATE {
     # ia64 specific functions in the dynamic linker, but used by libc.so.
     _dl_symbol_address; _dl_unmap; _dl_lookup_address;
     _dl_function_address;
diff --git a/sysdeps/ia64/fpu/Versions b/sysdeps/ia64/fpu/Versions
index 6e46589cee..1faea6458d 100644
--- a/sysdeps/ia64/fpu/Versions
+++ b/sysdeps/ia64/fpu/Versions
@@ -1,5 +1,5 @@
 libc {
-  GLIBC_2.2.3 {
+  GLIBC_PRIVATE {
     __libm_frexp_4; __libm_frexp_4f; __libm_frexp_4l; __libm_error_support;
   }
 }
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 7b920a31bb..7965e11b85 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -55,9 +55,6 @@ libc {
     # functions used in inline functions or macros
     __libc_sa_len;
 
-    # functions used in other libraries
-    __syscall_rt_sigqueueinfo;
-
     # Since we have new signals this structure changed.
     _sys_siglist; sys_siglist; sys_sigabbrev;
 
@@ -84,8 +81,7 @@ libc {
   }
   GLIBC_2.2 {
     # needed in other libraries.
-    __endmntent; __getmntent_r; __setmntent; __statfs; __libc_sigaction;
-    __sysctl;
+    __endmntent; __getmntent_r; __setmntent; __statfs; __sysctl;
 
     # ipc ctl interface change.
     semctl; shmctl; msgctl;
@@ -94,4 +90,11 @@ libc {
     # p*
     pivot_root;
   }
+  GLIBC_PRIVATE {
+    # needed by libpthread.
+    __libc_sigaction;
+
+    # functions used in other libraries
+    __syscall_rt_sigqueueinfo;
+  }
 }
diff --git a/sysdeps/unix/sysv/linux/fxstat64.c b/sysdeps/unix/sysv/linux/fxstat64.c
index fb1ee413fb..2afe9cd267 100644
--- a/sysdeps/unix/sysv/linux/fxstat64.c
+++ b/sysdeps/unix/sysv/linux/fxstat64.c
@@ -1,5 +1,5 @@
 /* fxstat64 using old-style Unix fstat system call.
-   Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2001,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
@@ -85,11 +85,16 @@ ___fxstat64 (int vers, int fd, struct stat64 *buf)
 #endif
 }
 
-#include <shlib-compat.h>
+#ifndef RTLD_STAT64
+# include <shlib-compat.h>
 
 versioned_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2);
 
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
+# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
 strong_alias (___fxstat64, __old__fxstat64)
 compat_symbol (libc, __old__fxstat64, __fxstat64, GLIBC_2_1);
+# endif
+
+#else
+strong_alias (___fxstat64, __fxstat64);
 #endif
diff --git a/sysdeps/unix/sysv/linux/i386/Versions b/sysdeps/unix/sysv/linux/i386/Versions
index 83445a1715..388fe8312b 100644
--- a/sysdeps/unix/sysv/linux/i386/Versions
+++ b/sysdeps/unix/sysv/linux/i386/Versions
@@ -9,7 +9,7 @@ libc {
     vm86;
   }
   GLIBC_2.1 {
-    __modify_ldt; modify_ldt;
+    modify_ldt;
   }
   GLIBC_2.2 {
     # functions used in other libraries
@@ -33,4 +33,7 @@ libc {
     # v*
     versionsort64;
   }
+  GLIBC_PRIVATE {
+    __modify_ldt;
+  }
 }
diff --git a/sysdeps/unix/sysv/linux/ia64/Versions b/sysdeps/unix/sysv/linux/ia64/Versions
index e307eca3b1..12d75425f4 100644
--- a/sysdeps/unix/sysv/linux/ia64/Versions
+++ b/sysdeps/unix/sysv/linux/ia64/Versions
@@ -1,9 +1,5 @@
 ld {
-  GLIBC_2.2 {
-    # global variables needed in the libc.
-    _dl_pagesize;
-  }
-  GLIBC_2.2.1 {
+  GLIBC_PRIVATE {
     _dl_var_init;
   }
 }
diff --git a/sysdeps/unix/sysv/linux/lxstat64.c b/sysdeps/unix/sysv/linux/lxstat64.c
index 2c7dafe78f..94540a97ab 100644
--- a/sysdeps/unix/sysv/linux/lxstat64.c
+++ b/sysdeps/unix/sysv/linux/lxstat64.c
@@ -1,5 +1,5 @@
 /* lxstat64 using old-style Unix lstat system call.
-   Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2001,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
@@ -87,11 +87,16 @@ ___lxstat64 (int vers, const char *name, struct stat64 *buf)
 #endif
 }
 
-#include <shlib-compat.h>
+#ifndef RTLD_STAT64
+# include <shlib-compat.h>
 
 versioned_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2);
 
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
+# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
 strong_alias (___lxstat64, __old__lxstat64)
 compat_symbol (libc, __old__lxstat64, __lxstat64, GLIBC_2_1);
+# endif
+
+#else
+strong_alias (___lxstat64, __lxstat64);
 #endif
diff --git a/sysdeps/unix/sysv/linux/x86_64/Versions b/sysdeps/unix/sysv/linux/x86_64/Versions
index e28893a932..3735871a24 100644
--- a/sysdeps/unix/sysv/linux/x86_64/Versions
+++ b/sysdeps/unix/sysv/linux/x86_64/Versions
@@ -4,6 +4,9 @@ libc {
 
     ioperm; iopl;
 
-    __modify_ldt; modify_ldt;
+    modify_ldt;
+  }
+  GLIBC_PRIVATE {
+    __modify_ldt;
   }
 }
diff --git a/sysdeps/unix/sysv/linux/xstat64.c b/sysdeps/unix/sysv/linux/xstat64.c
index 98ecbfd0ea..c40378458b 100644
--- a/sysdeps/unix/sysv/linux/xstat64.c
+++ b/sysdeps/unix/sysv/linux/xstat64.c
@@ -1,5 +1,5 @@
 /* xstat64 using old-style Unix stat system call.
-   Copyright (C) 1991,95,96,97,98,99,2000,2001 Free Software Foundation, Inc.
+   Copyright (C) 1991,95,96,97,98,99,2000,01,02 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
@@ -91,11 +91,16 @@ ___xstat64 (int vers, const char *name, struct stat64 *buf)
 #endif
 }
 
-#include <shlib-compat.h>
+#ifndef RTLD_STAT64
+# include <shlib-compat.h>
 
 versioned_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2);
 
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
+# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
 strong_alias (___xstat64, __old__xstat64)
 compat_symbol (libc, __old__xstat64, __xstat64, GLIBC_2_1);
+# endif
+
+#else
+strong_alias (___xstat64, __xstat64);
 #endif
diff --git a/termios/Versions b/termios/Versions
index c6acfb2047..ddd2705305 100644
--- a/termios/Versions
+++ b/termios/Versions
@@ -1,9 +1,5 @@
 libc {
   GLIBC_2.0 {
-    # functions which have an additional interface since they are
-    # are cancelable.
-    __libc_tcdrain;
-
     # c*
     cfgetispeed; cfgetospeed; cfmakeraw; cfsetispeed; cfsetospeed; cfsetspeed;
 
@@ -15,4 +11,9 @@ libc {
     # t*
     tcgetsid;
   }
+  GLIBC_PRIVATE {
+    # functions which have an additional interface since they are
+    # are cancelable.
+    __libc_tcdrain;
+  }
 }