6bd344f
--- glibc-20041021T0701/ChangeLog	21 Oct 2004 01:29:31 -0000	1.8910
6bd344f
+++ glibc-20041021T0701-fedora/ChangeLog	21 Oct 2004 07:16:40 -0000	1.8782.2.27
8660b87
@@ -1,3 +1,8 @@
8660b87
+2004-10-20  Jakub Jelinek  <jakub@redhat.com>
8660b87
+
8660b87
+	* sysdeps/unix/sysv/linux/readonly-area.c (__readonly_area): If /proc
8660b87
+	is not mounted, return 1.
8660b87
+
8660b87
 2004-10-20  Roland McGrath  <roland@redhat.com>
8660b87
 
6bd344f
 	* Makeconfig ($(common-objpfx)shlib-versions.v.i): Check also
6bd344f
@@ -70,6 +75,11 @@
8660b87
 	* debug/catchsegv.sh: Update copyright year.
8660b87
 	Use mktemp to create segv_output file.
8660b87
 
cfeb07d
+2004-10-19  Jakub Jelinek  <jakub@redhat.com>
468791b
+
cfeb07d
+	* include/features.h (__USE_FORTIFY_LEVEL): Enable even with
cfeb07d
+	Red Hat gcc4 4.0.0 and above.
468791b
+
8660b87
 2004-10-18  Jakub Jelinek  <jakub@redhat.com>
8660b87
 
8660b87
 	* elf/dl-libc.c (__libc_dlsym_private, __libc_register_dl_open_hook):
6bd344f
@@ -1053,6 +1063,22 @@
c7aa529
 	* string/string.h: Add __nonnull annotations.
c7aa529
 	* stdlib/stdlib.h: Likewise.
c7aa529
 
c7aa529
+2004-09-20  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* sysdeps/unix/alpha/sysdep.h (inline_syscall[0-6]): Change name
c7aa529
+	argument to numbers from syscall names.
c7aa529
+	(INLINE_SYSCALL1): Pass __NR_##name to inline_syscall##nr.
c7aa529
+	(INTERNAL_SYSCALL_NCS): Renamed from...
c7aa529
+	(INTERNAL_SYSCALL_1): ... this.  Use INTERNAL_SYSCALL_NCS.
c7aa529
+	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
c7aa529
+	(INTERNAL_SYSCALL_NCS): Define.
c7aa529
+	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
c7aa529
+	(INTERNAL_SYSCALL_NCS): Likewise.
c7aa529
+	* sysdeps/unix/sysv/linux/sparc/sysdep.h (inline_syscall[0-6]):
c7aa529
+	Change name argument to numbers from syscall names.
c7aa529
+	(INLINE_SYSCALL, INTERNAL_SYSCALL): Adjust.
c7aa529
+	(INTERNAL_SYSCALL_NCS): Define.
c7aa529
+
c7aa529
 2004-09-20  H.J. Lu  <hongjiu.lu@intel.com>
c7aa529
 
c7aa529
 	* sysdeps/unix/sysv/linux/ia64/sysdep.h (DO_INLINE_SYSCALL):
6bd344f
@@ -1782,6 +1808,23 @@
c7aa529
 	before return type.
c7aa529
 	* locale/localename.c (__current_locale_name): Likewise.
c7aa529
 
c7aa529
+2004-08-31  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* elf/ldconfig.c (parse_conf): Add prefix argument, prepend it
c7aa529
+	before arguments to add_dir and pass to parse_conf_include.
c7aa529
+	(parse_conf_include): Add prefix argument, pass it down to
c7aa529
+	parse_conf.
c7aa529
+	(main): Call arch_startup.  Adjust parse_conf caller.
c7aa529
+	Call add_arch_dirs.
c7aa529
+	* sysdeps/generic/dl-cache.h (arch_startup, add_arch_dirs): Define.
c7aa529
+	* sysdeps/unix/sysv/linux/i386/dl-cache.h: New file.
c7aa529
+	* sysdeps/unix/sysv/linux/ia64/dl-cache.h (EMUL_HACK, arch_startup,
c7aa529
+	add_arch_dirs): Define.
c7aa529
+	* sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: Prepend
c7aa529
+	/emul/ia32-linux before the 32-bit ld.so pathname.
c7aa529
+	* sysdeps/unix/sysv/linux/ia64/dl-procinfo.c: New file.
c7aa529
+	* sysdeps/unix/sysv/linux/ia64/dl-procinfo.h: New file.
c7aa529
+
c7aa529
 2004-08-30  Roland McGrath  <roland@frob.com>
c7aa529
 
c7aa529
 	* scripts/extract-abilist.awk: If `lastversion' variable defined, omit
6bd344f
@@ -1938,6 +1981,22 @@
c7aa529
 	* resolv/nss_dns/dns-canon.c (_nss_dns_getcanonname_r): Initialize
c7aa529
 	status to NSS_STATUS_UNAVAIL.
c7aa529
 
c7aa529
+2004-08-19  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* sysdeps/powerpc/powerpc64/configure.in: New file.
c7aa529
+	* sysdeps/powerpc/powerpc64/configure: Rebuilt.
c7aa529
+	* config.h.in (USE_PPC64_OVERLAPPING_OPD): Add.
c7aa529
+	* configure.in (HAVE_ASM_GLOBAL_DOT_NAME): Remove.
c7aa529
+	* configure: Rebuilt.
c7aa529
+	* sysdeps/powerpc/powerpc64/sysdep.h: Formatting.
c7aa529
+	(OPD_ENT, BODY_LABEL, ENTRY_1, ENTRY_2, END_2, DOT_PREFIX,
c7aa529
+	BODY_PREFIX): Define.
c7aa529
+	(ENTRY, DOT_LABEL, END, TRACEBACK, END_GEN_TB, EALIGN): Support
c7aa529
+	HAVE_ASM_GLOBAL_DOT_NAME or no dot symbols,
c7aa529
+	USE_PPC64_OVERLAPPING_OPD or never overlapping .opd entries.
c7aa529
+	* sysdeps/powerpc/powerpc64/dl-machine.h: Include sysdep.h.
c7aa529
+	(TRAMPOLINE_TEMPLATE, RTLD_START): Use the new sysdep.h macros.
c7aa529
+
c7aa529
 2004-08-19  Ulrich Drepper  <drepper@redhat.com>
c7aa529
 
c7aa529
 	* sysdeps/posix/getaddrinfo.c (gaih_inet): Use h->h_name in the
6bd344f
@@ -2242,6 +2301,12 @@
c7aa529
 
c7aa529
 	* iconvdata/testdata/ISO-2022-JP-3: Regenerated.
c7aa529
 
c7aa529
+2004-07-23  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	[BZ #284]
c7aa529
+	* include/features.h (_POSIX_SOURCE, _POSIX_C_SOURCE): Define
c7aa529
+	if _XOPEN_SOURCE >= 500 even if __STRICT_ANSI__ is defined.
c7aa529
+
c7aa529
 2004-08-10  Alfred M. Szmidt  <ams@kemisten.nu>
c7aa529
 
c7aa529
 	* sysdeps/generic/bits/in.h (struct ip_mreq): Remove definition.
6bd344f
--- glibc-20041021T0701/ChangeLog.11	10 Nov 2000 03:31:36 -0000	1.1
6bd344f
+++ glibc-20041021T0701-fedora/ChangeLog.11	22 Sep 2004 21:20:47 -0000	1.1.4.1
c7aa529
@@ -1352,6 +1352,11 @@
c7aa529
 	* sysdeps/unix/sysv/linux/mips/sys/tas.h: Add missing .mips0 at the
c7aa529
 	end of inline assembler code.
c7aa529
 
c7aa529
+2000-10-02  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* sunrpc/svc_udp.c (svcudp_recv): Set msg_controllen to all
c7aa529
+	remaining xp_pad space.
c7aa529
+
c7aa529
 2000-10-02  Ulrich Drepper  <drepper@redhat.com>
c7aa529
 
c7aa529
 	* include/features.h [__USE_FILE_OFFSET && !__REDIRECT]: Define
c7aa529
@@ -9280,6 +9285,12 @@
c7aa529
 	syscall.
c7aa529
 	* sysdeps/unix/sysv/linux/mips/truncate64.c: Likewise.
c7aa529
 
c7aa529
+2000-05-30  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* resolv/res_query.c (res_nsearch): Remove unused variable
c7aa529
+	root_on_list. If dots >= statp->ndots and as is querydomain
c7aa529
+	fails, keep searching.
c7aa529
+
c7aa529
 2000-05-30  Ulrich Drepper  <drepper@redhat.com>
c7aa529
 
c7aa529
 	* sysdeps/unix/sysv/linux/alpha/oldglob.c (__old_glob): Loose __P.
c7aa529
@@ -9480,6 +9491,11 @@
c7aa529
 	* sysdeps/i386/fpu/bits/mathinline.h: Define expm1 inline only if
c7aa529
 	__FAST_MATH__ is defined.
c7aa529
 
c7aa529
+2000-05-22  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Avoid using ?:
c7aa529
+	with omitted middle operand.
c7aa529
+
c7aa529
 2000-05-22  Andreas Jaeger  <aj@suse.de>
c7aa529
 
c7aa529
 	* math/Makefile: Add -D__FAST_MATH__ to CFLAGS-test-ifloat.c,
c7aa529
@@ -9720,6 +9736,11 @@
c7aa529
 
c7aa529
 2000-05-17  Jakub Jelinek  <jakub@redhat.com>
c7aa529
 
c7aa529
+	* inet/rcmd.c (rcmd_af): If *ahost cannot be resolved, include
c7aa529
+	unresolved hostname in the message.
c7aa529
+
c7aa529
+2000-05-17  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
 	* sysdeps/arm/bits/huge_val.h (HUGE_VAL, HUGE_VALF): Add
c7aa529
 	__extension__ to hexadecimal floating constant notation.
c7aa529
 	* sysdeps/i386/bits/huge_val.h (HUGE_VAL, HUGE_VALF, HUGE_VALL):
6bd344f
--- glibc-20041021T0701/ChangeLog.12	16 Aug 2001 05:24:54 -0000	1.1
6bd344f
+++ glibc-20041021T0701-fedora/ChangeLog.12	22 Sep 2004 21:20:47 -0000	1.1.4.1
c7aa529
@@ -7729,6 +7729,13 @@
c7aa529
 
c7aa529
 	* Versions.def [ld]: Add GLIBC_2.2.1.
c7aa529
 
c7aa529
+2001-01-10  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* malloc/memusage.c (me): If not SUID/SGID, allow creating new
c7aa529
+	$MEMUSAGE_OUTPUT file.
c7aa529
+	* sysdeps/generic/segfault.c (segfault.c): If not SUID/SGID, allow
c7aa529
+	creating new $SEGFAULT_OUTPUT_NAME file.
c7aa529
+
c7aa529
 2001-01-10  H.J. Lu  <hjl@gnu.org>
c7aa529
 
c7aa529
 	* elf/dl-libc.c (do_dlopen): Call DL_STATIC_INIT for static binaries.
c7aa529
@@ -8130,6 +8137,11 @@
c7aa529
 	* sysdeps/powerpc/soft-fp/Versions: Likewise.
c7aa529
 	* sysdeps/sparc/sparc64/soft-fp/Versions: Likewise.
c7aa529
 
c7aa529
+2001-01-02  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* locale/setlocale.c (setlocale): Don't allocate/free category name
c7aa529
+	unnecessarily.
c7aa529
+
c7aa529
 2001-01-02  Franz Sirl	<Franz.Sirl-kernel@lauterbach.com>
c7aa529
 
c7aa529
 	* sysdeps/powerpc/dl-machine.c (__process_machine_rela): Fix typo.
6bd344f
--- glibc-20041021T0701/csu/elf-init.c	16 Aug 2004 04:51:00 -0000	1.3
6bd344f
+++ glibc-20041021T0701-fedora/csu/elf-init.c	22 Sep 2004 21:20:47 -0000	1.3.2.1
c7aa529
@@ -44,6 +44,24 @@ extern void (*__init_array_start []) (vo
c7aa529
 extern void (*__init_array_end []) (void) attribute_hidden;
c7aa529
 extern void (*__fini_array_start []) (void) attribute_hidden;
c7aa529
 extern void (*__fini_array_end []) (void) attribute_hidden;
c7aa529
+
c7aa529
+# if defined HAVE_VISIBILITY_ATTRIBUTE \
c7aa529
+     && (defined SHARED || defined LIBC_NONSHARED)
c7aa529
+#  define hidden_undef_2(x) #x
c7aa529
+#  define hidden_undef_1(x) hidden_undef_2 (x)
c7aa529
+#  define hidden_undef(x) \
c7aa529
+  __asm (hidden_undef_1 (ASM_GLOBAL_DIRECTIVE) " " #x); \
c7aa529
+  __asm (".hidden " #x);
c7aa529
+# else
c7aa529
+#  define hidden_undef(x)
c7aa529
+# endif
c7aa529
+
c7aa529
+hidden_undef (__preinit_array_start)
c7aa529
+hidden_undef (__preinit_array_end)
c7aa529
+hidden_undef (__init_array_start)
c7aa529
+hidden_undef (__init_array_end)
c7aa529
+hidden_undef (__fini_array_start)
c7aa529
+hidden_undef (__fini_array_end)
c7aa529
 #endif
c7aa529
 
c7aa529
 /* These function symbols are provided for the .init/.fini section entry
6bd344f
--- glibc-20041021T0701/elf/dl-support.c	14 Oct 2004 02:06:18 -0000	1.86
6bd344f
+++ glibc-20041021T0701-fedora/elf/dl-support.c	14 Oct 2004 05:57:53 -0000	1.84.2.3
b709c7e
@@ -274,6 +274,11 @@ _dl_non_dynamic_init (void)
c7aa529
   if (_dl_platform != NULL)
c7aa529
     _dl_platformlen = strlen (_dl_platform);
c7aa529
 
c7aa529
+#if defined (__i386__) && !defined (USE_TLS)
c7aa529
+  /* Load libs not using TLS.  */
c7aa529
+  _dl_osversion = 0x20205;
c7aa529
+#endif
c7aa529
+
c7aa529
   /* Scan for a program header telling us the stack is nonexecutable.  */
c7aa529
   if (_dl_phdr != NULL)
c7aa529
     for (uint_fast16_t i = 0; i < _dl_phnum; ++i)
6bd344f
--- glibc-20041021T0701/elf/ldconfig.c	10 Aug 2004 04:04:32 -0000	1.47
6bd344f
+++ glibc-20041021T0701-fedora/elf/ldconfig.c	22 Sep 2004 21:20:48 -0000	1.47.2.1
c7aa529
@@ -944,17 +944,19 @@ search_dirs (void)
c7aa529
 
c7aa529
 
c7aa529
 static void parse_conf_include (const char *config_file, unsigned int lineno,
c7aa529
-				bool do_chroot, const char *pattern);
c7aa529
+				const char *prefix, bool do_chroot,
c7aa529
+				const char *pattern);
c7aa529
 
c7aa529
 /* Parse configuration file.  */
c7aa529
 static void
c7aa529
-parse_conf (const char *filename, bool do_chroot)
c7aa529
+parse_conf (const char *filename, const char *prefix, bool do_chroot)
c7aa529
 {
c7aa529
   FILE *file = NULL;
c7aa529
   char *line = NULL;
c7aa529
   const char *canon;
c7aa529
   size_t len = 0;
c7aa529
   unsigned int lineno;
c7aa529
+  size_t prefix_len = prefix ? strlen (prefix) : 0;
c7aa529
 
c7aa529
   if (do_chroot && opt_chroot)
c7aa529
     {
c7aa529
@@ -1015,7 +1017,14 @@ parse_conf (const char *filename, bool d
c7aa529
 	  cp += 8;
c7aa529
 	  while ((dir = strsep (&cp, " \t")) != NULL)
c7aa529
 	    if (dir[0] != '\0')
c7aa529
-	      parse_conf_include (filename, lineno, do_chroot, dir);
c7aa529
+	      parse_conf_include (filename, lineno, prefix, do_chroot, dir);
c7aa529
+	}
c7aa529
+      else if (prefix != NULL)
c7aa529
+	{
c7aa529
+	  size_t cp_len = strlen (cp);
c7aa529
+	  char new_cp [prefix_len + cp_len + 1];
c7aa529
+	  memcpy (mempcpy (new_cp, prefix, prefix_len), cp, cp_len + 1);
c7aa529
+	  add_dir (new_cp);
c7aa529
 	}
c7aa529
       else
c7aa529
 	add_dir (cp);
c7aa529
@@ -1031,7 +1040,7 @@ parse_conf (const char *filename, bool d
c7aa529
    config files to read.  */
c7aa529
 static void
c7aa529
 parse_conf_include (const char *config_file, unsigned int lineno,
c7aa529
-		    bool do_chroot, const char *pattern)
c7aa529
+		    const char *prefix, bool do_chroot, const char *pattern)
c7aa529
 {
c7aa529
   if (opt_chroot && pattern[0] != '/')
c7aa529
     error (EXIT_FAILURE, 0,
c7aa529
@@ -1061,7 +1070,7 @@ parse_conf_include (const char *config_f
c7aa529
     {
c7aa529
     case 0:
c7aa529
       for (size_t i = 0; i < gl.gl_pathc; ++i)
c7aa529
-	parse_conf (gl.gl_pathv[i], false);
c7aa529
+	parse_conf (gl.gl_pathv[i], prefix, false);
c7aa529
       globfree64 (&gl);
c7aa529
       break;
c7aa529
 
c7aa529
@@ -1101,6 +1110,8 @@ main (int argc, char **argv)
c7aa529
 {
c7aa529
   int remaining;
c7aa529
 
c7aa529
+  arch_startup (argc, argv);
c7aa529
+
c7aa529
   /* Parse and process arguments.  */
c7aa529
   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
c7aa529
 
c7aa529
@@ -1209,12 +1220,14 @@ main (int argc, char **argv)
c7aa529
 
c7aa529
   if (!opt_only_cline)
c7aa529
     {
c7aa529
-      parse_conf (config_file, true);
c7aa529
+      parse_conf (config_file, NULL, true);
c7aa529
 
c7aa529
       /* Always add the standard search paths.  */
c7aa529
       add_system_dir (SLIBDIR);
c7aa529
       if (strcmp (SLIBDIR, LIBDIR))
c7aa529
 	add_system_dir (LIBDIR);
c7aa529
+
c7aa529
+      add_arch_dirs (config_file);
c7aa529
     }
c7aa529
 
c7aa529
   search_dirs ();
6bd344f
--- glibc-20041021T0701/elf/rtld.c	14 Oct 2004 09:23:31 -0000	1.335
6bd344f
+++ glibc-20041021T0701-fedora/elf/rtld.c	14 Oct 2004 09:57:38 -0000	1.330.2.6
b488809
@@ -1087,6 +1087,53 @@ of this helper program; chances are you 
b709c7e
   ++GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
c7aa529
   ++GL(dl_load_adds);
c7aa529
 
c7aa529
+#if defined(__i386__)
c7aa529
+  /* Force non-TLS libraries for glibc 2.0 binaries
c7aa529
+     or if a buggy binary references non-TLS errno or h_errno.  */
b488809
+  if (__builtin_expect (main_map->l_info[DT_NUM + DT_THISPROCNUM
b488809
+                                         + DT_VERSIONTAGIDX (DT_VERNEED)]
b488809
+                        == NULL, 0)
b488809
+      && main_map->l_info[DT_DEBUG])
c7aa529
+    GLRO(dl_osversion) = 0x20205;
c7aa529
+  else if ((__builtin_expect (mode, normal) != normal
b488809
+	    || main_map->l_info[ADDRIDX (DT_GNU_LIBLIST)] == NULL)
c7aa529
+	      /* Only binaries have DT_DEBUG dynamic tags...  */
b488809
+	   && main_map->l_info[DT_DEBUG])
c7aa529
+    {
c7aa529
+      /* Workaround for buggy binaries.  This doesn't handle buggy
c7aa529
+	 libraries.  */
c7aa529
+      bool buggy = false;
b488809
+      const ElfW(Sym) *symtab = (const void *) D_PTR (main_map,
b488809
+                                                      l_info[DT_SYMTAB]);
b488809
+      const char *strtab = (const void *) D_PTR (main_map,
b488809
+                                                 l_info[DT_STRTAB]);
c7aa529
+      Elf_Symndx symidx;
b488809
+      for (symidx = main_map->l_buckets[0x6c994f % main_map->l_nbuckets];
c7aa529
+	   symidx != STN_UNDEF;
b488809
+	   symidx = main_map->l_chain[symidx])
c7aa529
+	{
c7aa529
+	  if (__builtin_expect (strcmp (strtab + symtab[symidx].st_name,
c7aa529
+					"errno") == 0, 0)
c7aa529
+	      && ELFW(ST_TYPE) (symtab[symidx].st_info) != STT_TLS)
c7aa529
+	    buggy = true;
c7aa529
+	}
b488809
+      for (symidx = main_map->l_buckets[0xe5c992f % main_map->l_nbuckets];
c7aa529
+	   symidx != STN_UNDEF;
b488809
+	   symidx = main_map->l_chain[symidx])
c7aa529
+	{
c7aa529
+	  if (__builtin_expect (strcmp (strtab + symtab[symidx].st_name,
c7aa529
+					"h_errno") == 0, 0)
c7aa529
+	      && ELFW(ST_TYPE) (symtab[symidx].st_info) != STT_TLS)
c7aa529
+	    buggy = true;
c7aa529
+	}
c7aa529
+      if (__builtin_expect (buggy, false) && GLRO(dl_osversion) > 0x20401)
c7aa529
+	{
c7aa529
+	  GLRO(dl_osversion) = 0x20401;
c7aa529
+	  _dl_error_printf ("Incorrectly built binary which accesses errno or h_errno directly. Needs to be fixed.\n");
c7aa529
+	}
c7aa529
+    }
c7aa529
+#endif
c7aa529
+
c7aa529
   /* If LD_USE_LOAD_BIAS env variable has not been seen, default
c7aa529
      to not using bias for non-prelinked PIEs and libraries
c7aa529
      and using it for executables or prelinked PIEs or libraries.  */
b488809
@@ -1259,6 +1306,67 @@ ERROR: ld.so: object '%s' from %s cannot
c7aa529
 	}
c7aa529
     }
c7aa529
 
c7aa529
+
c7aa529
+#if defined(__i386__) || defined(__alpha__) || (defined(__sparc__) && !defined(__arch64__))
c7aa529
+  /*
c7aa529
+   * Modifications by Red Hat Software
c7aa529
+   *
c7aa529
+   * Deal with the broken binaries from the non-versioned ages of glibc.
c7aa529
+   * If a binary does not have version information enabled, we assume that
c7aa529
+   * it is a glibc 2.0 binary and we load a compatibility library to try to
c7aa529
+   * overcome binary incompatibilities.
c7aa529
+   *			Blame: gafton@redhat.com
c7aa529
+   */
c7aa529
+#define LIB_NOVERSION "/lib/libNoVersion.so.1"
c7aa529
+
b488809
+  if (__builtin_expect (main_map->l_info[DT_NUM + DT_THISPROCNUM
b488809
+                                         + DT_VERSIONTAGIDX (DT_VERNEED)]
b488809
+                        == NULL, 0)
b488809
+      && (main_map->l_info[DT_DEBUG]
b488809
+          || !(GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)))
c7aa529
+    {
c7aa529
+      struct stat test_st;
c7aa529
+      int test_fd;
c7aa529
+      int can_load;
c7aa529
+      
c7aa529
+      HP_TIMING_NOW (start);
c7aa529
+	   
c7aa529
+/*       _dl_sysdep_message("Loading compatibility library... ", NULL); */
c7aa529
+
c7aa529
+      can_load = 1;
c7aa529
+      test_fd = __open (LIB_NOVERSION, O_RDONLY);
c7aa529
+      if (test_fd < 0) {
c7aa529
+	  can_load = 0;
c7aa529
+/* 	  _dl_sysdep_message(" Can't find " LIB_NOVERSION "\n",  NULL); */
c7aa529
+      } else {
c7aa529
+	  if (__fxstat (_STAT_VER, test_fd, &test_st) < 0 || test_st.st_size == 0) {
c7aa529
+	      can_load = 0;
c7aa529
+/* 	      _dl_sysdep_message(" Can't stat " LIB_NOVERSION "\n",  NULL); */
c7aa529
+	  }
c7aa529
+      }
c7aa529
+      
c7aa529
+      if (test_fd >= 0) /* open did no fail.. */
c7aa529
+	  __close(test_fd); /* avoid fd leaks */
c7aa529
+
c7aa529
+      if (can_load != 0) {
c7aa529
+	  struct link_map *new_map;
b488809
+	  new_map = _dl_map_object (main_map, LIB_NOVERSION,
b488809
+				    1, lt_library, 0, 0, LM_ID_BASE);
c7aa529
+	  if (++new_map->l_opencount == 1) {
c7aa529
+	      /* It is no duplicate.  */
c7aa529
+	      ++npreloads;
c7aa529
+/* 	      _dl_sysdep_message(" DONE\n", NULL); */
c7aa529
+	  } else {
c7aa529
+/* 	      _dl_sysdep_message(" FAILED\n", NULL); */
c7aa529
+	  }
c7aa529
+      }
c7aa529
+	  
c7aa529
+      HP_TIMING_NOW (stop);
c7aa529
+      HP_TIMING_DIFF (diff, start, stop);
c7aa529
+      HP_TIMING_ACCUM_NT (load_time, diff);
c7aa529
+    }
c7aa529
+#endif
c7aa529
+
c7aa529
   if (__builtin_expect (npreloads, 0) != 0)
c7aa529
     {
c7aa529
       /* Set up PRELOADS with a vector of the preloaded libraries.  */
6bd344f
--- glibc-20041021T0701/elf/tst-tls10.h	17 Apr 2003 19:19:01 -0000	1.1
6bd344f
+++ glibc-20041021T0701-fedora/elf/tst-tls10.h	22 Sep 2004 21:20:48 -0000	1.1.2.1
c7aa529
@@ -1,8 +1,8 @@
c7aa529
 #include <tls.h>
c7aa529
 #include <stdlib.h>
c7aa529
 
c7aa529
-#if defined USE_TLS && defined HAVE___THREAD \
c7aa529
-    && defined HAVE_TLS_MODEL_ATTRIBUTE
c7aa529
+#if defined USE_TLS \
c7aa529
+    && (0 || (defined HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE))
c7aa529
 # define USE_TLS__THREAD
c7aa529
 
c7aa529
 struct A
6bd344f
--- glibc-20041021T0701/iconv/iconvconfig.c	24 Sep 2004 17:09:04 -0000	1.20
6bd344f
+++ glibc-20041021T0701-fedora/iconv/iconvconfig.c	22 Sep 2004 21:20:51 -0000	1.19.2.1
c7aa529
@@ -989,6 +989,34 @@ next_prime (uint32_t seed)
c7aa529
                               module name offset
c7aa529
                          (following last entry with step count 0)
c7aa529
 */
c7aa529
+
c7aa529
+static struct hash_entry *hash_table;
c7aa529
+static size_t hash_size;
c7aa529
+
c7aa529
+/* Function to insert the names.  */
c7aa529
+static void name_insert (const void *nodep, VISIT value, int level)
c7aa529
+{
c7aa529
+  struct name *name;
c7aa529
+  unsigned int idx;
c7aa529
+  unsigned int hval2;
c7aa529
+
c7aa529
+  if (value != leaf && value != postorder)
c7aa529
+    return;
c7aa529
+
c7aa529
+  name = *(struct name **) nodep;
c7aa529
+  idx = name->hashval % hash_size;
c7aa529
+  hval2 = 1 + name->hashval % (hash_size - 2);
c7aa529
+
c7aa529
+  while (hash_table[idx].string_offset != 0)
c7aa529
+    if ((idx += hval2) >= hash_size)
c7aa529
+      idx -= hash_size;
c7aa529
+
c7aa529
+  hash_table[idx].string_offset = strtaboffset (name->strent);
c7aa529
+
c7aa529
+  assert (name->module_idx != -1);
c7aa529
+  hash_table[idx].module_idx = name->module_idx;
c7aa529
+}
c7aa529
+
c7aa529
 static int
c7aa529
 write_output (void)
c7aa529
 {
c7aa529
@@ -996,8 +1024,6 @@ write_output (void)
c7aa529
   char *string_table;
c7aa529
   size_t string_table_size;
c7aa529
   struct gconvcache_header header;
c7aa529
-  struct hash_entry *hash_table;
c7aa529
-  size_t hash_size;
c7aa529
   struct module_entry *module_table;
c7aa529
   char *extra_table;
c7aa529
   char *cur_extra_table;
c7aa529
@@ -1010,31 +1036,6 @@ write_output (void)
c7aa529
 		+ strlen (".XXXXXX")];
c7aa529
   char finalname[prefix_len + sizeof (GCONV_MODULES_CACHE)];
c7aa529
 
c7aa529
-  /* Function to insert the names.  */
c7aa529
-  auto void
c7aa529
-  name_insert (const void *nodep, VISIT value, int level)
c7aa529
-    {
c7aa529
-      struct name *name;
c7aa529
-      unsigned int idx;
c7aa529
-      unsigned int hval2;
c7aa529
-
c7aa529
-      if (value != leaf && value != postorder)
c7aa529
-	return;
c7aa529
-
c7aa529
-      name = *(struct name **) nodep;
c7aa529
-      idx = name->hashval % hash_size;
c7aa529
-      hval2 = 1 + name->hashval % (hash_size - 2);
c7aa529
-
c7aa529
-      while (hash_table[idx].string_offset != 0)
c7aa529
-	if ((idx += hval2) >= hash_size)
c7aa529
-	  idx -= hash_size;
c7aa529
-
c7aa529
-      hash_table[idx].string_offset = strtaboffset (name->strent);
c7aa529
-
c7aa529
-      assert (name->module_idx != -1);
c7aa529
-      hash_table[idx].module_idx = name->module_idx;
c7aa529
-    }
c7aa529
-
c7aa529
   /* Open the output file.  */
c7aa529
   assert (GCONV_MODULES_CACHE[0] == '/');
c7aa529
   strcpy (stpcpy (mempcpy (tmpfname, prefix, prefix_len), GCONV_MODULES_CACHE),
6bd344f
--- glibc-20041021T0701/include/features.h	18 Oct 2004 04:17:16 -0000	1.36
6bd344f
+++ glibc-20041021T0701-fedora/include/features.h	18 Oct 2004 22:56:48 -0000	1.35.2.3
468791b
@@ -181,8 +181,8 @@
c7aa529
 
c7aa529
 /* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2
c7aa529
    (and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined).  */
c7aa529
-#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
c7aa529
-     !defined _POSIX_C_SOURCE)
c7aa529
+#if ((!defined __STRICT_ANSI__ || (_XOPEN_SOURCE - 0) >= 500) && \
c7aa529
+     !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE)
c7aa529
 # define _POSIX_SOURCE	1
c7aa529
 # if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500
c7aa529
 #  define _POSIX_C_SOURCE	2
cfeb07d
@@ -262,7 +262,9 @@
cfeb07d
 # define __USE_REENTRANT	1
cfeb07d
 #endif
cfeb07d
 
cfeb07d
-#if _FORTIFY_SOURCE > 0 && __GNUC_PREREQ (4, 1) && __OPTIMIZE__ > 0
cfeb07d
+#if _FORTIFY_SOURCE > 0 && __OPTIMIZE__ > 0 \
cfeb07d
+    && (__GNUC_PREREQ (4, 1) \
cfeb07d
+        || (defined __GNUC_RH_RELEASE__ && __GNUC_PREREQ (4, 0)))
cfeb07d
 # if _FORTIFY_SOURCE == 1
cfeb07d
 #  define __USE_FORTIFY_LEVEL 1
cfeb07d
 # elif _FORTIFY_SOURCE > 1
6bd344f
--- glibc-20041021T0701/intl/locale.alias	4 Dec 2003 07:57:47 -0000	1.23
6bd344f
+++ glibc-20041021T0701-fedora/intl/locale.alias	22 Sep 2004 21:20:53 -0000	1.23.2.1
c7aa529
@@ -58,8 +58,6 @@ korean		ko_KR.eucKR
c7aa529
 korean.euc 	ko_KR.eucKR
c7aa529
 ko_KR		ko_KR.eucKR
c7aa529
 lithuanian      lt_LT.ISO-8859-13
c7aa529
-no_NO		nb_NO.ISO-8859-1
c7aa529
-no_NO.ISO-8859-1 nb_NO.ISO-8859-1
c7aa529
 norwegian       nb_NO.ISO-8859-1
c7aa529
 nynorsk		nn_NO.ISO-8859-1
c7aa529
 polish          pl_PL.ISO-8859-2
6bd344f
--- glibc-20041021T0701/libio/stdio.h	18 Oct 2004 04:17:15 -0000	1.79
6bd344f
+++ glibc-20041021T0701-fedora/libio/stdio.h	18 Oct 2004 09:58:44 -0000	1.78.2.2
c7aa529
@@ -142,10 +142,12 @@ typedef _G_fpos64_t fpos64_t;
c7aa529
 extern struct _IO_FILE *stdin;		/* Standard input stream.  */
c7aa529
 extern struct _IO_FILE *stdout;		/* Standard output stream.  */
c7aa529
 extern struct _IO_FILE *stderr;		/* Standard error output stream.  */
c7aa529
+#ifdef __STDC__
c7aa529
 /* C89/C99 say they're macros.  Make them happy.  */
c7aa529
 #define stdin stdin
c7aa529
 #define stdout stdout
c7aa529
 #define stderr stderr
c7aa529
+#endif
c7aa529
 
c7aa529
 __BEGIN_NAMESPACE_STD
c7aa529
 /* Remove file FILENAME.  */
6bd344f
--- glibc-20041021T0701/linuxthreads/ChangeLog	19 Oct 2004 05:13:11 -0000	1.825
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/ChangeLog	20 Oct 2004 10:47:15 -0000	1.817.2.7
8660b87
@@ -671,6 +671,12 @@
c7aa529
 	(pthread_barrierattr_setpshared): Return EINVAL if pshared
c7aa529
 	is neither PTHREAD_PROCESS_PRIVATE nor PTHREAD_PROCESS_SHARED.
c7aa529
 
c7aa529
+2003-09-02  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* sysdeps/sparc/tls.h (TLS_TCB_SIZE): If in ld.so and NPTL struct
c7aa529
+	pthread is bigger than struct _pthread_descr_struct, use NPTL struct
c7aa529
+	pthread size.
c7aa529
+
c7aa529
 2003-09-02  Ulrich Drepper  <drepper@redhat.com>
c7aa529
 
c7aa529
 	* sysdeps/unix/sysv/linux/i386/dl-sysdep.h
8660b87
@@ -803,6 +809,34 @@
c7aa529
 
c7aa529
 2003-07-22  Jakub Jelinek  <jakub@redhat.com>
c7aa529
 
c7aa529
+	* sysdeps/alpha/tls.h (TLS_INIT_TCB_SIZE, TLS_TCB_SIZE): Change to 0.
c7aa529
+	(TLS_INIT_TCB_ALIGN, TLS_TCB_ALIGN): Alignment of struct
c7aa529
+	_pthread_descr_struct.
c7aa529
+	(TLS_PRE_TCB_SIZE): Add sizeof (tcbhead_t) and pad to align.
c7aa529
+	If in ld.so and NPTL struct pthread is bigger than struct
c7aa529
+	_pthread_descr_struct, use NPTL struct pthread size.
c7aa529
+	(TLS_TCB_OFFSET): Define.
c7aa529
+	(INSTALL_DTV, INSTALL_NEW_DTV, GET_DTV, TLS_INIT_TP, THREAD_DTV,
c7aa529
+	THREAD_SELF, INIT_THREAD_SELF): Changed to match NPTL tls.h
c7aa529
+	definitions.
c7aa529
+	* sysdeps/i386/tls.h (TLS_TCB_SIZE): If in ld.so and NPTL struct
c7aa529
+	pthread is bigger than struct _pthread_descr_struct, use NPTL struct
c7aa529
+	pthread size.
c7aa529
+	* sysdeps/ia64/tls.h (TLS_PRE_TCB_SIZE): Likewise.
c7aa529
+	* sysdeps/powerpc/tls.h (TLS_PRE_TCB_SIZE): Likewise.
c7aa529
+	* sysdeps/s390/tls.h (TLS_TCB_SIZE): Likewise.
c7aa529
+	* sysdeps/sh/tls.h (TLS_PRE_TCB_SIZE): Likewise.
c7aa529
+	* sysdeps/x86_64/tls.h (TLS_TCB_SIZE): Likewise.
c7aa529
+	* sysdeps/pthread/Makefile (gen-as-const-headers): Add
c7aa529
+	nptl-struct-pthread.sym if nptl tree is present.
c7aa529
+	(before-compile): Add $(common-objpfx)nptl-struct-pthread.h
c7aa529
+	if nptl tree is not present.
c7aa529
+	(common-generated): Add nptl-struct-pthread.h.
c7aa529
+	($(common-objpfx)nptl-struct-pthread.h): New rule.
c7aa529
+	* sysdeps/pthread/nptl-struct-pthread.sym: New file.
c7aa529
+
c7aa529
+2003-07-22  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
 	* descr.h (struct _pthread_descr_struct): Provide p_res member
c7aa529
 	even if USE_TLS && HAVE___THREAD.
c7aa529
 	* sysdeps/pthread/res-state.c (__res_state): Return __resp
6bd344f
--- glibc-20041021T0701/linuxthreads/Makefile	19 Oct 2004 05:12:58 -0000	1.95
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/Makefile	20 Oct 2004 10:47:17 -0000	1.94.2.2
8660b87
@@ -256,15 +256,18 @@ $(addprefix $(objpfx), \
c7aa529
   $(filter-out $(tests-static) $(tests-reverse) unload, \
c7aa529
     $(tests) $(test-srcs))): $(objpfx)libpthread.so \
c7aa529
 			     $(objpfx)libpthread_nonshared.a
c7aa529
-# $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so,
c7aa529
+# $(objpfx)linklibc.so is used instead of $(common-objpfx)libc.so,
c7aa529
 # since otherwise libpthread.so comes before libc.so when linking.
c7aa529
 $(addprefix $(objpfx), $(tests-reverse)): \
c7aa529
-  $(objpfx)../libc.so $(objpfx)libpthread.so \
c7aa529
+  $(objpfx)linklibc.so $(objpfx)libpthread.so \
c7aa529
   $(objpfx)libpthread_nonshared.a
c7aa529
 $(objpfx)../libc.so: $(common-objpfx)libc.so ;
c7aa529
 $(addprefix $(objpfx),$(librt-tests)): $(common-objpfx)rt/librt.so
c7aa529
 $(objpfx)unload: $(common-objpfx)dlfcn/libdl.so
c7aa529
 $(objpfx)unload.out: $(objpfx)libpthread.so $(objpfx)libpthread_nonshared.a
c7aa529
+$(objpfx)linklibc.so: $(common-objpfx)libc.so
c7aa529
+	ln -s ../libc.so $@
c7aa529
+generated += libclink.so
c7aa529
 else
c7aa529
 $(addprefix $(objpfx),$(tests) $(test-srcs)): $(objpfx)libpthread.a
c7aa529
 $(addprefix $(objpfx),$(librt-tests)): $(common-objpfx)rt/librt.a
6bd344f
--- glibc-20041021T0701/linuxthreads/cancel.c	22 Feb 2003 00:55:21 -0000	1.23
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/cancel.c	22 Sep 2004 21:20:55 -0000	1.23.2.1
c7aa529
@@ -230,5 +230,6 @@ void __pthread_perform_cleanup(char *cur
c7aa529
     }
c7aa529
 
c7aa529
   /* And the TSD which needs special help.  */
c7aa529
+  THREAD_SETMEM (self, p_cancelstate, PTHREAD_CANCEL_DISABLE);
c7aa529
   __libc_thread_freeres ();
c7aa529
 }
6bd344f
--- glibc-20041021T0701/linuxthreads/lockfile.c	18 Dec 2002 01:16:46 -0000	1.10
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/lockfile.c	22 Sep 2004 21:20:55 -0000	1.10.2.1
c7aa529
@@ -74,7 +74,11 @@ __fresetlockfiles (void)
c7aa529
   __pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE_NP);
c7aa529
 
c7aa529
   for (i = _IO_iter_begin(); i != _IO_iter_end(); i = _IO_iter_next(i))
c7aa529
-    __pthread_mutex_init (_IO_iter_file(i)->_lock, &attr);
c7aa529
+    {
c7aa529
+      _IO_lock_t *_lock = _IO_iter_file(i)->_lock;
c7aa529
+      if (_lock)
c7aa529
+	__pthread_mutex_init (_lock, &attr);
c7aa529
+    }
c7aa529
 
c7aa529
   __pthread_mutexattr_destroy (&attr);
c7aa529
 
6bd344f
--- glibc-20041021T0701/linuxthreads/semaphore.h	17 Apr 2004 23:01:39 -0000	1.13
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/semaphore.h	22 Sep 2004 21:20:55 -0000	1.13.2.1
c7aa529
@@ -21,6 +21,7 @@
c7aa529
 # define __need_timespec
c7aa529
 # include <time.h>
c7aa529
 #endif
c7aa529
+#include <bits/pthreadtypes.h>
c7aa529
 
c7aa529
 #ifndef _PTHREAD_DESCR_DEFINED
c7aa529
 /* Thread descriptors.  Needed for `sem_t' definition.  */
6bd344f
--- glibc-20041021T0701/linuxthreads/tst-tls1.h	2 Sep 2003 00:29:30 -0000	1.1
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/tst-tls1.h	22 Sep 2004 21:20:55 -0000	1.1.2.1
c7aa529
@@ -2,7 +2,7 @@
c7aa529
 #include <stdlib.h>
c7aa529
 #include <tls.h>
c7aa529
 
c7aa529
-#if USE_TLS && HAVE___THREAD
c7aa529
+#if USE_TLS && (0 || HAVE___THREAD)
c7aa529
 
c7aa529
 struct tls_obj
c7aa529
 {
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/alpha/tls.h	30 Jan 2003 21:03:40 -0000	1.5
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/alpha/tls.h	22 Sep 2004 21:20:55 -0000	1.5.2.1
c7aa529
@@ -53,54 +53,76 @@ typedef struct
c7aa529
 #  include <sysdep.h>
c7aa529
 
c7aa529
 /* This is the size of the initial TCB.  */
c7aa529
-#  define TLS_INIT_TCB_SIZE	sizeof (tcbhead_t)
c7aa529
+#  define TLS_INIT_TCB_SIZE	0
c7aa529
 
c7aa529
 /* Alignment requirements for the initial TCB.  */
c7aa529
-#  define TLS_INIT_TCB_ALIGN	__alignof__ (tcbhead_t)
c7aa529
+#  define TLS_INIT_TCB_ALIGN	__alignof__ (struct _pthread_descr_struct)
c7aa529
 
c7aa529
 /* This is the size of the TCB.  */
c7aa529
-#  define TLS_TCB_SIZE		sizeof (tcbhead_t)
c7aa529
+#  define TLS_TCB_SIZE		0
c7aa529
 
c7aa529
 /* Alignment requirements for the TCB.  */
c7aa529
-#  define TLS_TCB_ALIGN		__alignof__ (tcbhead_t)
c7aa529
+#  define TLS_TCB_ALIGN		__alignof__ (struct _pthread_descr_struct)
c7aa529
 
c7aa529
 /* This is the size we need before TCB.  */
c7aa529
-#  define TLS_PRE_TCB_SIZE	sizeof (struct _pthread_descr_struct)
c7aa529
+#  ifndef IS_IN_rtld
c7aa529
+#   define TLS_PRE_TCB_SIZE \
c7aa529
+  (sizeof (struct _pthread_descr_struct)				\
c7aa529
+   + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1)))
c7aa529
+#  else
c7aa529
+#   include <nptl-struct-pthread.h>
c7aa529
+#   define TLS_PRE_TCB_SIZE \
c7aa529
+  ((sizeof (struct _pthread_descr_struct) > NPTL_STRUCT_PTHREAD_SIZE	\
c7aa529
+    ? sizeof (struct _pthread_descr_struct) : NPTL_STRUCT_PTHREAD_SIZE)	\
c7aa529
+   + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1)))
c7aa529
+#  endif
c7aa529
 
c7aa529
 /* The DTV is allocated at the TP; the TCB is placed elsewhere.  */
c7aa529
 #  define TLS_DTV_AT_TP 1
c7aa529
 
c7aa529
+/* The following assumes that TP (R2 or R13) points to the end of the
c7aa529
+   TCB + 0x7000 (per the ABI).  This implies that TCB address is
c7aa529
+   TP - 0x7000.  As we define TLS_DTV_AT_TP we can
c7aa529
+   assume that the pthread struct is allocated immediately ahead of the
c7aa529
+   TCB.  This implies that the pthread_descr address is
c7aa529
+   TP - (TLS_PRE_TCB_SIZE + 0x7000).  */
c7aa529
+/* ??? PPC uses offset 0x7000; seems like a good idea for alpha too,
c7aa529
+   but binutils not yet changed to match.  */
c7aa529
+#  define TLS_TCB_OFFSET 0
c7aa529
+
c7aa529
 /* Install the dtv pointer.  The pointer passed is to the element with
c7aa529
    index -1 which contain the length.  */
c7aa529
 #  define INSTALL_DTV(TCBP, DTVP) \
c7aa529
-  (((tcbhead_t *) (TCBP))->dtv = (DTVP) + 1)
c7aa529
+  (((tcbhead_t *) (TCBP))[-1].dtv = (DTVP) + 1)
c7aa529
 
c7aa529
 /* Install new dtv for current thread.  */
c7aa529
 #  define INSTALL_NEW_DTV(DTV) \
c7aa529
-  (((tcbhead_t *)__builtin_thread_pointer ())->dtv = (DTV))
c7aa529
+  (THREAD_DTV() = (DTV))
c7aa529
 
c7aa529
 /* Return dtv of given thread descriptor.  */
c7aa529
 #  define GET_DTV(TCBP) \
c7aa529
-  (((tcbhead_t *) (TCBP))->dtv)
c7aa529
+  (((tcbhead_t *) (TCBP))[-1].dtv)
c7aa529
 
c7aa529
 /* Code to initially initialize the thread pointer.  This might need
c7aa529
    special attention since 'errno' is not yet available and if the
c7aa529
    operation can cause a failure 'errno' must not be touched.  */
c7aa529
 # define TLS_INIT_TP(TCBP, SECONDCALL) \
c7aa529
-  (__builtin_set_thread_pointer (TCBP), 0)
c7aa529
+  (__builtin_set_thread_pointer ((void *) (TCBP) + TLS_TCB_OFFSET), NULL)
c7aa529
 
c7aa529
 /* Return the address of the dtv for the current thread.  */
c7aa529
 #  define THREAD_DTV() \
c7aa529
-  (((tcbhead_t *)__builtin_thread_pointer ())->dtv)
c7aa529
+  (((tcbhead_t *) (__builtin_thread_pointer () - TLS_TCB_OFFSET))[-1].dtv)
c7aa529
 
c7aa529
 /* Return the thread descriptor for the current thread.  */
c7aa529
 #  undef THREAD_SELF
c7aa529
 #  define THREAD_SELF \
c7aa529
-  ((pthread_descr)__builtin_thread_pointer () - 1)
c7aa529
+  ((pthread_descr) (__builtin_thread_pointer () \
c7aa529
+		    - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE))
c7aa529
 
c7aa529
 #  undef INIT_THREAD_SELF
c7aa529
 #  define INIT_THREAD_SELF(DESCR, NR) \
c7aa529
-  __builtin_set_thread_pointer ((struct _pthread_descr_struct *)(DESCR) + 1)
c7aa529
+  __builtin_set_thread_pointer ((char *)(DESCR) \
c7aa529
+				+ TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE)
c7aa529
 
c7aa529
 /* Get the thread descriptor definition.  */
c7aa529
 #  include <linuxthreads/descr.h>
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/i386/tls.h	19 Oct 2004 05:12:58 -0000	1.37
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/i386/tls.h	20 Oct 2004 10:47:17 -0000	1.35.2.4
c7aa529
@@ -81,7 +81,14 @@ typedef struct
c7aa529
 #  define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
c7aa529
 
c7aa529
 /* This is the size of the TCB.  */
c7aa529
-#  define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  ifndef IS_IN_rtld
c7aa529
+#   define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  else
c7aa529
+#   include <nptl-struct-pthread.h>
c7aa529
+#   define TLS_TCB_SIZE \
c7aa529
+  (sizeof (struct _pthread_descr_struct) > NPTL_STRUCT_PTHREAD_SIZE	\
c7aa529
+   ? sizeof (struct _pthread_descr_struct) : NPTL_STRUCT_PTHREAD_SIZE)
c7aa529
+#  endif
c7aa529
 
c7aa529
 /* Alignment requirements for the TCB.  */
c7aa529
 #  define TLS_TCB_ALIGN __alignof__ (struct _pthread_descr_struct)
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/ia64/tls.h	8 Jul 2004 21:20:57 -0000	1.9
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/ia64/tls.h	22 Sep 2004 21:20:55 -0000	1.9.2.1
c7aa529
@@ -60,7 +60,14 @@ typedef struct
c7aa529
 #  define TLS_TCB_SIZE sizeof (tcbhead_t)
c7aa529
 
c7aa529
 /* This is the size we need before TCB.  */
c7aa529
-#  define TLS_PRE_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  ifndef IS_IN_rtld
c7aa529
+#   define TLS_PRE_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  else
c7aa529
+#   include <nptl-struct-pthread.h>
c7aa529
+#   define TLS_PRE_TCB_SIZE \
c7aa529
+  (sizeof (struct _pthread_descr_struct) > NPTL_STRUCT_PTHREAD_SIZE	\
c7aa529
+   ? sizeof (struct _pthread_descr_struct) : NPTL_STRUCT_PTHREAD_SIZE)
c7aa529
+#  endif
c7aa529
 
c7aa529
 /* Alignment requirements for the TCB.  */
c7aa529
 #  define TLS_TCB_ALIGN __alignof__ (struct _pthread_descr_struct)
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/powerpc/tls.h	9 Apr 2004 19:09:42 -0000	1.8
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/powerpc/tls.h	22 Sep 2004 21:20:55 -0000	1.8.2.1
c7aa529
@@ -64,11 +64,19 @@ typedef struct
c7aa529
 #  define TLS_TCB_ALIGN		__alignof__ (struct _pthread_descr_struct)
c7aa529
 
c7aa529
 /* This is the size we need before TCB.  */
c7aa529
-#  define TLS_PRE_TCB_SIZE \
c7aa529
+#  ifndef IS_IN_rtld
c7aa529
+#   define TLS_PRE_TCB_SIZE \
c7aa529
   (sizeof (struct _pthread_descr_struct)				      \
c7aa529
    + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1)))
c7aa529
+#  else
c7aa529
+#   include <nptl-struct-pthread.h>
c7aa529
+#   define TLS_PRE_TCB_SIZE \
c7aa529
+  ((sizeof (struct _pthread_descr_struct) > NPTL_STRUCT_PTHREAD_SIZE	      \
c7aa529
+    ? sizeof (struct _pthread_descr_struct) : NPTL_STRUCT_PTHREAD_SIZE)	      \
c7aa529
+   + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1)))
c7aa529
+#  endif
c7aa529
 
c7aa529
-/* The following assumes that TP (R2 or R13) is points to the end of the
c7aa529
+/* The following assumes that TP (R2 or R13) points to the end of the
c7aa529
    TCB + 0x7000 (per the ABI).  This implies that TCB address is
c7aa529
    TP - 0x7000.  As we define TLS_DTV_AT_TP we can
c7aa529
    assume that the pthread_descr is allocated immediately ahead of the
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/pthread/Makefile	14 Aug 2003 00:14:22 -0000	1.7
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/pthread/Makefile	22 Sep 2004 21:20:56 -0000	1.7.2.1
c7aa529
@@ -12,3 +12,15 @@ endif
c7aa529
 ifeq ($(subdir),posix)
c7aa529
 CFLAGS-confstr.c += -DLIBPTHREAD_VERSION="\"$(shell sed 's/\(.*\) by .*/\1/' ../linuxthreads/Banner)\""
c7aa529
 endif
c7aa529
+
c7aa529
+ifeq ($(subdir),csu)
c7aa529
+# Find out the size of NPTL struct pthread
c7aa529
+ifneq (,$(wildcard $(..)nptl/descr.h))
c7aa529
+gen-as-const-headers += nptl-struct-pthread.sym
c7aa529
+else
c7aa529
+before-compile += $(common-objpfx)nptl-struct-pthread.h
c7aa529
+common-generated += nptl-struct-pthread.h
c7aa529
+$(common-objpfx)nptl-struct-pthread.h:
c7aa529
+	@echo '#define NPTL_STRUCT_PTHREAD_SIZE 0' > $@
c7aa529
+endif
c7aa529
+endif
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/pthread/nptl-struct-pthread.sym 1 Jan 1970 00:00:00 -0000
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/pthread/nptl-struct-pthread.sym	22 Sep 2004 21:20:56 -0000	1.1.2.1
c7aa529
@@ -0,0 +1,13 @@
c7aa529
+#ifdef HAVE_TLS_SUPPORT
c7aa529
+# ifndef HAVE_FORCED_UNWIND
c7aa529
+#  define HAVE_FORCED_UNWIND 1
c7aa529
+# endif
c7aa529
+# define __need_struct_pthread_size
c7aa529
+# include <nptl/descr.h>
c7aa529
+#endif
c7aa529
+
c7aa529
+--
c7aa529
+
c7aa529
+#ifdef HAVE_TLS_SUPPORT
c7aa529
+NPTL_STRUCT_PTHREAD_SIZE	sizeof (struct pthread)
c7aa529
+#endif
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/s390/tls.h	30 Jan 2003 18:34:11 -0000	1.3
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/s390/tls.h	22 Sep 2004 21:20:56 -0000	1.3.2.1
c7aa529
@@ -72,7 +72,14 @@ typedef struct
c7aa529
 #  define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
c7aa529
 
c7aa529
 /* This is the size of the TCB.  */
c7aa529
-#  define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  ifndef IS_IN_rtld
c7aa529
+#   define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  else
c7aa529
+#   include <nptl-struct-pthread.h>
c7aa529
+#   define TLS_TCB_SIZE \
c7aa529
+  (sizeof (struct _pthread_descr_struct) > NPTL_STRUCT_PTHREAD_SIZE	\
c7aa529
+   ? sizeof (struct _pthread_descr_struct) : NPTL_STRUCT_PTHREAD_SIZE)
c7aa529
+#  endif
c7aa529
 
c7aa529
 /* Alignment requirements for the TCB.  */
c7aa529
 #  define TLS_TCB_ALIGN __alignof__ (struct _pthread_descr_struct)
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/sh/tls.h	2 Mar 2003 11:44:20 -0000	1.9
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/sh/tls.h	22 Sep 2004 21:20:57 -0000	1.9.2.1
c7aa529
@@ -64,7 +64,14 @@ typedef struct
c7aa529
 #  define TLS_TCB_SIZE sizeof (tcbhead_t)
c7aa529
 
c7aa529
 /* This is the size we need before TCB.  */
c7aa529
-#  define TLS_PRE_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  ifndef IS_IN_rtld
c7aa529
+#   define TLS_PRE_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  else
c7aa529
+#   include <nptl-struct-pthread.h>
c7aa529
+#   define TLS_PRE_TCB_SIZE \
c7aa529
+  (sizeof (struct _pthread_descr_struct) > NPTL_STRUCT_PTHREAD_SIZE	\
c7aa529
+   ? sizeof (struct _pthread_descr_struct) : NPTL_STRUCT_PTHREAD_SIZE)
c7aa529
+#  endif
c7aa529
 
c7aa529
 /* Alignment requirements for the TCB.  */
c7aa529
 #  define TLS_TCB_ALIGN __alignof__ (struct _pthread_descr_struct)
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/sparc/tls.h	4 Feb 2003 20:41:02 -0000	1.3
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/sparc/tls.h	22 Sep 2004 21:20:57 -0000	1.3.2.1
c7aa529
@@ -64,7 +64,14 @@ typedef struct
c7aa529
 #  define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
c7aa529
 
c7aa529
 /* This is the size of the TCB.  */
c7aa529
-#  define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  ifndef IS_IN_rtld
c7aa529
+#   define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  else
c7aa529
+#   include <nptl-struct-pthread.h>
c7aa529
+#   define TLS_TCB_SIZE \
c7aa529
+  (sizeof (struct _pthread_descr_struct) > NPTL_STRUCT_PTHREAD_SIZE	\
c7aa529
+   ? sizeof (struct _pthread_descr_struct) : NPTL_STRUCT_PTHREAD_SIZE)
c7aa529
+#  endif
c7aa529
 
c7aa529
 /* Alignment requirements for the TCB.  */
c7aa529
 #  define TLS_TCB_ALIGN __alignof__ (struct _pthread_descr_struct)
6bd344f
--- glibc-20041021T0701/linuxthreads/sysdeps/x86_64/tls.h	18 Apr 2004 02:32:25 -0000	1.6
6bd344f
+++ glibc-20041021T0701-fedora/linuxthreads/sysdeps/x86_64/tls.h	22 Sep 2004 21:20:57 -0000	1.6.2.1
c7aa529
@@ -66,7 +66,14 @@ typedef struct
c7aa529
 #  define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
c7aa529
 
c7aa529
 /* This is the size of the TCB.  */
c7aa529
-#  define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  ifndef IS_IN_rtld
c7aa529
+#   define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
c7aa529
+#  else
c7aa529
+#   include <nptl-struct-pthread.h>
c7aa529
+#   define TLS_TCB_SIZE \
c7aa529
+  (sizeof (struct _pthread_descr_struct) > NPTL_STRUCT_PTHREAD_SIZE	\
c7aa529
+   ? sizeof (struct _pthread_descr_struct) : NPTL_STRUCT_PTHREAD_SIZE)
c7aa529
+#  endif
c7aa529
 
c7aa529
 /* Alignment requirements for the TCB.  */
c7aa529
 #  define TLS_TCB_ALIGN __alignof__ (struct _pthread_descr_struct)
6bd344f
--- glibc-20041021T0701/locale/iso-4217.def	10 Aug 2004 05:10:38 -0000	1.15
6bd344f
+++ glibc-20041021T0701-fedora/locale/iso-4217.def	22 Sep 2004 21:20:57 -0000	1.15.2.1
c7aa529
@@ -8,6 +8,7 @@
c7aa529
  *
c7aa529
  * !!! The list has to be sorted !!!
c7aa529
  */
c7aa529
+DEFINE_INT_CURR("ADP")		/* Andorran Peseta -> EUR  */
c7aa529
 DEFINE_INT_CURR("AED")		/* United Arab Emirates Dirham  */
c7aa529
 DEFINE_INT_CURR("AFA")		/* Afghanistan Afgani  */
c7aa529
 DEFINE_INT_CURR("ALL")		/* Albanian Lek  */
c7aa529
@@ -15,12 +16,14 @@ DEFINE_INT_CURR("AMD")		/* Armenia Dram 
c7aa529
 DEFINE_INT_CURR("ANG")		/* Netherlands Antilles  */
c7aa529
 DEFINE_INT_CURR("AOA")		/* Angolan Kwanza  */
c7aa529
 DEFINE_INT_CURR("ARS")		/* Argentine Peso  */
c7aa529
+DEFINE_INT_CURR("ATS")		/* Austrian Schilling -> EUR  */
c7aa529
 DEFINE_INT_CURR("AUD")		/* Australian Dollar  */
c7aa529
 DEFINE_INT_CURR("AWG")		/* Aruba Guilder  */
c7aa529
 DEFINE_INT_CURR("AZM")		/* Azerbaijan Manat  */
c7aa529
 DEFINE_INT_CURR("BAK")		/* Bosnian and Herzegovina Convertible Mark  */
c7aa529
 DEFINE_INT_CURR("BBD")		/* Barbados Dollar  */
c7aa529
 DEFINE_INT_CURR("BDT")		/* Bangladesh Taka  */
c7aa529
+DEFINE_INT_CURR("BEF")		/* Belgian Franc -> EUR  */
c7aa529
 DEFINE_INT_CURR("BGL")		/* Bulgarian Lev  */
c7aa529
 DEFINE_INT_CURR("BHD")		/* Bahraini Dinar  */
c7aa529
 DEFINE_INT_CURR("BIF")		/* Burundi Franc  */
c7aa529
@@ -44,6 +47,7 @@ DEFINE_INT_CURR("CUP")		/* Cuban Peso  *
c7aa529
 DEFINE_INT_CURR("CVE")		/* Cape Verde Escudo  */
c7aa529
 DEFINE_INT_CURR("CYP")		/* Cypriot Pound  */
c7aa529
 DEFINE_INT_CURR("CZK")		/* Czech Koruna  */
c7aa529
+DEFINE_INT_CURR("DEM")		/* German Mark -> EUR  */
c7aa529
 DEFINE_INT_CURR("DJF")		/* Djibouti Franc  */
c7aa529
 DEFINE_INT_CURR("DKK")		/* Danish Krone (Faroe Islands, Greenland)  */
c7aa529
 DEFINE_INT_CURR("DOP")		/* Dominican Republic  */
c7aa529
@@ -51,16 +55,20 @@ DEFINE_INT_CURR("DZD")		/* Algerian Dina
c7aa529
 DEFINE_INT_CURR("EEK")		/* Estonian Kroon  */
c7aa529
 DEFINE_INT_CURR("EGP")		/* Egyptian Pound  */
c7aa529
 DEFINE_INT_CURR("ERN")		/* Eritrean Nakfa  */
c7aa529
+DEFINE_INT_CURR("ESP")		/* Spanish Peseta -> EUR  */
c7aa529
 DEFINE_INT_CURR("ETB")		/* Ethiopian Birr  */
c7aa529
 DEFINE_INT_CURR("EUR")		/* European Union Euro  */
c7aa529
+DEFINE_INT_CURR("FIM")		/* Finnish Markka -> EUR  */
c7aa529
 DEFINE_INT_CURR("FJD")		/* Fiji Dollar  */
c7aa529
 DEFINE_INT_CURR("FKP")		/* Falkland Islands Pound (Malvinas)  */
c7aa529
+DEFINE_INT_CURR("FRF")		/* French Franc -> EUR  */
c7aa529
 DEFINE_INT_CURR("GBP")		/* British Pound  */
c7aa529
 DEFINE_INT_CURR("GEL")		/* Georgia Lari  */
c7aa529
 DEFINE_INT_CURR("GHC")		/* Ghana Cedi  */
c7aa529
 DEFINE_INT_CURR("GIP")		/* Gibraltar Pound  */
c7aa529
 DEFINE_INT_CURR("GMD")		/* Gambian Dalasi  */
c7aa529
 DEFINE_INT_CURR("GNF")		/* Guinea Franc  */
c7aa529
+DEFINE_INT_CURR("GRD")		/* Greek Drachma -> EUR  */
c7aa529
 DEFINE_INT_CURR("GTQ")		/* Guatemala Quetzal  */
c7aa529
 DEFINE_INT_CURR("GYD")		/* Guyana Dollar  */
c7aa529
 DEFINE_INT_CURR("HKD")		/* Hong Kong Dollar  */
c7aa529
@@ -69,12 +77,14 @@ DEFINE_INT_CURR("HRK")		/* Croatia Kuna 
c7aa529
 DEFINE_INT_CURR("HTG")		/* Haiti Gourde  */
c7aa529
 DEFINE_INT_CURR("HUF")		/* Hungarian Forint  */
c7aa529
 DEFINE_INT_CURR("IDR")		/* Indonesia Rupiah  */
c7aa529
+DEFINE_INT_CURR("IEP")		/* Irish Pound -> EUR  */
c7aa529
 DEFINE_INT_CURR("ILS")		/* Israeli Shekel  */
c7aa529
 DEFINE_INT_CURR("IMP")		/* Isle of Man Pounds  */
c7aa529
 DEFINE_INT_CURR("INR")		/* Indian Rupee (Bhutan)  */
c7aa529
 DEFINE_INT_CURR("IQD")		/* Iraqi Dinar  */
c7aa529
 DEFINE_INT_CURR("IRR")		/* Iranian Rial  */
c7aa529
 DEFINE_INT_CURR("ISK")		/* Iceland Krona  */
c7aa529
+DEFINE_INT_CURR("ITL")		/* Italian Lira -> EUR  */
c7aa529
 DEFINE_INT_CURR("JMD")		/* Jamaican Dollar  */
c7aa529
 DEFINE_INT_CURR("JOD")		/* Jordanian Dinar  */
c7aa529
 DEFINE_INT_CURR("JPY")		/* Japanese Yen  */
c7aa529
@@ -93,6 +103,7 @@ DEFINE_INT_CURR("LKR")		/* Sri Lankan Ru
c7aa529
 DEFINE_INT_CURR("LRD")		/* Liberian Dollar  */
c7aa529
 DEFINE_INT_CURR("LSL")		/* Lesotho Maloti  */
c7aa529
 DEFINE_INT_CURR("LTL")		/* Lithuanian Litas  */
c7aa529
+DEFINE_INT_CURR("LUF")		/* Luxembourg Franc -> EUR  */
c7aa529
 DEFINE_INT_CURR("LVL")		/* Latvia Lat  */
c7aa529
 DEFINE_INT_CURR("LYD")		/* Libyan Arab Jamahiriya Dinar  */
c7aa529
 DEFINE_INT_CURR("MAD")		/* Moroccan Dirham  */
c7aa529
@@ -113,6 +124,7 @@ DEFINE_INT_CURR("MZM")		/* Mozambique Me
c7aa529
 DEFINE_INT_CURR("NAD")		/* Namibia Dollar  */
c7aa529
 DEFINE_INT_CURR("NGN")		/* Nigeria Naira  */
c7aa529
 DEFINE_INT_CURR("NIO")		/* Nicaragua Cordoba Oro  */
c7aa529
+DEFINE_INT_CURR("NLG")		/* Netherlands Guilder -> EUR  */
c7aa529
 DEFINE_INT_CURR("NOK")		/* Norwegian Krone  */
c7aa529
 DEFINE_INT_CURR("NPR")		/* Nepalese Rupee  */
c7aa529
 DEFINE_INT_CURR("NZD")		/* New Zealand Dollar  */
c7aa529
@@ -123,6 +135,7 @@ DEFINE_INT_CURR("PGK")		/* Papau New Gui
c7aa529
 DEFINE_INT_CURR("PHP")		/* Philippines Peso  */
c7aa529
 DEFINE_INT_CURR("PKR")		/* Pakistan Rupee  */
c7aa529
 DEFINE_INT_CURR("PLN")		/* Polish Zloty  */
c7aa529
+DEFINE_INT_CURR("PTE")		/* Portugese Escudo -> EUR  */
c7aa529
 DEFINE_INT_CURR("PYG")		/* Paraguay Guarani  */
c7aa529
 DEFINE_INT_CURR("QAR")		/* Qatar Rial  */
c7aa529
 DEFINE_INT_CURR("ROL")		/* Romanian Leu  */
6bd344f
--- glibc-20041021T0701/locale/programs/3level.h	13 Jun 2003 20:45:38 -0000	1.5
6bd344f
+++ glibc-20041021T0701-fedora/locale/programs/3level.h	22 Sep 2004 21:20:58 -0000	1.5.2.1
c7aa529
@@ -204,6 +204,42 @@ CONCAT(TABLE,_iterate) (struct TABLE *t,
c7aa529
 	}
c7aa529
     }
c7aa529
 }
c7aa529
+
c7aa529
+/* GCC ATM seems to do a poor job with pointers to nested functions passed
c7aa529
+   to inlined functions.  Help it a little bit with this hack.  */
c7aa529
+#define wchead_table_iterate(tp, fn) \
c7aa529
+do									      \
c7aa529
+  {									      \
c7aa529
+    struct wchead_table *t = (tp);					      \
c7aa529
+    uint32_t index1;							      \
c7aa529
+    for (index1 = 0; index1 < t->level1_size; index1++)			      \
c7aa529
+      {									      \
c7aa529
+	uint32_t lookup1 = t->level1[index1];				      \
c7aa529
+	if (lookup1 != ((uint32_t) ~0))					      \
c7aa529
+	  {								      \
c7aa529
+	    uint32_t lookup1_shifted = lookup1 << t->q;			      \
c7aa529
+	    uint32_t index2;						      \
c7aa529
+	    for (index2 = 0; index2 < (1 << t->q); index2++)		      \
c7aa529
+	      {								      \
c7aa529
+		uint32_t lookup2 = t->level2[index2 + lookup1_shifted];	      \
c7aa529
+		if (lookup2 != ((uint32_t) ~0))				      \
c7aa529
+		  {							      \
c7aa529
+		    uint32_t lookup2_shifted = lookup2 << t->p;		      \
c7aa529
+		    uint32_t index3;					      \
c7aa529
+		    for (index3 = 0; index3 < (1 << t->p); index3++)	      \
c7aa529
+		      {							      \
c7aa529
+			struct element_t *lookup3			      \
c7aa529
+			  = t->level3[index3 + lookup2_shifted];	      \
c7aa529
+			if (lookup3 != NULL)				      \
c7aa529
+			  fn ((((index1 << t->q) + index2) << t->p) + index3, \
c7aa529
+			      lookup3);					      \
c7aa529
+		      }							      \
c7aa529
+		  }							      \
c7aa529
+	      }								      \
c7aa529
+	  }								      \
c7aa529
+      }									      \
c7aa529
+  } while (0)
c7aa529
+
c7aa529
 #endif
c7aa529
 
c7aa529
 #ifndef NO_FINALIZE
6bd344f
--- glibc-20041021T0701/localedata/Makefile	7 Aug 2004 23:38:13 -0000	1.101
6bd344f
+++ glibc-20041021T0701-fedora/localedata/Makefile	22 Sep 2004 21:20:58 -0000	1.101.2.1
c7aa529
@@ -222,6 +222,7 @@ $(INSTALL-SUPPORTED-LOCALES): install-lo
c7aa529
 	echo -n '...'; \
c7aa529
 	input=`echo $$locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; \
c7aa529
 	$(LOCALEDEF) --alias-file=../intl/locale.alias \
c7aa529
+		     --no-archive \
c7aa529
 		     -i locales/$$input -c -f charmaps/$$charset \
c7aa529
 		     $(addprefix --prefix=,$(install_root)) $$locale; \
c7aa529
 	echo ' done'; \
6bd344f
--- glibc-20041021T0701/localedata/SUPPORTED	17 May 2004 18:51:41 -0000	1.71
6bd344f
+++ glibc-20041021T0701-fedora/localedata/SUPPORTED	22 Sep 2004 21:20:58 -0000	1.71.2.1
c7aa529
@@ -64,6 +64,7 @@ cy_GB.UTF-8/UTF-8 \
c7aa529
 cy_GB/ISO-8859-14 \
c7aa529
 da_DK.UTF-8/UTF-8 \
c7aa529
 da_DK/ISO-8859-1 \
c7aa529
+da_DK.ISO-8859-15/ISO-8859-15 \
c7aa529
 de_AT.UTF-8/UTF-8 \
c7aa529
 de_AT/ISO-8859-1 \
c7aa529
 de_AT@euro/ISO-8859-15 \
c7aa529
@@ -90,6 +91,7 @@ en_DK.UTF-8/UTF-8 \
c7aa529
 en_DK/ISO-8859-1 \
c7aa529
 en_GB.UTF-8/UTF-8 \
c7aa529
 en_GB/ISO-8859-1 \
c7aa529
+en_GB.ISO-8859-15/ISO-8859-15 \
c7aa529
 en_HK.UTF-8/UTF-8 \
c7aa529
 en_HK/ISO-8859-1 \
c7aa529
 en_IE.UTF-8/UTF-8 \
c7aa529
@@ -104,6 +106,7 @@ en_SG.UTF-8/UTF-8 \
c7aa529
 en_SG/ISO-8859-1 \
c7aa529
 en_US.UTF-8/UTF-8 \
c7aa529
 en_US/ISO-8859-1 \
c7aa529
+en_US.ISO-8859-15/ISO-8859-15 \
c7aa529
 en_ZA.UTF-8/UTF-8 \
c7aa529
 en_ZA/ISO-8859-1 \
c7aa529
 en_ZW.UTF-8/UTF-8 \
c7aa529
@@ -244,6 +247,8 @@ nl_NL/ISO-8859-1 \
c7aa529
 nl_NL@euro/ISO-8859-15 \
c7aa529
 nn_NO.UTF-8/UTF-8 \
c7aa529
 nn_NO/ISO-8859-1 \
c7aa529
+no_NO.UTF-8/UTF-8 \
c7aa529
+no_NO/ISO-8859-1 \
c7aa529
 oc_FR/ISO-8859-1 \
c7aa529
 om_ET/UTF-8 \
c7aa529
 om_KE/ISO-8859-1 \
c7aa529
@@ -281,6 +286,7 @@ sv_FI/ISO-8859-1 \
c7aa529
 sv_FI@euro/ISO-8859-15 \
c7aa529
 sv_SE.UTF-8/UTF-8 \
c7aa529
 sv_SE/ISO-8859-1 \
c7aa529
+sv_SE.ISO-8859-15/ISO-8859-15 \
c7aa529
 ta_IN/UTF-8 \
c7aa529
 te_IN/UTF-8 \
c7aa529
 tg_TJ/KOI8-T \
6bd344f
--- glibc-20041021T0701/localedata/locales/cy_GB	28 Sep 2004 04:37:33 -0000	1.4
6bd344f
+++ glibc-20041021T0701-fedora/localedata/locales/cy_GB	29 Sep 2004 08:48:23 -0000	1.3.2.2
c7aa529
@@ -248,8 +248,11 @@ mon         "<U0049><U006F><U006E>
f3926e3
 d_t_fmt     "<U0044><U0079><U0064><U0064><U0020><U0025><U0041><U0020><U0025><U0064><U0020><U006d><U0069><U0073><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
c7aa529
 d_fmt       "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0079>"
c7aa529
 t_fmt       "<U0025><U0054>"
c7aa529
-am_pm       "";""
c7aa529
-t_fmt_ampm  ""
c7aa529
+am_pm       "<U0041><U004D>";"<U0050><U004D>"
c7aa529
+t_fmt_ampm  "<U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0050><U0020><U0025><U005A>"
c7aa529
+date_fmt    "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
c7aa529
+<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
c7aa529
+<U0025><U005A><U0020><U0025><U0059>"
c7aa529
 END LC_TIME
c7aa529
 
c7aa529
 LC_MESSAGES
6bd344f
--- glibc-20041021T0701/localedata/locales/en_GB	4 Dec 2003 04:49:58 -0000	1.10
6bd344f
+++ glibc-20041021T0701-fedora/localedata/locales/en_GB	22 Sep 2004 21:21:01 -0000	1.10.2.1
c7aa529
@@ -112,8 +112,8 @@ mon         "<U004A><U0061><U006E>
c7aa529
 d_t_fmt     "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
c7aa529
 d_fmt       "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
c7aa529
 t_fmt       "<U0025><U0054>"
c7aa529
-am_pm       "";""
c7aa529
-t_fmt_ampm  ""
c7aa529
+am_pm       "<U0041><U004D>";"<U0050><U004D>"
c7aa529
+t_fmt_ampm  "<U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0050><U0020><U0025><U005A>"
c7aa529
 date_fmt	"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
c7aa529
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
c7aa529
 <U0025><U005A><U0020><U0025><U0059>"
6bd344f
--- glibc-20041021T0701/localedata/locales/en_US	5 Dec 2003 09:48:09 -0000	1.7
6bd344f
+++ glibc-20041021T0701-fedora/localedata/locales/en_US	22 Sep 2004 21:21:01 -0000	1.7.2.1
c7aa529
@@ -100,7 +100,6 @@ mon	"<U004A><U0061><U006E><U0075><U0061>
c7aa529
 	"<U004F><U0063><U0074><U006F><U0062><U0065><U0072>";/
c7aa529
 	"<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";/
c7aa529
 	"<U0044><U0065><U0063><U0065><U006D><U0062><U0065><U0072>"
c7aa529
-am_pm   "";""
c7aa529
 % Appropriate date and time representation (%c)
c7aa529
 %	"%a %d %b %Y %r %Z"
c7aa529
 d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0072><U0020><U0025><U005A>"
6bd344f
--- glibc-20041021T0701/localedata/locales/no_NO 1 Jan 1970 00:00:00 -0000
6bd344f
+++ glibc-20041021T0701-fedora/localedata/locales/no_NO	22 Sep 2004 21:21:01 -0000	1.11.2.1
c7aa529
@@ -0,0 +1,69 @@
c7aa529
+escape_char	/
c7aa529
+comment_char    %
c7aa529
+
c7aa529
+% Norwegian language locale for Norway
c7aa529
+% Source: Norsk Standardiseringsforbund
c7aa529
+% Address: University Library,
c7aa529
+%   Drammensveien 41, N-9242 Oslo, Norge
c7aa529
+% Contact: Kolbjoern Aamboe
c7aa529
+% Tel: +47 - 22859109
c7aa529
+% Fax: +47 - 22434497
c7aa529
+% Email: kolbjorn.aambo@usit.uio.no
c7aa529
+% Language: no
c7aa529
+% Territory: NO
c7aa529
+% Revision: 4.3
c7aa529
+% Date: 1996-10-15
c7aa529
+% Application: general
c7aa529
+% Users: general
c7aa529
+% Repertoiremap: mnemonic.ds
c7aa529
+% Charset: ISO-8859-1
c7aa529
+% Distribution and use is free, also
c7aa529
+% for commercial purposes.
c7aa529
+
c7aa529
+LC_IDENTIFICATION
c7aa529
+copy "nb_NO"
c7aa529
+END LC_IDENTIFICATION
c7aa529
+
c7aa529
+LC_COLLATE
c7aa529
+copy "nb_NO"
c7aa529
+END LC_COLLATE
c7aa529
+
c7aa529
+LC_CTYPE
c7aa529
+copy "nb_NO"
c7aa529
+END LC_CTYPE
c7aa529
+
c7aa529
+LC_MONETARY
c7aa529
+copy "nb_NO"
c7aa529
+END LC_MONETARY
c7aa529
+
c7aa529
+LC_NUMERIC
c7aa529
+copy "nb_NO"
c7aa529
+END LC_NUMERIC
c7aa529
+
c7aa529
+LC_TIME
c7aa529
+copy "nb_NO"
c7aa529
+END LC_TIME
c7aa529
+
c7aa529
+LC_MESSAGES
c7aa529
+copy "nb_NO"
c7aa529
+END LC_MESSAGES
c7aa529
+
c7aa529
+LC_PAPER
c7aa529
+copy "nb_NO"
c7aa529
+END LC_PAPER
c7aa529
+
c7aa529
+LC_TELEPHONE
c7aa529
+copy "nb_NO"
c7aa529
+END LC_TELEPHONE
c7aa529
+
c7aa529
+LC_MEASUREMENT
c7aa529
+copy "nb_NO"
c7aa529
+END LC_MEASUREMENT
c7aa529
+
c7aa529
+LC_NAME
c7aa529
+copy "nb_NO"
c7aa529
+END LC_NAME
c7aa529
+
c7aa529
+LC_ADDRESS
c7aa529
+copy "nb_NO"
c7aa529
+END LC_ADDRESS
6bd344f
--- glibc-20041021T0701/localedata/locales/zh_TW	28 Sep 2002 05:25:36 -0000	1.5
6bd344f
+++ glibc-20041021T0701-fedora/localedata/locales/zh_TW	22 Sep 2004 21:21:01 -0000	1.5.2.1
c7aa529
@@ -1,7 +1,7 @@
c7aa529
 comment_char %
c7aa529
 escape_char /
c7aa529
 %
c7aa529
-% Chinese language locale for Taiwan R.O.C.
c7aa529
+% Chinese language locale for Taiwan
c7aa529
 % charmap: BIG5-CP950
c7aa529
 %
c7aa529
 % Original Author:
c7aa529
@@ -17,7 +17,7 @@ escape_char /
c7aa529
 % Reference:	http://wwwold.dkuug.dk/JTC1/SC22/WG20/docs/n690.pdf
c7aa529
 
c7aa529
 LC_IDENTIFICATION
c7aa529
-title      "Chinese locale for Taiwan R.O.C."
c7aa529
+title      "Chinese locale for Taiwan"
c7aa529
 source     ""
c7aa529
 address    ""
c7aa529
 contact    ""
c7aa529
@@ -25,7 +25,7 @@ email      "bug-glibc@gnu.org"
c7aa529
 tel        ""
c7aa529
 fax        ""
c7aa529
 language   "Chinese"
c7aa529
-territory  "Taiwan R.O.C."
c7aa529
+territory  "Taiwan"
c7aa529
 revision   "0.2"
c7aa529
 date       "2000-08-02"
c7aa529
 %
6bd344f
--- glibc-20041021T0701/malloc/arena.c	18 Oct 2004 23:15:33 -0000	1.12
6bd344f
+++ glibc-20041021T0701-fedora/malloc/arena.c	18 Oct 2004 23:30:23 -0000	1.8.2.5
f3926e3
@@ -18,7 +18,7 @@
f3926e3
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
f3926e3
    Boston, MA 02111-1307, USA.  */
f3926e3
 
8660b87
-/* $Id: arena.c,v 1.12 2004/10/18 23:15:33 drepper Exp $ */
cfeb07d
+/* $Id: arena.c,v 1.8.2.5 2004/10/18 23:30:23 jakub Exp $ */
f3926e3
 
f3926e3
 /* Compile-time constants.  */
f3926e3
 
6bd344f
--- glibc-20041021T0701/malloc/malloc.c	14 Oct 2004 01:56:52 -0000	1.131
6bd344f
+++ glibc-20041021T0701-fedora/malloc/malloc.c	14 Oct 2004 05:57:53 -0000	1.127.2.4
c7aa529
@@ -24,7 +24,7 @@
c7aa529
   Doug Lea and adapted to multiple threads/arenas by Wolfram Gloger.
c7aa529
 
c7aa529
 * Version ptmalloc2-20011215
b709c7e
-  $Id: malloc.c,v 1.131 2004/10/14 01:56:52 drepper Exp $
b709c7e
+  $Id: malloc.c,v 1.127.2.4 2004/10/14 05:57:53 jakub Exp $
c7aa529
   based on:
c7aa529
   VERSION 2.7.0 Sun Mar 11 14:14:06 2001  Doug Lea  (dl at gee)
c7aa529
 
03d0525
--- glibc-20041021T0701/manual/errno.texi	20 Oct 2004 10:05:01 -0000	1.69
03d0525
+++ glibc-20041021T0701-fedora/manual/errno.texi	21 Oct 2004 11:46:42 -0000	1.68.2.2
03d0525
@@ -1229,30 +1229,6 @@ They are not yet documented.}
03d0525
 @comment errno ???/???
03d0525
 @end deftypevr
03d0525
 
03d0525
-@comment errno.h
03d0525
-@comment Linux???: Required key not available
03d0525
-@deftypevr Macro int ENOKEY
03d0525
-@comment errno ???/???
03d0525
-@end deftypevr
03d0525
-
03d0525
-@comment errno.h
03d0525
-@comment Linux???: Key has expired
03d0525
-@deftypevr Macro int EKEYEXPIRED
03d0525
-@comment errno ???/???
03d0525
-@end deftypevr
03d0525
-
03d0525
-@comment errno.h
03d0525
-@comment Linux???: Key has been revoked
03d0525
-@deftypevr Macro int EKEYREVOKED
03d0525
-@comment errno ???/???
03d0525
-@end deftypevr
03d0525
-
03d0525
-@comment errno.h
03d0525
-@comment Linux???: Key was rejected by service
03d0525
-@deftypevr Macro int EKEYREJECTED
03d0525
-@comment errno ???/???
03d0525
-@end deftypevr
03d0525
-
03d0525
 @node Error Messages,  , Error Codes, Error Reporting
03d0525
 @section Error Messages
03d0525
 
6bd344f
--- glibc-20041021T0701/nptl/ChangeLog	18 Oct 2004 04:19:48 -0000	1.723
6bd344f
+++ glibc-20041021T0701-fedora/nptl/ChangeLog	18 Oct 2004 09:58:48 -0000	1.706.2.12
468791b
@@ -242,6 +242,11 @@
c7aa529
 	Move definition inside libpthread, libc, librt check.  Provide
c7aa529
 	definition for rtld.
c7aa529
 
c7aa529
+2004-09-02  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* pthread_cond_destroy.c (__pthread_cond_destroy): If there are
c7aa529
+	waiters, awake all waiters on the associated mutex.
c7aa529
+
c7aa529
 2004-09-02  Ulrich Drepper  <drepper@redhat.com>
c7aa529
 
c7aa529
 	* sysdeps/alpha/jmpbuf-unwind.h: Define __libc_unwind_longjmp.
468791b
@@ -2316,6 +2321,11 @@
c7aa529
 
c7aa529
 	* Makefile [$(build-shared) = yes] (tests): Depend on $(test-modules).
c7aa529
 
c7aa529
+2003-07-22  Jakub Jelinek  <jakub@redhat.com>
c7aa529
+
c7aa529
+	* descr.h: Don't include lowlevellock.h, pthreaddef.h and dl-sysdep.h
c7aa529
+	if __need_struct_pthread_size, instead define lll_lock_t.
c7aa529
+
c7aa529
 2003-07-25  Jakub Jelinek  <jakub@redhat.com>
c7aa529
 
c7aa529
 	* tst-cancel17.c (do_test): Check if aio_cancel failed.
6bd344f
--- glibc-20041021T0701/nptl/Makefile	20 Sep 2004 22:05:25 -0000	1.157
6bd344f
+++ glibc-20041021T0701-fedora/nptl/Makefile	22 Sep 2004 21:21:01 -0000	1.157.2.1
c7aa529
@@ -503,15 +503,19 @@ $(addprefix $(objpfx), \
c7aa529
     $(tests) $(test-srcs))): $(objpfx)libpthread.so \
c7aa529
 			     $(objpfx)libpthread_nonshared.a
c7aa529
 $(objpfx)tst-unload: $(common-objpfx)dlfcn/libdl.so
c7aa529
-# $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so,
c7aa529
+# $(objpfx)linklibc.so is used instead of $(common-objpfx)libc.so,
c7aa529
 # since otherwise libpthread.so comes before libc.so when linking.
c7aa529
 $(addprefix $(objpfx), $(tests-reverse)): \
c7aa529
-  $(objpfx)../libc.so $(objpfx)libpthread.so \
c7aa529
+  $(objpfx)linklibc.so $(objpfx)libpthread.so \
c7aa529
   $(objpfx)libpthread_nonshared.a
c7aa529
 $(objpfx)../libc.so: $(common-objpfx)libc.so ;
c7aa529
 $(addprefix $(objpfx),$(tests-static)): $(objpfx)libpthread.a
c7aa529
 
c7aa529
 $(objpfx)tst-atfork2.out: $(objpfx)tst-atfork2mod.so
c7aa529
+
c7aa529
+$(objpfx)linklibc.so: $(common-objpfx)libc.so
c7aa529
+	ln -s ../libc.so $@
c7aa529
+generated += libclink.so
c7aa529
 else
c7aa529
 $(addprefix $(objpfx),$(tests) $(test-srcs)): $(objpfx)libpthread.a
c7aa529
 endif
6bd344f
--- glibc-20041021T0701/nptl/alloca_cutoff.c	26 Nov 2002 22:50:01 -0000	1.1.1.1
6bd344f
+++ glibc-20041021T0701-fedora/nptl/alloca_cutoff.c	22 Sep 2004 21:21:01 -0000	1.1.1.1.2.1
c7aa529
@@ -3,16 +3,16 @@
c7aa529
    This file is part of the GNU C Library.
c7aa529
 
c7aa529
    The GNU C Library is free software; you can redistribute it and/or
c7aa529
-   modify it under the terms of the GNU Library General Public License as
c7aa529
-   published by the Free Software Foundation; either version 2 of the
c7aa529
+   modify it under the terms of the GNU Lesser General Public License as
c7aa529
+   published by the Free Software Foundation; either version 2.1 of the
c7aa529
    License, or (at your option) any later version.
c7aa529
 
c7aa529
    The GNU C Library is distributed in the hope that it will be useful,
c7aa529
    but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
-   Library General Public License for more details.
c7aa529
+   Lesser General Public License for more details.
c7aa529
 
c7aa529
-   You should have received a copy of the GNU Library General Public
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
c7aa529
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
c7aa529
    Boston, MA 02111-1307, USA.  */
6bd344f
--- glibc-20041021T0701/nptl/descr.h	25 Sep 2004 07:35:42 -0000	1.24
6bd344f
+++ glibc-20041021T0701-fedora/nptl/descr.h	25 Sep 2004 07:55:43 -0000	1.23.2.2
c7aa529
@@ -27,9 +27,13 @@
c7aa529
 #include <sys/types.h>
c7aa529
 #include <hp-timing.h>
c7aa529
 #include <list.h>
c7aa529
+#ifdef __need_struct_pthread_size
c7aa529
+#define lll_lock_t int
c7aa529
+#else
c7aa529
 #include <lowlevellock.h>
c7aa529
 #include <pthreaddef.h>
c7aa529
 #include <dl-sysdep.h>
c7aa529
+#endif
c7aa529
 #include "../nptl_db/thread_db.h"
c7aa529
 #include <tls.h>
c7aa529
 #ifdef HAVE_FORCED_UNWIND
6bd344f
--- glibc-20041021T0701/nptl/pthread_cond_destroy.c	2 Sep 2004 18:45:37 -0000	1.5
6bd344f
+++ glibc-20041021T0701-fedora/nptl/pthread_cond_destroy.c	22 Sep 2004 21:21:01 -0000	1.5.2.1
c7aa529
@@ -44,15 +44,35 @@ __pthread_cond_destroy (cond)
c7aa529
      broadcasted, but still are using the pthread_cond_t structure,
c7aa529
      pthread_cond_destroy needs to wait for them.  */
c7aa529
   unsigned int nwaiters = cond->__data.__nwaiters;
c7aa529
-  while (nwaiters >= (1 << COND_CLOCK_BITS))
c7aa529
+
c7aa529
+  if (nwaiters >= (1 << COND_CLOCK_BITS))
c7aa529
     {
c7aa529
-      lll_mutex_unlock (cond->__data.__lock);
c7aa529
+      /* Wake everybody on the associated mutex in case there are
c7aa529
+         threads that have been requeued to it.
c7aa529
+         Without this, pthread_cond_destroy could block potentially
c7aa529
+         for a long time or forever, as it would depend on other
c7aa529
+         thread's using the mutex.
c7aa529
+         When all threads waiting on the mutex are woken up, pthread_cond_wait
c7aa529
+         only waits for threads to acquire and release the internal
c7aa529
+         condvar lock.  */
c7aa529
+      if (cond->__data.__mutex != NULL
c7aa529
+	  && cond->__data.__mutex != (void *) ~0l)
c7aa529
+	{
c7aa529
+	  pthread_mutex_t *mut = (pthread_mutex_t *) cond->__data.__mutex;
c7aa529
+	  lll_futex_wake (&mut->__data.__lock, INT_MAX);
c7aa529
+	}
c7aa529
+
c7aa529
+      do
c7aa529
+	{
c7aa529
+	  lll_mutex_unlock (cond->__data.__lock);
c7aa529
 
c7aa529
-      lll_futex_wait (&cond->__data.__nwaiters, nwaiters);
c7aa529
+	  lll_futex_wait (&cond->__data.__nwaiters, nwaiters);
c7aa529
 
c7aa529
-      lll_mutex_lock (cond->__data.__lock);
c7aa529
+	  lll_mutex_lock (cond->__data.__lock);
c7aa529
 
c7aa529
-      nwaiters = cond->__data.__nwaiters;
c7aa529
+	  nwaiters = cond->__data.__nwaiters;
c7aa529
+	}
c7aa529
+      while (nwaiters >= (1 << COND_CLOCK_BITS));
c7aa529
     }
c7aa529
 
c7aa529
   return 0;
6bd344f
--- glibc-20041021T0701/nptl/tst-unload.c	25 Feb 2004 18:41:32 -0000	1.3
6bd344f
+++ glibc-20041021T0701-fedora/nptl/tst-unload.c	22 Sep 2004 21:21:01 -0000	1.3.2.1
c7aa529
@@ -3,16 +3,16 @@
c7aa529
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
c7aa529
 
c7aa529
    The GNU C Library is free software; you can redistribute it and/or
c7aa529
-   modify it under the terms of the GNU Library General Public License as
c7aa529
-   published by the Free Software Foundation; either version 2 of the
c7aa529
+   modify it under the terms of the GNU Lesser General Public License as
c7aa529
+   published by the Free Software Foundation; either version 2.1 of the
c7aa529
    License, or (at your option) any later version.
c7aa529
 
c7aa529
    The GNU C Library is distributed in the hope that it will be useful,
c7aa529
    but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
-   Library General Public License for more details.
c7aa529
+   Lesser General Public License for more details.
c7aa529
 
c7aa529
-   You should have received a copy of the GNU Library General Public
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
c7aa529
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
c7aa529
    Boston, MA 02111-1307, USA.  */
6bd344f
--- glibc-20041021T0701/nptl/sysdeps/pthread/allocalim.h	26 Nov 2002 22:50:35 -0000	1.1.1.1
6bd344f
+++ glibc-20041021T0701-fedora/nptl/sysdeps/pthread/allocalim.h	22 Sep 2004 21:21:02 -0000	1.1.1.1.2.1
c7aa529
@@ -3,16 +3,16 @@
c7aa529
    This file is part of the GNU C Library.
c7aa529
 
c7aa529
    The GNU C Library is free software; you can redistribute it and/or
c7aa529
-   modify it under the terms of the GNU Library General Public License as
c7aa529
-   published by the Free Software Foundation; either version 2 of the
c7aa529
+   modify it under the terms of the GNU Lesser General Public License as
c7aa529
+   published by the Free Software Foundation; either version 2.1 of the
c7aa529
    License, or (at your option) any later version.
c7aa529
 
c7aa529
    The GNU C Library is distributed in the hope that it will be useful,
c7aa529
    but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
-   Library General Public License for more details.
c7aa529
+   Lesser General Public License for more details.
c7aa529
 
c7aa529
-   You should have received a copy of the GNU Library General Public
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
c7aa529
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
c7aa529
    Boston, MA 02111-1307, USA.  */
6bd344f
--- glibc-20041021T0701/nptl/sysdeps/pthread/pt-initfini.c	31 Dec 2002 08:46:38 -0000	1.3
6bd344f
+++ glibc-20041021T0701-fedora/nptl/sysdeps/pthread/pt-initfini.c	22 Sep 2004 21:21:02 -0000	1.3.2.1
c7aa529
@@ -3,11 +3,11 @@
c7aa529
    This file is part of the GNU C Library.
c7aa529
 
c7aa529
    The GNU C Library is free software; you can redistribute it
c7aa529
-   and/or modify it under the terms of the GNU Library General Public
c7aa529
+   and/or modify it under the terms of the GNU Lesser General Public
c7aa529
    License as published by the Free Software Foundation; either
c7aa529
    version 2 of the License, or (at your option) any later version.
c7aa529
 
c7aa529
-   In addition to the permissions in the GNU Library General Public
c7aa529
+   In addition to the permissions in the GNU Lesser General Public
c7aa529
    License, the Free Software Foundation gives you unlimited
c7aa529
    permission to link the compiled version of this file with other
c7aa529
    programs, and to distribute those programs without any restriction
c7aa529
@@ -19,9 +19,9 @@
c7aa529
    The GNU C Library is distributed in the hope that it will be
c7aa529
    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
c7aa529
    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
c7aa529
-   GNU Library General Public License for more details.
c7aa529
+   GNU Lesser General Public License for more details.
c7aa529
 
c7aa529
-   You should have received a copy of the GNU Library General Public
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
c7aa529
    write to the Free Software Foundation, 59 Temple Place - Suite 330,
c7aa529
    Boston, MA 02111-1307, USA.  */
6bd344f
--- glibc-20041021T0701/nptl/sysdeps/pthread/bits/libc-lock.h	11 Dec 2003 04:50:49 -0000	1.17
6bd344f
+++ glibc-20041021T0701-fedora/nptl/sysdeps/pthread/bits/libc-lock.h	22 Sep 2004 21:21:02 -0000	1.17.2.1
c7aa529
@@ -3,16 +3,16 @@
c7aa529
    This file is part of the GNU C Library.
c7aa529
 
c7aa529
    The GNU C Library is free software; you can redistribute it and/or
c7aa529
-   modify it under the terms of the GNU Library General Public License as
c7aa529
-   published by the Free Software Foundation; either version 2 of the
c7aa529
+   modify it under the terms of the GNU Lesser General Public License as
c7aa529
+   published by the Free Software Foundation; either version 2.1 of the
c7aa529
    License, or (at your option) any later version.
c7aa529
 
c7aa529
    The GNU C Library is distributed in the hope that it will be useful,
c7aa529
    but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
-   Library General Public License for more details.
c7aa529
+   Lesser General Public License for more details.
c7aa529
 
c7aa529
-   You should have received a copy of the GNU Library General Public
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
c7aa529
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
c7aa529
    Boston, MA 02111-1307, USA.  */
6bd344f
--- glibc-20041021T0701/nptl/sysdeps/pthread/bits/sigthread.h	26 Nov 2002 22:50:35 -0000	1.1.1.1
6bd344f
+++ glibc-20041021T0701-fedora/nptl/sysdeps/pthread/bits/sigthread.h	22 Sep 2004 21:21:02 -0000	1.1.1.1.2.1
c7aa529
@@ -3,16 +3,16 @@
c7aa529
    This file is part of the GNU C Library.
c7aa529
 
c7aa529
    The GNU C Library is free software; you can redistribute it and/or
c7aa529
-   modify it under the terms of the GNU Library General Public License as
c7aa529
-   published by the Free Software Foundation; either version 2 of the
c7aa529
+   modify it under the terms of the GNU Lesser General Public License as
c7aa529
+   published by the Free Software Foundation; either version 2.1 of the
c7aa529
    License, or (at your option) any later version.
c7aa529
 
c7aa529
    The GNU C Library is distributed in the hope that it will be useful,
c7aa529
    but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
-   Library General Public License for more details.
c7aa529
+   Lesser General Public License for more details.
c7aa529
 
c7aa529
-   You should have received a copy of the GNU Library General Public
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
c7aa529
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
c7aa529
    Boston, MA 02111-1307, USA.  */
6bd344f
--- glibc-20041021T0701/nptl/sysdeps/unix/sysv/linux/kernel-features.h 1 Jan 1970 00:00:00 -0000
6bd344f
+++ glibc-20041021T0701-fedora/nptl/sysdeps/unix/sysv/linux/kernel-features.h	22 Sep 2004 21:21:02 -0000	1.1.2.1
c7aa529
@@ -0,0 +1,6 @@
c7aa529
+#include_next <kernel-features.h>
c7aa529
+
c7aa529
+/* NPTL can always assume all clone thread flags work.  */
c7aa529
+#ifndef __ASSUME_CLONE_THREAD_FLAGS
c7aa529
+# define __ASSUME_CLONE_THREAD_FLAGS	1
c7aa529
+#endif
6bd344f
--- glibc-20041021T0701/nptl/sysdeps/unix/sysv/linux/bits/local_lim.h	13 Apr 2004 02:00:09 -0000	1.6
6bd344f
+++ glibc-20041021T0701-fedora/nptl/sysdeps/unix/sysv/linux/bits/local_lim.h	22 Sep 2004 21:21:02 -0000	1.6.2.1
c7aa529
@@ -3,16 +3,16 @@
c7aa529
    This file is part of the GNU C Library.
c7aa529
 
c7aa529
    The GNU C Library is free software; you can redistribute it and/or
c7aa529
-   modify it under the terms of the GNU Library General Public License as
c7aa529
-   published by the Free Software Foundation; either version 2 of the
c7aa529
+   modify it under the terms of the GNU Lesser General Public License as
c7aa529
+   published by the Free Software Foundation; either version 2.1 of the
c7aa529
    License, or (at your option) any later version.
c7aa529
 
c7aa529
    The GNU C Library is distributed in the hope that it will be useful,
c7aa529
    but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
-   Library General Public License for more details.
c7aa529
+   Lesser General Public License for more details.
c7aa529
 
c7aa529
-   You should have received a copy of the GNU Library General Public
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
c7aa529
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
c7aa529
    Boston, MA 02111-1307, USA.  */
6bd344f
--- glibc-20041021T0701/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h	13 Apr 2004 02:01:17 -0000	1.8
6bd344f
+++ glibc-20041021T0701-fedora/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h	22 Sep 2004 21:21:02 -0000	1.8.2.1
c7aa529
@@ -3,16 +3,16 @@
c7aa529
    This file is part of the GNU C Library.
c7aa529
 
c7aa529
    The GNU C Library is free software; you can redistribute it and/or
c7aa529
-   modify it under the terms of the GNU Library General Public License as
c7aa529
-   published by the Free Software Foundation; either version 2 of the
c7aa529
+   modify it under the terms of the GNU Lesser General Public License as
c7aa529
+   published by the Free Software Foundation; either version 2.1 of the
c7aa529
    License, or (at your option) any later version.
c7aa529
 
c7aa529
    The GNU C Library is distributed in the hope that it will be useful,
c7aa529
    but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
-   Library General Public License for more details.
c7aa529
+   Lesser General Public License for more details.
c7aa529
 
c7aa529
-   You should have received a copy of the GNU Library General Public
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
c7aa529
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
c7aa529
    Boston, MA 02111-1307, USA.  */
6bd344f
--- glibc-20041021T0701/nptl/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h	4 Oct 2004 20:47:50 -0000	1.8
6bd344f
+++ glibc-20041021T0701-fedora/nptl/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h	5 Oct 2004 08:25:24 -0000	1.7.2.2
c7aa529
@@ -3,16 +3,16 @@
c7aa529
    This file is part of the GNU C Library.
c7aa529
 
c7aa529
    The GNU C Library is free software; you can redistribute it and/or
c7aa529
-   modify it under the terms of the GNU Library General Public License as
c7aa529
-   published by the Free Software Foundation; either version 2 of the
c7aa529
+   modify it under the terms of the GNU Lesser General Public License as
c7aa529
+   published by the Free Software Foundation; either version 2.1 of the
c7aa529
    License, or (at your option) any later version.
c7aa529
 
c7aa529
    The GNU C Library is distributed in the hope that it will be useful,
c7aa529
    but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
-   Library General Public License for more details.
c7aa529
+   Lesser General Public License for more details.
c7aa529
 
c7aa529
-   You should have received a copy of the GNU Library General Public
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
c7aa529
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
c7aa529
    Boston, MA 02111-1307, USA.  */
6bd344f
--- glibc-20041021T0701/nscd/connections.c	15 Oct 2004 21:12:15 -0000	1.64
6bd344f
+++ glibc-20041021T0701-fedora/nscd/connections.c	18 Oct 2004 09:58:49 -0000	1.55.2.5
78a67cf
@@ -21,6 +21,7 @@
78a67cf
 #include <alloca.h>
78a67cf
 #include <assert.h>
78a67cf
 #include <atomic.h>
78a67cf
+#include <dlfcn.h>
78a67cf
 #include <error.h>
78a67cf
 #include <errno.h>
78a67cf
 #include <fcntl.h>
78a67cf
@@ -42,6 +43,7 @@
78a67cf
 #include <sys/socket.h>
78a67cf
 #include <sys/stat.h>
78a67cf
 #include <sys/un.h>
78a67cf
+#include <gnu/lib-names.h>
78a67cf
 
78a67cf
 #include "nscd.h"
78a67cf
 #include "dbg_log.h"
468791b
@@ -1453,19 +1455,39 @@ start_threads (void)
78a67cf
   pthread_condattr_t condattr;
78a67cf
   pthread_condattr_init (&condattr);
78a67cf
 
78a67cf
-#if defined _POSIX_CLOCK_SELECTION && _POSIX_CLOCK_SELECTION >= 0 \
78a67cf
-    && defined _POSIX_MONOTONIC_CLOCK && _POSIX_MONOTONIC_CLOCK >= 0
78a67cf
+#if defined _POSIX_MONOTONIC_CLOCK && _POSIX_MONOTONIC_CLOCK >= 0
78a67cf
   /* Determine whether the monotonous clock is available.  */
78a67cf
   struct timespec dummy;
78a67cf
 # if _POSIX_MONOTONIC_CLOCK == 0
78a67cf
   if (sysconf (_SC_MONOTONIC_CLOCK) > 0)
78a67cf
 # endif
78a67cf
-# if _POSIX_CLOCK_SELECTION == 0
78a67cf
-    if (sysconf (_SC_CLOCK_SELECTION) > 0)
78a67cf
+    {
78a67cf
+# if defined _POSIX_CLOCK_SELECTION && _POSIX_CLOCK_SELECTION >= 0
78a67cf
+#  if _POSIX_CLOCK_SELECTION == 0
78a67cf
+      if (sysconf (_SC_CLOCK_SELECTION) > 0)
78a67cf
+#  endif
78a67cf
+        if (clock_getres (CLOCK_MONOTONIC, &dummy) == 0
78a67cf
+            && pthread_condattr_setclock (&condattr, CLOCK_MONOTONIC) == 0)
78a67cf
+          timeout_clock = CLOCK_MONOTONIC;
78a67cf
+# elif _POSIX_THREADS > 0
78a67cf
+      if (sysconf (_SC_CLOCK_SELECTION) > 0)
78a67cf
+        {
78a67cf
+          void *h = __libc_dlopen (LIBPTHREAD_SO);
78a67cf
+          int (*condattr_setclock) (pthread_condattr_t *, __clockid_t) = NULL;
78a67cf
+
78a67cf
+          if (h != NULL)
78a67cf
+            condattr_setclock = __libc_dlsym (h, "pthread_condattr_setclock");
78a67cf
+
78a67cf
+          if (condattr_setclock
78a67cf
+              && clock_getres (CLOCK_MONOTONIC, &dummy) == 0
78a67cf
+              && condattr_setclock (&condattr, CLOCK_MONOTONIC) == 0)
78a67cf
+            timeout_clock = CLOCK_MONOTONIC;
78a67cf
+
78a67cf
+          if (h != NULL)
78a67cf
+            __libc_dlclose (h);
78a67cf
+        }
78a67cf
 # endif
78a67cf
-      if (clock_getres (CLOCK_MONOTONIC, &dummy) == 0
78a67cf
-	  && pthread_condattr_setclock (&condattr, CLOCK_MONOTONIC) == 0)
78a67cf
-	timeout_clock = CLOCK_MONOTONIC;
78a67cf
+    }
78a67cf
 #endif
78a67cf
 
78a67cf
   pthread_cond_init (&readylist_cond, &condattr);
468791b
@@ -1530,7 +1552,6 @@ start_threads (void)
3b26136
   main_loop_poll ();
c7aa529
 }
c7aa529
 
c7aa529
-
c7aa529
 /* Look up the uid, gid, and supplementary groups to run nscd as. When
c7aa529
    this function is called, we are not listening on the nscd socket yet so
c7aa529
    we can just use the ordinary lookup functions without causing a lockup  */
468791b
@@ -1599,3 +1620,18 @@ finish_drop_privileges (void)
c7aa529
       exit (1);
c7aa529
     }
c7aa529
 }
c7aa529
+
c7aa529
+/* Handle the HUP signal which will force a dump of the cache */
c7aa529
+void
c7aa529
+sighup_handler (int signum)
c7aa529
+{
c7aa529
+    /* Prune the password database */
c7aa529
+    prune_cache (&dbs[pwddb], LONG_MAX);
c7aa529
+    
c7aa529
+    /* Prune the group database */
c7aa529
+    prune_cache (&dbs[grpdb], LONG_MAX);
c7aa529
+
c7aa529
+    /* Prune the host database */
c7aa529
+    prune_cache (&dbs[hstdb], LONG_MAX);
c7aa529
+}
c7aa529
+
6bd344f
--- glibc-20041021T0701/nscd/nscd.c	4 Oct 2004 16:14:31 -0000	1.42
6bd344f
+++ glibc-20041021T0701-fedora/nscd/nscd.c	5 Oct 2004 08:25:25 -0000	1.38.2.4
3b26136
@@ -122,9 +122,16 @@ static struct argp argp =
c7aa529
   options, parse_opt, NULL, doc,
c7aa529
 };
c7aa529
 
c7aa529
+/* The SIGHUP handler is extern to this file */
c7aa529
+extern void sighup_handler(int signum);
c7aa529
+
c7aa529
 /* True if only statistics are requested.  */
c7aa529
 static bool get_stats;
c7aa529
 
c7aa529
+#ifdef atomic_init_nscd
c7aa529
+atomic_init_nscd
c7aa529
+#endif
c7aa529
+
c7aa529
 int
c7aa529
 main (int argc, char **argv)
c7aa529
 {
3b26136
@@ -266,6 +273,7 @@ main (int argc, char **argv)
c7aa529
   signal (SIGINT, termination_handler);
c7aa529
   signal (SIGQUIT, termination_handler);
c7aa529
   signal (SIGTERM, termination_handler);
c7aa529
+  signal (SIGHUP, sighup_handler);
c7aa529
   signal (SIGPIPE, SIG_IGN);
c7aa529
 
c7aa529
   /* Cleanup files created by a previous 'bind'.  */
6bd344f
--- glibc-20041021T0701/nscd/nscd.conf	3 Oct 2004 21:09:23 -0000	1.10
6bd344f
+++ glibc-20041021T0701-fedora/nscd/nscd.conf	4 Oct 2004 08:56:17 -0000	1.8.2.2
3b26136
@@ -31,8 +31,8 @@
c7aa529
 #	logfile			/var/log/nscd.log
c7aa529
 #	threads			6
3b26136
 #	max-threads		128
c7aa529
-#	server-user		nobody
c7aa529
-#	stat-user		somebody
c7aa529
+	server-user		nscd
c7aa529
+#	stat-user		nocpulse
c7aa529
 	debug-level		0
c7aa529
 #	reload-count		5
3b26136
 	paranoia		no
6bd344f
--- glibc-20041021T0701/nscd/nscd_conf.c	3 Oct 2004 21:10:35 -0000	1.16
6bd344f
+++ glibc-20041021T0701-fedora/nscd/nscd_conf.c	4 Oct 2004 08:56:17 -0000	1.14.2.2
3b26136
@@ -230,7 +230,10 @@ nscd_parse_file (const char *fname, stru
c7aa529
 		if (strcmp (arg2, "no") == 0)
c7aa529
 		  dbs[cnt].shared = 0;
c7aa529
 		else if (strcmp (arg2, "yes") == 0)
c7aa529
-		  dbs[cnt].shared = 1;
c7aa529
+#ifndef atomic_supports_shared
c7aa529
+#define atomic_supports_shared 1
c7aa529
+#endif
c7aa529
+		  dbs[cnt].shared = atomic_supports_shared;
c7aa529
 		break;
c7aa529
 	      }
c7aa529
 	  if (cnt == lastdb)
6bd344f
--- glibc-20041021T0701/resolv/gethnamaddr.c	18 Oct 2004 05:09:59 -0000	1.50
6bd344f
+++ glibc-20041021T0701-fedora/resolv/gethnamaddr.c	18 Oct 2004 09:58:50 -0000	1.49.2.1
468791b
@@ -51,7 +51,7 @@
468791b
 
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static char sccsid[] = "@(#)gethostnamadr.c	8.1 (Berkeley) 6/4/93";
468791b
-static char rcsid[] = "$Id: gethnamaddr.c,v 1.50 2004/10/18 05:09:59 drepper Exp $";
468791b
+static char rcsid[] = "$Id: gethnamaddr.c,v 1.49.2.1 2004/10/18 09:58:50 jakub Exp $";
468791b
 #endif /* LIBC_SCCS and not lint */
468791b
 
468791b
 #include <sys/types.h>
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_clntout.c	17 Oct 2004 14:59:39 -0000	1.7
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_clntout.c	18 Oct 2004 09:58:53 -0000	1.6.4.1
468791b
@@ -33,7 +33,7 @@
468791b
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char clntout_rcsid[] =
468791b
-  "$Id: rpc_clntout.c,v 1.7 2004/10/17 14:59:39 drepper Exp $";
468791b
+  "$Id: rpc_clntout.c,v 1.6.4.1 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
468791b
 
468791b
 /*
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_cout.c	17 Oct 2004 14:59:39 -0000	1.14
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_cout.c	18 Oct 2004 09:58:53 -0000	1.13.4.1
468791b
@@ -33,7 +33,7 @@
f3926e3
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char cout_rcsid[] =
468791b
-"$Id: rpc_cout.c,v 1.14 2004/10/17 14:59:39 drepper Exp $";
468791b
+"$Id: rpc_cout.c,v 1.13.4.1 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
468791b
 
468791b
 /*
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_hout.c	17 Oct 2004 14:59:39 -0000	1.8
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_hout.c	18 Oct 2004 09:58:53 -0000	1.7.4.1
468791b
@@ -33,7 +33,7 @@
468791b
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char hout_rcsid[] =
468791b
-  "$Id: rpc_hout.c,v 1.8 2004/10/17 14:59:39 drepper Exp $";
468791b
+  "$Id: rpc_hout.c,v 1.7.4.1 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
468791b
 
468791b
 /*
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_main.c	17 Oct 2004 14:59:39 -0000	1.24
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_main.c	18 Oct 2004 09:58:53 -0000	1.23.2.1
468791b
@@ -33,7 +33,7 @@
468791b
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char main_rcsid[] =
468791b
-  "$Id: rpc_main.c,v 1.24 2004/10/17 14:59:39 drepper Exp $";
468791b
+  "$Id: rpc_main.c,v 1.23.2.1 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
468791b
 
468791b
 /*
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_parse.c	17 Oct 2004 14:59:39 -0000	1.8
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_parse.c	18 Oct 2004 09:58:53 -0000	1.5.4.2
468791b
@@ -33,7 +33,7 @@
468791b
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char parse_rcsid[] =
468791b
-  "$Id: rpc_parse.c,v 1.8 2004/10/17 14:59:39 drepper Exp $";
468791b
+  "$Id: rpc_parse.c,v 1.5.4.2 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
f3926e3
 
f3926e3
 /*
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_sample.c	17 Oct 2004 14:59:39 -0000	1.6
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_sample.c	18 Oct 2004 09:58:53 -0000	1.5.6.1
468791b
@@ -33,7 +33,7 @@
468791b
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char sample_rcsid[] =
468791b
-  "$Id: rpc_sample.c,v 1.6 2004/10/17 14:59:39 drepper Exp $";
468791b
+  "$Id: rpc_sample.c,v 1.5.6.1 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
468791b
 
468791b
 /*
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_scan.c	17 Oct 2004 14:59:39 -0000	1.9
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_scan.c	18 Oct 2004 09:58:53 -0000	1.8.4.1
468791b
@@ -33,7 +33,7 @@
468791b
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char scan_rcsid[] =
468791b
-  "$Id: rpc_scan.c,v 1.9 2004/10/17 14:59:39 drepper Exp $";
468791b
+  "$Id: rpc_scan.c,v 1.8.4.1 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
468791b
 
468791b
 /*
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_svcout.c	17 Oct 2004 14:59:39 -0000	1.12
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_svcout.c	18 Oct 2004 09:58:53 -0000	1.11.2.1
468791b
@@ -33,7 +33,7 @@
468791b
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char svcout_rcsid[] =
468791b
-  "$Id: rpc_svcout.c,v 1.12 2004/10/17 14:59:39 drepper Exp $";
468791b
+  "$Id: rpc_svcout.c,v 1.11.2.1 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
468791b
 
468791b
 /*
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_tblout.c	17 Oct 2004 14:59:39 -0000	1.3
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_tblout.c	18 Oct 2004 09:58:53 -0000	1.2.6.1
468791b
@@ -33,7 +33,7 @@
468791b
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char tblout_rcsid[] =
468791b
-  "$Id: rpc_tblout.c,v 1.3 2004/10/17 14:59:39 drepper Exp $";
468791b
+  "$Id: rpc_tblout.c,v 1.2.6.1 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
468791b
 
468791b
 /*
6bd344f
--- glibc-20041021T0701/sunrpc/rpc_util.c	17 Oct 2004 14:59:39 -0000	1.7
6bd344f
+++ glibc-20041021T0701-fedora/sunrpc/rpc_util.c	18 Oct 2004 09:58:53 -0000	1.6.6.1
468791b
@@ -33,7 +33,7 @@
468791b
  */
468791b
 #if defined(LIBC_SCCS) && !defined(lint)
468791b
 static const char util_rcsid[] =
468791b
-  "$Id: rpc_util.c,v 1.7 2004/10/17 14:59:39 drepper Exp $";
468791b
+  "$Id: rpc_util.c,v 1.6.6.1 2004/10/18 09:58:53 jakub Exp $";
468791b
 #endif
468791b
 
468791b
 /*
6bd344f
--- glibc-20041021T0701/sysdeps/generic/dl-cache.h	25 Jun 2003 08:01:22 -0000	1.13
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/generic/dl-cache.h	22 Sep 2004 21:21:07 -0000	1.13.2.1
c7aa529
@@ -36,6 +36,14 @@
c7aa529
 # define add_system_dir(dir) add_dir (dir)
c7aa529
 #endif
c7aa529
 
c7aa529
+#ifndef arch_startup
c7aa529
+# define arch_startup(argc, argv) do { } while (0)
c7aa529
+#endif
c7aa529
+
c7aa529
+#ifndef add_arch_dirs
c7aa529
+# define add_arch_dirs(config_file) do { } while (0)
c7aa529
+#endif
c7aa529
+
c7aa529
 #define CACHEMAGIC "ld.so-1.7.0"
c7aa529
 
c7aa529
 /* libc5 and glibc 2.0/2.1 use the same format.  For glibc 2.2 another
03d0525
--- glibc-20041021T0701/sysdeps/gnu/Makefile	20 Oct 2004 10:04:57 -0000	1.19
03d0525
+++ glibc-20041021T0701-fedora/sysdeps/gnu/Makefile	21 Oct 2004 11:46:42 -0000	1.18.2.2
03d0525
@@ -49,14 +49,10 @@ endif
03d0525
 # Make it unwritable so noone will edit it by mistake.
03d0525
 	-chmod a-w $@T
03d0525
 	mv -f $@T $@
03d0525
-$(objpfx)errlist-compat.h: $(objpfx)errlist-compat.c
03d0525
-	sed -n '1p;/ERR_MAX/p' $< > $@T
03d0525
-	-chmod a-w $@T
03d0525
-	mv -f $@T $@
03d0525
-generated += errlist-compat.c errlist-compat.h
03d0525
+generated += errlist-compat.c
03d0525
 
03d0525
 # This will force the generation above to happy if need be.
03d0525
-$(foreach o,.d $(object-suffixes),$(objpfx)errlist$o):$(objpfx)errlist-compat.h
03d0525
+$(foreach o,.d $(object-suffixes),$(objpfx)errlist$o):$(objpfx)errlist-compat.c
03d0525
 endif
03d0525
 
03d0525
 ifeq ($(subdir),login)
03d0525
--- glibc-20041021T0701/sysdeps/gnu/errlist-compat.awk	20 Oct 2004 10:04:57 -0000	1.6
03d0525
+++ glibc-20041021T0701-fedora/sysdeps/gnu/errlist-compat.awk	21 Oct 2004 11:46:42 -0000	1.5.2.2
03d0525
@@ -59,7 +59,7 @@ END {
03d0525
 
03d0525
   count = maxerr + 1;
03d0525
 
03d0525
-  if (highest < count) {
03d0525
+  if (highest != count) {
03d0525
     printf "*** errlist.c count %d vs Versions sys_errlist@%s count %d\n", \
03d0525
       count, highest_version, highest > "/dev/stderr";
03d0525
     exit 1;
03d0525
@@ -79,12 +79,6 @@ END {
03d0525
   print "/* This file was generated by errlist-compat.awk; DO NOT EDIT!  */\n";
03d0525
   print "#include <shlib-compat.h>\n";
03d0525
 
03d0525
-  if (highest > count) {
03d0525
-    printf "*** errlist.c count %d inflated to %s count %d (old errno.h?)\n", \
03d0525
-      count, highest_version, highest > "/dev/stderr";
03d0525
-    printf "#define ERR_MAX %d\n\n", highest;
03d0525
-  }
03d0525
-
03d0525
   for (old in compat) {
03d0525
     new = compat[old];
03d0525
     n = vcount[old];
03d0525
--- glibc-20041021T0701/sysdeps/gnu/errlist.awk	20 Oct 2004 10:04:57 -0000	1.22
03d0525
+++ glibc-20041021T0701-fedora/sysdeps/gnu/errlist.awk	21 Oct 2004 11:46:42 -0000	1.21.2.2
03d0525
@@ -47,16 +47,7 @@ BEGIN {
03d0525
     print "#endif";
03d0525
     print "";
03d0525
 
03d0525
-    print "#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT";
03d0525
-    print "# include <errlist-compat.h>";
03d0525
-    print "#endif";
03d0525
-    print "#ifdef ERR_MAX";
03d0525
-    print "# define ERRLIST_SIZE ERR_MAX + 1";
03d0525
-    print "#else"
03d0525
-    print "# define ERRLIST_SIZE";
03d0525
-    print "#endif";
03d0525
-
03d0525
-    print "const char *const _sys_errlist_internal[ERRLIST_SIZE] =";
03d0525
+    print "const char *const _sys_errlist_internal[] =";
03d0525
     print "  {";
03d0525
     print "    [0] = N_(\"Success\"),"
03d0525
   }
03d0525
--- glibc-20041021T0701/sysdeps/gnu/errlist.c	20 Oct 2004 10:05:01 -0000	1.30
03d0525
+++ glibc-20041021T0701-fedora/sysdeps/gnu/errlist.c	21 Oct 2004 11:46:42 -0000	1.27.2.2
03d0525
@@ -7,15 +7,7 @@
03d0525
 # define ERR_REMAP(n) n
03d0525
 #endif
03d0525
 
03d0525
-#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT
03d0525
-# include <errlist-compat.h>
03d0525
-#endif
03d0525
-#ifdef ERR_MAX
03d0525
-# define ERRLIST_SIZE ERR_MAX + 1
03d0525
-#else
03d0525
-# define ERRLIST_SIZE
03d0525
-#endif
03d0525
-const char *const _sys_errlist_internal[ERRLIST_SIZE] =
03d0525
+const char *const _sys_errlist_internal[] =
03d0525
   {
03d0525
     [0] = N_("Success"),
03d0525
 #ifdef EPERM
03d0525
@@ -1408,38 +1400,6 @@ TRANS error; @pxref{Cancel AIO Operation
03d0525
 # define ERR_MAX EMEDIUMTYPE
03d0525
 # endif
03d0525
 #endif
03d0525
-#ifdef ENOKEY
03d0525
-/* */
03d0525
-    [ERR_REMAP (ENOKEY)] = N_("Required key not available"),
03d0525
-# if ENOKEY > ERR_MAX
03d0525
-# undef ERR_MAX
03d0525
-# define ERR_MAX ENOKEY
03d0525
-# endif
03d0525
-#endif
03d0525
-#ifdef EKEYEXPIRED
03d0525
-/* */
03d0525
-    [ERR_REMAP (EKEYEXPIRED)] = N_("Key has expired"),
03d0525
-# if EKEYEXPIRED > ERR_MAX
03d0525
-# undef ERR_MAX
03d0525
-# define ERR_MAX EKEYEXPIRED
03d0525
-# endif
03d0525
-#endif
03d0525
-#ifdef EKEYREVOKED
03d0525
-/* */
03d0525
-    [ERR_REMAP (EKEYREVOKED)] = N_("Key has been revoked"),
03d0525
-# if EKEYREVOKED > ERR_MAX
03d0525
-# undef ERR_MAX
03d0525
-# define ERR_MAX EKEYREVOKED
03d0525
-# endif
03d0525
-#endif
03d0525
-#ifdef EKEYREJECTED
03d0525
-/* */
03d0525
-    [ERR_REMAP (EKEYREJECTED)] = N_("Key was rejected by service"),
03d0525
-# if EKEYREJECTED > ERR_MAX
03d0525
-# undef ERR_MAX
03d0525
-# define ERR_MAX EKEYREJECTED
03d0525
-# endif
03d0525
-#endif
03d0525
   };
03d0525
 
03d0525
 const int _sys_nerr_internal
6bd344f
--- glibc-20041021T0701/sysdeps/i386/bits/atomic.h 1 Jan 1970 00:00:00 -0000
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/i386/bits/atomic.h	5 Oct 2004 12:09:44 -0000	1.1.2.3
7e89ca4
@@ -0,0 +1,410 @@
c7aa529
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
c7aa529
+   This file is part of the GNU C Library.
c7aa529
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
c7aa529
+
c7aa529
+   The GNU C Library is free software; you can redistribute it and/or
c7aa529
+   modify it under the terms of the GNU Lesser General Public
c7aa529
+   License as published by the Free Software Foundation; either
c7aa529
+   version 2.1 of the License, or (at your option) any later version.
c7aa529
+
c7aa529
+   The GNU C Library is distributed in the hope that it will be useful,
c7aa529
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
+   Lesser General Public License for more details.
c7aa529
+
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
+   License along with the GNU C Library; if not, write to the Free
c7aa529
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
c7aa529
+   02111-1307 USA.  */
c7aa529
+
c7aa529
+#include <stdint.h>
c7aa529
+
c7aa529
+
c7aa529
+typedef int8_t atomic8_t;
c7aa529
+typedef uint8_t uatomic8_t;
c7aa529
+typedef int_fast8_t atomic_fast8_t;
c7aa529
+typedef uint_fast8_t uatomic_fast8_t;
c7aa529
+
c7aa529
+typedef int16_t atomic16_t;
c7aa529
+typedef uint16_t uatomic16_t;
c7aa529
+typedef int_fast16_t atomic_fast16_t;
c7aa529
+typedef uint_fast16_t uatomic_fast16_t;
c7aa529
+
c7aa529
+typedef int32_t atomic32_t;
c7aa529
+typedef uint32_t uatomic32_t;
c7aa529
+typedef int_fast32_t atomic_fast32_t;
c7aa529
+typedef uint_fast32_t uatomic_fast32_t;
c7aa529
+
c7aa529
+typedef int64_t atomic64_t;
c7aa529
+typedef uint64_t uatomic64_t;
c7aa529
+typedef int_fast64_t atomic_fast64_t;
c7aa529
+typedef uint_fast64_t uatomic_fast64_t;
c7aa529
+
c7aa529
+typedef intptr_t atomicptr_t;
c7aa529
+typedef uintptr_t uatomicptr_t;
c7aa529
+typedef intmax_t atomic_max_t;
c7aa529
+typedef uintmax_t uatomic_max_t;
c7aa529
+
c7aa529
+
c7aa529
+#ifndef LOCK_PREFIX
c7aa529
+# ifdef UP
c7aa529
+#  define LOCK_PREFIX	/* nothing */
c7aa529
+# else
c7aa529
+#  define LOCK_PREFIX "lock;"
c7aa529
+# endif
c7aa529
+#endif
c7aa529
+
c7aa529
+/* i386 doesn't have cmpxchg* and xadd*.  Instead of being completely
c7aa529
+   non-atomic, atomic_* macros that are using solely i386 instructions
c7aa529
+   are using those atomic instructions and the remaining ones are
c7aa529
+   non-atomic.  When in nscd, use i486+ instructions if on i486+.  */
c7aa529
+
c7aa529
+#ifdef IS_IN_nscd
c7aa529
+
c7aa529
+extern int has_cmpxchg attribute_hidden;
c7aa529
+
c7aa529
+#define atomic_supports_shared has_cmpxchg
c7aa529
+
c7aa529
+#define atomic_init_nscd \
c7aa529
+int has_cmpxchg attribute_hidden;					      \
c7aa529
+static void __attribute__((constructor))				      \
c7aa529
+init_has_cmpxchg (void)							      \
c7aa529
+{									      \
c7aa529
+  int fl1, fl2;								      \
c7aa529
+  __asm__ ("pushfl; pushfl; popl %0; movl %0,%1; xorl %2,%0;"		      \
c7aa529
+	   "pushl %0; popfl; pushfl; popl %0; popfl"			      \
c7aa529
+	   : "=&r" (fl1), "=&r" (fl2) : "i" (0x00040000));		      \
c7aa529
+  if ((fl1 ^ fl2) & 0x00040000)						      \
c7aa529
+    has_cmpxchg = 1;							      \
c7aa529
+}
c7aa529
+
c7aa529
+# define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
c7aa529
+  ({ __typeof (*mem) ret;						      \
c7aa529
+     if (__builtin_expect (has_cmpxchg, 1))				      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "cmpxchgb %b2, %1"			      \
c7aa529
+			 : "=a" (ret), "=m" (*mem)			      \
c7aa529
+			 : "q" (newval), "m" (*mem), "0" (oldval));	      \
c7aa529
+     else								      \
c7aa529
+       {								      \
c7aa529
+	 ret = *mem;							      \
c7aa529
+	 if (ret == oldval)						      \
c7aa529
+	   *mem = (newval);						      \
c7aa529
+       }								      \
c7aa529
+     ret; })
c7aa529
+
c7aa529
+# define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
c7aa529
+  ({ __typeof (*mem) ret;						      \
c7aa529
+     if (__builtin_expect (has_cmpxchg, 1))				      \
78a67cf
+       __asm __volatile (LOCK_PREFIX "cmpxchgw %w2, %1"			      \
78a67cf
+			 : "=a" (ret), "=m" (*mem)			      \
78a67cf
+			 : "r" (newval), "m" (*mem), "0" (oldval));	      \
78a67cf
+     else								      \
78a67cf
+       {								      \
78a67cf
+	 ret = *mem;							      \
78a67cf
+	 if (ret == oldval)						      \
78a67cf
+	   *mem = (newval);						      \
78a67cf
+       }								      \
c7aa529
+     ret; })
c7aa529
+
c7aa529
+# define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
c7aa529
+  ({ __typeof (*mem) ret;						      \
c7aa529
+     if (__builtin_expect (has_cmpxchg, 1))				      \
78a67cf
+       __asm __volatile (LOCK_PREFIX "cmpxchgl %2, %1"			      \
78a67cf
+			 : "=a" (ret), "=m" (*mem)			      \
78a67cf
+			 : "r" (newval), "m" (*mem), "0" (oldval));	      \
78a67cf
+     else								      \
78a67cf
+       {								      \
78a67cf
+	 ret = *mem;							      \
78a67cf
+	 if (ret == oldval)						      \
78a67cf
+	   *mem = (newval);						      \
78a67cf
+       }								      \
c7aa529
+     ret; })
c7aa529
+
c7aa529
+/* XXX We do not really need 64-bit compare-and-exchange.  At least
c7aa529
+   not in the moment.  */
c7aa529
+# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
c7aa529
+  ({ __typeof (*mem) ret = *(mem); abort (); ret = (newval); ret = (oldval); })
c7aa529
+
c7aa529
+
c7aa529
+# define atomic_exchange_and_add(mem, value) \
c7aa529
+  ({ __typeof (*mem) __result;						      \
c7aa529
+     __typeof (value) __addval = (value);				      \
c7aa529
+     if (__builtin_expect (! has_cmpxchg, 0))				      \
c7aa529
+       {								      \
c7aa529
+	 __typeof (mem) __memp = (mem);					      \
c7aa529
+	 __result = *__memp;						      \
c7aa529
+	 *__memp += __addval;						      \
c7aa529
+       }								      \
c7aa529
+     else if (sizeof (*mem) == 1)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "xaddb %b0, %1"			      \
c7aa529
+			 : "=r" (__result), "=m" (*mem)			      \
c7aa529
+			 : "0" (__addval), "m" (*mem));			      \
c7aa529
+     else if (sizeof (*mem) == 2)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "xaddw %w0, %1"			      \
c7aa529
+			 : "=r" (__result), "=m" (*mem)			      \
c7aa529
+			 : "0" (__addval), "m" (*mem));			      \
c7aa529
+     else if (sizeof (*mem) == 4)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "xaddl %0, %1"			      \
c7aa529
+			 : "=r" (__result), "=m" (*mem)			      \
c7aa529
+			 : "0" (__addval), "m" (*mem));			      \
c7aa529
+     else								      \
c7aa529
+       {								      \
c7aa529
+	 __typeof (mem) __memp = (mem);					      \
c7aa529
+	 __typeof (*mem) __tmpval;					      \
c7aa529
+	 __result = *__memp;						      \
c7aa529
+	 do								      \
c7aa529
+	   __tmpval = __result;						      \
c7aa529
+	 while ((__result = __arch_compare_and_exchange_val_64_acq	      \
c7aa529
+		 (__memp, __result + __addval, __result)) == __tmpval);	      \
c7aa529
+       }								      \
c7aa529
+     __result; })
c7aa529
+
c7aa529
+#else
c7aa529
+
c7aa529
+/* We have by default no support for atomic operations.  So define
c7aa529
+   them non-atomic.  If this is a problem somebody will have to come
c7aa529
+   up with real definitions.  */
c7aa529
+
c7aa529
+/* The only basic operation needed is compare and exchange.  */
c7aa529
+#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
c7aa529
+  ({ __typeof (mem) __gmemp = (mem);					      \
c7aa529
+     __typeof (*mem) __gret = *__gmemp;					      \
c7aa529
+     __typeof (*mem) __gnewval = (newval);				      \
c7aa529
+									      \
c7aa529
+     if (__gret == (oldval))						      \
c7aa529
+       *__gmemp = __gnewval;						      \
c7aa529
+     __gret; })
c7aa529
+
c7aa529
+#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
c7aa529
+  ({ __typeof (mem) __gmemp = (mem);					      \
c7aa529
+     __typeof (*mem) __gnewval = (newval);				      \
c7aa529
+									      \
c7aa529
+     *__gmemp == (oldval) ? (*__gmemp = __gnewval, 0) : 1; })
c7aa529
+
7e89ca4
+/* XXX We do not really need 64-bit compare-and-exchange.  At least
7e89ca4
+   not in the moment.  */
7e89ca4
+# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
7e89ca4
+  ({ __typeof (*mem) ret = *(mem); abort (); ret = (newval); ret = (oldval); })
7e89ca4
+
c7aa529
+#endif
c7aa529
+
c7aa529
+/* Note that we need no lock prefix.  */
c7aa529
+#define atomic_exchange_acq(mem, newvalue) \
c7aa529
+  ({ __typeof (*mem) result;						      \
c7aa529
+     if (sizeof (*mem) == 1)						      \
c7aa529
+       __asm __volatile ("xchgb %b0, %1"				      \
c7aa529
+			 : "=r" (result), "=m" (*mem)			      \
c7aa529
+			 : "0" (newvalue), "m" (*mem));			      \
c7aa529
+     else if (sizeof (*mem) == 2)					      \
c7aa529
+       __asm __volatile ("xchgw %w0, %1"				      \
c7aa529
+			 : "=r" (result), "=m" (*mem)			      \
c7aa529
+			 : "0" (newvalue), "m" (*mem));			      \
c7aa529
+     else if (sizeof (*mem) == 4)					      \
c7aa529
+       __asm __volatile ("xchgl %0, %1"					      \
c7aa529
+			 : "=r" (result), "=m" (*mem)			      \
c7aa529
+			 : "0" (newvalue), "m" (*mem));			      \
c7aa529
+     else								      \
c7aa529
+       {								      \
c7aa529
+	 result = 0;							      \
c7aa529
+	 abort ();							      \
c7aa529
+       }								      \
c7aa529
+     result; })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_add(mem, value) \
c7aa529
+  (void) ({ if (__builtin_constant_p (value) && (value) == 1)		      \
c7aa529
+	      atomic_increment (mem);					      \
c7aa529
+	    else if (__builtin_constant_p (value) && (value) == -1)	      \
c7aa529
+	      atomic_decrement (mem);					      \
c7aa529
+	    else if (sizeof (*mem) == 1)				      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "addb %b1, %0"		      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "ir" (value), "m" (*mem));		      \
c7aa529
+	    else if (sizeof (*mem) == 2)				      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "addw %w1, %0"		      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "ir" (value), "m" (*mem));		      \
c7aa529
+	    else if (sizeof (*mem) == 4)				      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "addl %1, %0"		      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "ir" (value), "m" (*mem));		      \
c7aa529
+	    else							      \
c7aa529
+	      {								      \
c7aa529
+		__typeof (value) __addval = (value);			      \
c7aa529
+		__typeof (mem) __memp = (mem);				      \
c7aa529
+		__typeof (*mem) __oldval = *__memp;			      \
c7aa529
+		__typeof (*mem) __tmpval;				      \
c7aa529
+		do							      \
c7aa529
+		  __tmpval = __oldval;					      \
c7aa529
+		while ((__oldval = __arch_compare_and_exchange_val_64_acq     \
c7aa529
+		       (__memp, __oldval + __addval, __oldval)) == __tmpval); \
c7aa529
+	      }								      \
c7aa529
+	    })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_add_negative(mem, value) \
c7aa529
+  ({ unsigned char __result;						      \
c7aa529
+     if (sizeof (*mem) == 1)						      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "addb %b2, %0; sets %1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "iq" (value), "m" (*mem));			      \
c7aa529
+     else if (sizeof (*mem) == 2)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "addw %w2, %0; sets %1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "ir" (value), "m" (*mem));			      \
c7aa529
+     else if (sizeof (*mem) == 4)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "addl %2, %0; sets %1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "ir" (value), "m" (*mem));			      \
c7aa529
+     else								      \
c7aa529
+       abort ();							      \
c7aa529
+     __result; })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_add_zero(mem, value) \
c7aa529
+  ({ unsigned char __result;						      \
c7aa529
+     if (sizeof (*mem) == 1)						      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "addb %b2, %0; setz %1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "ir" (value), "m" (*mem));			      \
c7aa529
+     else if (sizeof (*mem) == 2)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "addw %w2, %0; setz %1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "ir" (value), "m" (*mem));			      \
c7aa529
+     else if (sizeof (*mem) == 4)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "addl %2, %0; setz %1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "ir" (value), "m" (*mem));			      \
c7aa529
+     else								      \
c7aa529
+       abort ();							      \
c7aa529
+     __result; })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_increment(mem) \
c7aa529
+  (void) ({ if (sizeof (*mem) == 1)					      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "incb %b0"			      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "m" (*mem));				      \
c7aa529
+	    else if (sizeof (*mem) == 2)				      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "incw %w0"			      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "m" (*mem));				      \
c7aa529
+	    else if (sizeof (*mem) == 4)				      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "incl %0"			      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "m" (*mem));				      \
c7aa529
+	    else							      \
c7aa529
+	      {								      \
c7aa529
+		__typeof (mem) __memp = (mem);				      \
c7aa529
+		__typeof (*mem) __oldval = *__memp;			      \
c7aa529
+		__typeof (*mem) __tmpval;				      \
c7aa529
+		do							      \
c7aa529
+		  __tmpval = __oldval;					      \
c7aa529
+		while ((__oldval = __arch_compare_and_exchange_val_64_acq     \
c7aa529
+		       (__memp, __oldval + 1, __oldval)) == __tmpval);	      \
c7aa529
+	      }								      \
c7aa529
+	    })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_increment_and_test(mem) \
c7aa529
+  ({ unsigned char __result;						      \
c7aa529
+     if (sizeof (*mem) == 1)						      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "incb %0; sete %b1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "m" (*mem));					      \
c7aa529
+     else if (sizeof (*mem) == 2)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "incw %0; sete %w1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "m" (*mem));					      \
c7aa529
+     else if (sizeof (*mem) == 4)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "incl %0; sete %1"			      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "m" (*mem));					      \
c7aa529
+     else								      \
c7aa529
+       abort ();							      \
c7aa529
+     __result; })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_decrement(mem) \
c7aa529
+  (void) ({ if (sizeof (*mem) == 1)					      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "decb %b0"			      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "m" (*mem));				      \
c7aa529
+	    else if (sizeof (*mem) == 2)				      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "decw %w0"			      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "m" (*mem));				      \
c7aa529
+	    else if (sizeof (*mem) == 4)				      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "decl %0"			      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "m" (*mem));				      \
c7aa529
+	    else							      \
c7aa529
+	      {								      \
c7aa529
+		__typeof (mem) __memp = (mem);				      \
c7aa529
+		__typeof (*mem) __oldval = *__memp;			      \
c7aa529
+		__typeof (*mem) __tmpval;				      \
c7aa529
+		do							      \
c7aa529
+		  __tmpval = __oldval;					      \
c7aa529
+		while ((__oldval = __arch_compare_and_exchange_val_64_acq     \
c7aa529
+		       (__memp, __oldval - 1, __oldval)) == __tmpval); 	      \
c7aa529
+	      }								      \
c7aa529
+	    })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_decrement_and_test(mem) \
c7aa529
+  ({ unsigned char __result;						      \
c7aa529
+     if (sizeof (*mem) == 1)						      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "decb %b0; sete %1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "m" (*mem));					      \
c7aa529
+     else if (sizeof (*mem) == 2)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "decw %w0; sete %1"		      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "m" (*mem));					      \
c7aa529
+     else if (sizeof (*mem) == 4)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "decl %0; sete %1"			      \
c7aa529
+			 : "=m" (*mem), "=qm" (__result)		      \
c7aa529
+			 : "m" (*mem));					      \
c7aa529
+     else								      \
c7aa529
+       abort ();							      \
c7aa529
+     __result; })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_bit_set(mem, bit) \
c7aa529
+  (void) ({ if (sizeof (*mem) == 1)					      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "orb %b2, %0"		      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "m" (*mem), "ir" (1 << (bit)));	      \
c7aa529
+	    else if (sizeof (*mem) == 2)				      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "orw %w2, %0"		      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "m" (*mem), "ir" (1 << (bit)));	      \
c7aa529
+	    else if (sizeof (*mem) == 4)				      \
c7aa529
+	      __asm __volatile (LOCK_PREFIX "orl %2, %0"		      \
c7aa529
+				: "=m" (*mem)				      \
c7aa529
+				: "m" (*mem), "ir" (1 << (bit)));	      \
c7aa529
+	    else							      \
c7aa529
+	      abort ();							      \
c7aa529
+	    })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_bit_test_set(mem, bit) \
c7aa529
+  ({ unsigned char __result;						      \
c7aa529
+     if (sizeof (*mem) == 1)						      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "btsb %3, %1; setc %0"		      \
c7aa529
+			 : "=q" (__result), "=m" (*mem)			      \
c7aa529
+			 : "m" (*mem), "ir" (bit));			      \
c7aa529
+     else if (sizeof (*mem) == 2)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "btsw %3, %1; setc %0"		      \
c7aa529
+			 : "=q" (__result), "=m" (*mem)			      \
c7aa529
+			 : "m" (*mem), "ir" (bit));			      \
c7aa529
+     else if (sizeof (*mem) == 4)					      \
c7aa529
+       __asm __volatile (LOCK_PREFIX "btsl %3, %1; setc %0"		      \
c7aa529
+			 : "=q" (__result), "=m" (*mem)			      \
c7aa529
+			 : "m" (*mem), "ir" (bit));			      \
c7aa529
+     else							      	      \
c7aa529
+       abort ();							      \
c7aa529
+     __result; })
c7aa529
+
c7aa529
+
c7aa529
+#define atomic_delay() asm ("rep; nop")
6bd344f
--- glibc-20041021T0701/sysdeps/ia64/Makefile	16 Aug 2004 06:46:14 -0000	1.10
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/ia64/Makefile	22 Sep 2004 21:21:07 -0000	1.10.2.1
c7aa529
@@ -12,8 +12,8 @@ elide-routines.os += hp-timing
c7aa529
 
c7aa529
 ifeq (yes,$(build-shared))
c7aa529
 # Compatibility
c7aa529
-sysdep_routines += ia64libgcc
c7aa529
-shared-only-routines += ia64libgcc
c7aa529
+sysdep_routines += libgcc-compat
c7aa529
+shared-only-routines += libgcc-compat
c7aa529
 endif
c7aa529
 endif
c7aa529
 
6bd344f
--- glibc-20041021T0701/sysdeps/ia64/ia64libgcc.S	11 May 2002 05:12:35 -0000	1.2
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/ia64/ia64libgcc.S	22 Sep 2004 21:21:07 -0000	1.2.2.1
c7aa529
@@ -1,350 +0,0 @@
c7aa529
-/* From the Intel IA-64 Optimization Guide, choose the minimum latency
c7aa529
-   alternative.  */
c7aa529
-
c7aa529
-#include <sysdep.h>
c7aa529
-#undef ret
c7aa529
-
c7aa529
-#include <shlib-compat.h>
c7aa529
-
c7aa529
-#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6)
c7aa529
-
c7aa529
-/* __divtf3
c7aa529
-   Compute a 80-bit IEEE double-extended quotient.
c7aa529
-   farg0 holds the dividend.  farg1 holds the divisor.  */
c7aa529
-
c7aa529
-ENTRY(___divtf3)
c7aa529
-	cmp.eq p7, p0 = r0, r0
c7aa529
-	frcpa.s0 f10, p6 = farg0, farg1
c7aa529
-	;;
c7aa529
-(p6)	cmp.ne p7, p0 = r0, r0
c7aa529
-	.pred.rel.mutex p6, p7
c7aa529
-(p6)	fnma.s1 f11 = farg1, f10, f1
c7aa529
-(p6)	fma.s1 f12 = farg0, f10, f0
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f13 = f11, f11, f0
c7aa529
-(p6)	fma.s1 f14 = f11, f11, f11
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f11 = f13, f13, f11
c7aa529
-(p6)	fma.s1 f13 = f14, f10, f10
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f13, f11, f10
c7aa529
-(p6)	fnma.s1 f11 = farg1, f12, farg0
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f11 = f11, f10, f12
c7aa529
-(p6)	fnma.s1 f12 = farg1, f10, f1
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f12, f10, f10
c7aa529
-(p6)	fnma.s1 f12 = farg1, f11, farg0
c7aa529
-	;;
c7aa529
-(p6)	fma.s0 fret0 = f12, f10, f11
c7aa529
-(p7)	mov fret0 = f10
c7aa529
-	br.ret.sptk rp
c7aa529
-END(___divtf3)
c7aa529
-	.symver ___divtf3, __divtf3@GLIBC_2.2
c7aa529
-
c7aa529
-/* __divdf3
c7aa529
-   Compute a 64-bit IEEE double quotient.
c7aa529
-   farg0 holds the dividend.  farg1 holds the divisor.  */
c7aa529
-
c7aa529
-ENTRY(___divdf3)
c7aa529
-	cmp.eq p7, p0 = r0, r0
c7aa529
-	frcpa.s0 f10, p6 = farg0, farg1
c7aa529
-	;;
c7aa529
-(p6)	cmp.ne p7, p0 = r0, r0
c7aa529
-	.pred.rel.mutex p6, p7
c7aa529
-(p6)	fmpy.s1 f11 = farg0, f10
c7aa529
-(p6)	fnma.s1 f12 = farg1, f10, f1
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f11 = f12, f11, f11
c7aa529
-(p6)	fmpy.s1 f13 = f12, f12
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f12, f10, f10
c7aa529
-(p6)	fma.s1 f11 = f13, f11, f11
c7aa529
-	;;
c7aa529
-(p6)	fmpy.s1 f12 = f13, f13
c7aa529
-(p6)	fma.s1 f10 = f13, f10, f10
c7aa529
-	;;
c7aa529
-(p6)	fma.d.s1 f11 = f12, f11, f11
c7aa529
-(p6)	fma.s1 f10 = f12, f10, f10
c7aa529
-	;;
c7aa529
-(p6)	fnma.d.s1 f8 = farg1, f11, farg0
c7aa529
-	;;
c7aa529
-(p6)	fma.d fret0 = f8, f10, f11
c7aa529
-(p7)	mov fret0 = f10
c7aa529
-	br.ret.sptk rp
c7aa529
-	;;
c7aa529
-END(___divdf3)
c7aa529
-	.symver	___divdf3, __divdf3@GLIBC_2.2
c7aa529
-
c7aa529
-/* __divsf3
c7aa529
-   Compute a 32-bit IEEE float quotient.
c7aa529
-   farg0 holds the dividend.  farg1 holds the divisor.  */
c7aa529
-
c7aa529
-ENTRY(___divsf3)
c7aa529
-	cmp.eq p7, p0 = r0, r0
c7aa529
-	frcpa.s0 f10, p6 = farg0, farg1
c7aa529
-	;;
c7aa529
-(p6)	cmp.ne p7, p0 = r0, r0
c7aa529
-	.pred.rel.mutex p6, p7
c7aa529
-(p6)	fmpy.s1 f8 = farg0, f10
c7aa529
-(p6)	fnma.s1 f9 = farg1, f10, f1
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f8 = f9, f8, f8
c7aa529
-(p6)	fmpy.s1 f9 = f9, f9
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f8 = f9, f8, f8
c7aa529
-(p6)	fmpy.s1 f9 = f9, f9
c7aa529
-	;;
c7aa529
-(p6)	fma.d.s1 f10 = f9, f8, f8
c7aa529
-	;;
c7aa529
-(p6)	fnorm.s.s0 fret0 = f10
c7aa529
-(p7)	mov fret0 = f10
c7aa529
-	br.ret.sptk rp
c7aa529
-	;;
c7aa529
-END(___divsf3)
c7aa529
-	.symver	___divsf3, __divsf3@GLIBC_2.2
c7aa529
-
c7aa529
-/* __divdi3
c7aa529
-   Compute a 64-bit integer quotient.
c7aa529
-   in0 holds the dividend.  in1 holds the divisor.  */
c7aa529
-
c7aa529
-ENTRY(___divdi3)
c7aa529
-	.regstk 2,0,0,0
c7aa529
-	/* Transfer inputs to FP registers.  */
c7aa529
-	setf.sig f8 = in0
c7aa529
-	setf.sig f9 = in1
c7aa529
-	;;
c7aa529
-	/* Convert the inputs to FP, so that they won't be treated as
c7aa529
-	   unsigned.  */
c7aa529
-	fcvt.xf f8 = f8
c7aa529
-	fcvt.xf f9 = f9
c7aa529
-	;;
c7aa529
-	/* Compute the reciprocal approximation.  */
c7aa529
-	frcpa.s1 f10, p6 = f8, f9
c7aa529
-	;;
c7aa529
-	/* 3 Newton-Raphson iterations.  */
c7aa529
-(p6)	fnma.s1 f11 = f9, f10, f1
c7aa529
-(p6)	fmpy.s1 f12 = f8, f10
c7aa529
-	;;
c7aa529
-(p6)	fmpy.s1 f13 = f11, f11
c7aa529
-(p6)	fma.s1 f12 = f11, f12, f12
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f11, f10, f10
c7aa529
-(p6)	fma.s1 f11 = f13, f12, f12
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f13, f10, f10
c7aa529
-(p6)	fnma.s1 f12 = f9, f11, f8
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f12, f10, f11
c7aa529
-	;;
c7aa529
-	/* Round quotient to an integer.  */
c7aa529
-	fcvt.fx.trunc.s1 f10 = f10
c7aa529
-	;;
c7aa529
-	/* Transfer result to GP registers.  */
c7aa529
-	getf.sig ret0 = f10
c7aa529
-	br.ret.sptk rp
c7aa529
-	;;
c7aa529
-END(___divdi3)
c7aa529
-	.symver	___divdi3, __divdi3@GLIBC_2.2
c7aa529
-
c7aa529
-/* __moddi3
c7aa529
-   Compute a 64-bit integer modulus.
c7aa529
-   in0 holds the dividend (a).  in1 holds the divisor (b).  */
c7aa529
-
c7aa529
-ENTRY(___moddi3)
c7aa529
-	.regstk 2,0,0,0
c7aa529
-	/* Transfer inputs to FP registers.  */
c7aa529
-	setf.sig f14 = in0
c7aa529
-	setf.sig f9 = in1
c7aa529
-	;;
c7aa529
-	/* Convert the inputs to FP, so that they won't be treated as
c7aa529
-	   unsigned.  */
c7aa529
-	fcvt.xf f8 = f14
c7aa529
-	fcvt.xf f9 = f9
c7aa529
-	;;
c7aa529
-	/* Compute the reciprocal approximation.  */
c7aa529
-	frcpa.s1 f10, p6 = f8, f9
c7aa529
-	;;
c7aa529
-	/* 3 Newton-Raphson iterations.  */
c7aa529
-(p6)	fmpy.s1 f12 = f8, f10
c7aa529
-(p6)	fnma.s1 f11 = f9, f10, f1
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f12 = f11, f12, f12
c7aa529
-(p6)	fmpy.s1 f13 = f11, f11
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f11, f10, f10
c7aa529
-(p6)	fma.s1 f11 = f13, f12, f12
c7aa529
-	;;
c7aa529
-	sub in1 = r0, in1
c7aa529
-(p6)	fma.s1 f10 = f13, f10, f10
c7aa529
-(p6)	fnma.s1 f12 = f9, f11, f8
c7aa529
-	;;
c7aa529
-	setf.sig f9 = in1
c7aa529
-(p6)	fma.s1 f10 = f12, f10, f11
c7aa529
-	;;
c7aa529
-	fcvt.fx.trunc.s1 f10 = f10
c7aa529
-	;;
c7aa529
-	/* r = q * (-b) + a  */
c7aa529
-	xma.l f10 = f10, f9, f14
c7aa529
-	;;
c7aa529
-	/* Transfer result to GP registers.  */
c7aa529
-	getf.sig ret0 = f10
c7aa529
-	br.ret.sptk rp
c7aa529
-	;;
c7aa529
-END(___moddi3)
c7aa529
-	.symver ___moddi3, __moddi3@GLIBC_2.2
c7aa529
-
c7aa529
-/* __udivdi3
c7aa529
-   Compute a 64-bit unsigned integer quotient.
c7aa529
-   in0 holds the dividend.  in1 holds the divisor.  */
c7aa529
-
c7aa529
-ENTRY(___udivdi3)
c7aa529
-	.regstk 2,0,0,0
c7aa529
-	/* Transfer inputs to FP registers.  */
c7aa529
-	setf.sig f8 = in0
c7aa529
-	setf.sig f9 = in1
c7aa529
-	;;
c7aa529
-	/* Convert the inputs to FP, to avoid FP software-assist faults.  */
c7aa529
-	fcvt.xuf.s1 f8 = f8
c7aa529
-	fcvt.xuf.s1 f9 = f9
c7aa529
-	;;
c7aa529
-	/* Compute the reciprocal approximation.  */
c7aa529
-	frcpa.s1 f10, p6 = f8, f9
c7aa529
-	;;
c7aa529
-	/* 3 Newton-Raphson iterations.  */
c7aa529
-(p6)	fnma.s1 f11 = f9, f10, f1
c7aa529
-(p6)	fmpy.s1 f12 = f8, f10
c7aa529
-	;;
c7aa529
-(p6)	fmpy.s1 f13 = f11, f11
c7aa529
-(p6)	fma.s1 f12 = f11, f12, f12
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f11, f10, f10
c7aa529
-(p6)	fma.s1 f11 = f13, f12, f12
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f13, f10, f10
c7aa529
-(p6)	fnma.s1 f12 = f9, f11, f8
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f12, f10, f11
c7aa529
-	;;
c7aa529
-	/* Round quotient to an unsigned integer.  */
c7aa529
-	fcvt.fxu.trunc.s1 f10 = f10
c7aa529
-	;;
c7aa529
-	/* Transfer result to GP registers.  */
c7aa529
-	getf.sig ret0 = f10
c7aa529
-	br.ret.sptk rp
c7aa529
-	;;
c7aa529
-END(___udivdi3)
c7aa529
-	.symver	___udivdi3, __udivdi3@GLIBC_2.2
c7aa529
-
c7aa529
-/* __umoddi3
c7aa529
-   Compute a 64-bit unsigned integer modulus.
c7aa529
-   in0 holds the dividend (a).  in1 holds the divisor (b).  */
c7aa529
-
c7aa529
-ENTRY(___umoddi3)
c7aa529
-	.regstk 2,0,0,0
c7aa529
-	/* Transfer inputs to FP registers.  */
c7aa529
-	setf.sig f14 = in0
c7aa529
-	setf.sig f9 = in1
c7aa529
-	;;
c7aa529
-	/* Convert the inputs to FP, to avoid FP software assist faults.  */
c7aa529
-	fcvt.xuf.s1 f8 = f14
c7aa529
-	fcvt.xuf.s1 f9 = f9
c7aa529
-	;;
c7aa529
-	/* Compute the reciprocal approximation.  */
c7aa529
-	frcpa.s1 f10, p6 = f8, f9
c7aa529
-	;;
c7aa529
-	/* 3 Newton-Raphson iterations.  */
c7aa529
-(p6)	fmpy.s1 f12 = f8, f10
c7aa529
-(p6)	fnma.s1 f11 = f9, f10, f1
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f12 = f11, f12, f12
c7aa529
-(p6)	fmpy.s1 f13 = f11, f11
c7aa529
-	;;
c7aa529
-(p6)	fma.s1 f10 = f11, f10, f10
c7aa529
-(p6)	fma.s1 f11 = f13, f12, f12
c7aa529
-	;;
c7aa529
-	sub in1 = r0, in1
c7aa529
-(p6)	fma.s1 f10 = f13, f10, f10
c7aa529
-(p6)	fnma.s1 f12 = f9, f11, f8
c7aa529
-	;;
c7aa529
-	setf.sig f9 = in1
c7aa529
-(p6)	fma.s1 f10 = f12, f10, f11
c7aa529
-	;;
c7aa529
-	/* Round quotient to an unsigned integer.  */
c7aa529
-	fcvt.fxu.trunc.s1 f10 = f10
c7aa529
-	;;
c7aa529
-	/* r = q * (-b) + a  */
c7aa529
-	xma.l f10 = f10, f9, f14
c7aa529
-	;;
c7aa529
-	/* Transfer result to GP registers.  */
c7aa529
-	getf.sig ret0 = f10
c7aa529
-	br.ret.sptk rp
c7aa529
-	;;
c7aa529
-END(___umoddi3)
c7aa529
-	.symver	___umoddi3, __umoddi3@GLIBC_2.2
c7aa529
-
c7aa529
-/* __multi3
c7aa529
-   Compute a 128-bit multiply of 128-bit multiplicands.
c7aa529
-   in0/in1 holds one multiplicand (a), in2/in3 holds the other one (b).  */
c7aa529
-
c7aa529
-ENTRY(___multi3)
c7aa529
-	.regstk 4,0,0,0
c7aa529
-	setf.sig f6 = in1
c7aa529
-	movl r19 = 0xffffffff
c7aa529
-	setf.sig f7 = in2
c7aa529
-	;;
c7aa529
-	and r14 = r19, in0
c7aa529
-	;;
c7aa529
-	setf.sig f10 = r14
c7aa529
-	and r14 = r19, in2
c7aa529
-	xmpy.l f9 = f6, f7
c7aa529
-	;;
c7aa529
-	setf.sig f6 = r14
c7aa529
-	shr.u r14 = in0, 32
c7aa529
-	;;
c7aa529
-	setf.sig f7 = r14
c7aa529
-	shr.u r14 = in2, 32
c7aa529
-	;;
c7aa529
-	setf.sig f8 = r14
c7aa529
-	xmpy.l f11 = f10, f6
c7aa529
-	xmpy.l f6 = f7, f6
c7aa529
-	;;
c7aa529
-	getf.sig r16 = f11
c7aa529
-	xmpy.l f7 = f7, f8
c7aa529
-	;;
c7aa529
-	shr.u r14 = r16, 32
c7aa529
-	and r16 = r19, r16
c7aa529
-	getf.sig r17 = f6
c7aa529
-	setf.sig f6 = in0
c7aa529
-	;;
c7aa529
-	setf.sig f11 = r14
c7aa529
-	getf.sig r21 = f7
c7aa529
-	setf.sig f7 = in3
c7aa529
-	;;
c7aa529
-	xma.l f11 = f10, f8, f11
c7aa529
-	xma.l f6 = f6, f7, f9
c7aa529
-	;;
c7aa529
-	getf.sig r18 = f11
c7aa529
-	;;
c7aa529
-	add r18 = r18, r17
c7aa529
-	;;
c7aa529
-	and r15 = r19, r18
c7aa529
-	cmp.ltu p7, p6 = r18, r17
c7aa529
-	;;
c7aa529
-	getf.sig r22 = f6
c7aa529
-(p7)	adds r14 = 1, r19
c7aa529
-	;;
c7aa529
-(p7)	add r21 = r21, r14
c7aa529
-	shr.u r14 = r18, 32
c7aa529
-	shl r15 = r15, 32
c7aa529
-	;;
c7aa529
-	add r20 = r21, r14
c7aa529
-	;;
c7aa529
-	add ret0 = r15, r16
c7aa529
-	add ret1 = r22, r20
c7aa529
-	br.ret.sptk rp
c7aa529
-	;;
c7aa529
-END(___multi3)
c7aa529
-	.symver	___multi3, __multi3@GLIBC_2.2
c7aa529
-
c7aa529
-#endif
6bd344f
--- glibc-20041021T0701/sysdeps/ia64/libgcc-compat.c 1 Jan 1970 00:00:00 -0000
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/ia64/libgcc-compat.c	22 Sep 2004 21:21:08 -0000	1.1.2.1
c7aa529
@@ -0,0 +1,84 @@
c7aa529
+/* pre-.hidden libgcc compatibility
c7aa529
+   Copyright (C) 2002 Free Software Foundation, Inc.
c7aa529
+   This file is part of the GNU C Library.
c7aa529
+
c7aa529
+   The GNU C Library is free software; you can redistribute it and/or
c7aa529
+   modify it under the terms of the GNU Lesser General Public
c7aa529
+   License as published by the Free Software Foundation; either
c7aa529
+   version 2.1 of the License, or (at your option) any later version.
c7aa529
+
c7aa529
+   The GNU C Library is distributed in the hope that it will be useful,
c7aa529
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
+   Lesser General Public License for more details.
c7aa529
+
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
+   License along with the GNU C Library; if not, write to the Free
c7aa529
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
c7aa529
+   02111-1307 USA.  */
c7aa529
+
c7aa529
+
c7aa529
+#include <stdint.h>
c7aa529
+#include <shlib-compat.h>
c7aa529
+
c7aa529
+#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6)
c7aa529
+
c7aa529
+typedef int int128_t __attribute__((__mode__(TI)));
c7aa529
+
c7aa529
+extern long double __divtf3 (long double, long double) attribute_hidden;
c7aa529
+long double INTUSE (__divtf3) (long double x, long double y)
c7aa529
+{
c7aa529
+  return __divtf3 (x, y);
c7aa529
+}
c7aa529
+symbol_version (INTUSE (__divtf3), __divtf3, GLIBC_2.2);
c7aa529
+
c7aa529
+extern double __divdf3 (double, double) attribute_hidden;
c7aa529
+double INTUSE (__divdf3) (double x, double y)
c7aa529
+{
c7aa529
+  return __divdf3 (x, y);
c7aa529
+}
c7aa529
+symbol_version (INTUSE (__divdf3), __divdf3, GLIBC_2.2);
c7aa529
+
c7aa529
+extern float __divsf3 (float, float) attribute_hidden;
c7aa529
+float INTUSE (__divsf3) (float x, float y)
c7aa529
+{
c7aa529
+  return __divsf3 (x, y);
c7aa529
+}
c7aa529
+symbol_version (INTUSE (__divsf3), __divsf3, GLIBC_2.2);
c7aa529
+
c7aa529
+extern int64_t __divdi3 (int64_t, int64_t) attribute_hidden;
c7aa529
+int64_t INTUSE (__divdi3) (int64_t x, int64_t y)
c7aa529
+{
c7aa529
+  return __divdi3 (x, y);
c7aa529
+}
c7aa529
+symbol_version (INTUSE (__divdi3), __divdi3, GLIBC_2.2);
c7aa529
+
c7aa529
+extern int64_t __moddi3 (int64_t, int64_t) attribute_hidden;
c7aa529
+int64_t INTUSE (__moddi3) (int64_t x, int64_t y)
c7aa529
+{
c7aa529
+  return __moddi3 (x, y);
c7aa529
+}
c7aa529
+symbol_version (INTUSE (__moddi3), __moddi3, GLIBC_2.2);
c7aa529
+
c7aa529
+extern uint64_t __udivdi3 (uint64_t, uint64_t) attribute_hidden;
c7aa529
+uint64_t INTUSE (__udivdi3) (uint64_t x, uint64_t y)
c7aa529
+{
c7aa529
+  return __udivdi3 (x, y);
c7aa529
+}
c7aa529
+symbol_version (INTUSE (__udivdi3), __udivdi3, GLIBC_2.2);
c7aa529
+
c7aa529
+extern uint64_t __umoddi3 (uint64_t, uint64_t) attribute_hidden;
c7aa529
+uint64_t INTUSE (__umoddi3) (uint64_t x, uint64_t y)
c7aa529
+{
c7aa529
+  return __umoddi3 (x, y);
c7aa529
+}
c7aa529
+symbol_version (INTUSE (__umoddi3), __umoddi3, GLIBC_2.2);
c7aa529
+
c7aa529
+extern int128_t __multi3 (int128_t, int128_t) attribute_hidden;
c7aa529
+int128_t INTUSE (__multi3) (int128_t x, int128_t y)
c7aa529
+{
c7aa529
+  return __multi3 (x, y);
c7aa529
+}
c7aa529
+symbol_version (INTUSE (__multi3), __multi3, GLIBC_2.2);
c7aa529
+
c7aa529
+#endif
6bd344f
--- glibc-20041021T0701/sysdeps/unix/nice.c	28 Sep 2002 19:13:13 -0000	1.6
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/unix/nice.c	22 Sep 2004 21:21:08 -0000	1.6.2.1
c7aa529
@@ -41,7 +41,12 @@ nice (int incr)
c7aa529
 	__set_errno (save);
c7aa529
     }
c7aa529
 
c7aa529
-  result = setpriority (PRIO_PROCESS, 0, prio + incr);
c7aa529
+  prio += incr;
c7aa529
+  if (prio < PRIO_MIN)
c7aa529
+    prio = PRIO_MIN;
c7aa529
+  else if (prio >= PRIO_MAX)
c7aa529
+    prio = PRIO_MAX - 1;
c7aa529
+  result = setpriority (PRIO_PROCESS, 0, prio);
c7aa529
   if (result != -1)
c7aa529
     return getpriority (PRIO_PROCESS, 0);
c7aa529
   else
03d0525
--- glibc-20041021T0701/sysdeps/unix/sysv/linux/Versions	20 Oct 2004 10:05:00 -0000	1.25
03d0525
+++ glibc-20041021T0701-fedora/sysdeps/unix/sysv/linux/Versions	21 Oct 2004 11:46:43 -0000	1.23.2.3
03d0525
@@ -114,12 +114,6 @@ libc {
03d0525
   }
03d0525
   GLIBC_2.3.4 {
03d0525
     sched_getaffinity; sched_setaffinity;
03d0525
-
03d0525
-    # new syscalls
03d0525
-    setaltroot; add_key; request_key; keyctl;
03d0525
-
03d0525
-    #errlist-compat	129
03d0525
-    _sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
03d0525
   }
03d0525
   GLIBC_PRIVATE {
03d0525
     # functions used in other libraries
6bd344f
--- glibc-20041021T0701/sysdeps/unix/sysv/linux/paths.h	15 Nov 2000 23:06:47 -0000	1.11
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/unix/sysv/linux/paths.h	22 Sep 2004 21:21:08 -0000	1.11.4.1
c7aa529
@@ -61,7 +61,7 @@
c7aa529
 #define	_PATH_TTY	"/dev/tty"
c7aa529
 #define	_PATH_UNIX	"/boot/vmlinux"
c7aa529
 #define _PATH_UTMP	"/var/run/utmp"
c7aa529
-#define	_PATH_VI	"/usr/bin/vi"
c7aa529
+#define	_PATH_VI	"/bin/vi"
c7aa529
 #define _PATH_WTMP	"/var/log/wtmp"
c7aa529
 
c7aa529
 /* Provide trailing slash, since mostly used for building pathnames. */
6bd344f
--- glibc-20041021T0701/sysdeps/unix/sysv/linux/readonly-area.c	18 Oct 2004 04:17:11 -0000	1.1
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/unix/sysv/linux/readonly-area.c	20 Oct 2004 11:04:51 -0000	1.1.2.2
8660b87
@@ -33,7 +33,10 @@ __readonly_area (const char *ptr, size_t
8660b87
 
8660b87
   FILE *fp = fopen ("/proc/self/maps", "rc");
8660b87
   if (fp == NULL)
8660b87
-    return -1;
8660b87
+    /* We don't know.  Returning 1 here means that programs using %n
8660b87
+       and -D_FORTIFY_SOURCE=2 will work even when /proc is not mounted,
8660b87
+       but will allow %n even in writable areas.  */
8660b87
+    return 1;
8660b87
 
8660b87
   /* We need no locking.  */
8660b87
   __fsetlocking (fp, FSETLOCKING_BYCALLER);
6bd344f
--- glibc-20041021T0701/sysdeps/unix/sysv/linux/tcsetattr.c	10 Sep 2003 19:16:07 -0000	1.16
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/unix/sysv/linux/tcsetattr.c	22 Sep 2004 21:21:08 -0000	1.16.2.1
c7aa529
@@ -49,6 +49,7 @@ tcsetattr (fd, optional_actions, termios
c7aa529
 {
c7aa529
   struct __kernel_termios k_termios;
c7aa529
   unsigned long int cmd;
c7aa529
+  int retval;
c7aa529
 
c7aa529
   switch (optional_actions)
c7aa529
     {
c7aa529
@@ -80,6 +81,35 @@ tcsetattr (fd, optional_actions, termios
c7aa529
   memcpy (&k_termios.c_cc[0], &termios_p->c_cc[0],
c7aa529
 	  __KERNEL_NCCS * sizeof (cc_t));
c7aa529
 
c7aa529
-  return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
c7aa529
+  retval = INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
c7aa529
+
c7aa529
+  if (retval == 0 && cmd == TCSETS)
c7aa529
+    {
c7aa529
+      /* The Linux kernel has a bug which silently ignore the invalid
c7aa529
+        c_cflag on pty. We have to check it here. */
c7aa529
+      int save = errno;
c7aa529
+      retval = INLINE_SYSCALL (ioctl, 3, fd, TCGETS, &k_termios);
c7aa529
+      if (retval)
c7aa529
+       {
c7aa529
+         /* We cannot verify if the setting is ok. We don't return
c7aa529
+            an error (?). */
c7aa529
+         __set_errno (save);
c7aa529
+         retval = 0;
c7aa529
+       }
c7aa529
+      else if ((termios_p->c_cflag & (PARENB | CREAD))
c7aa529
+              != (k_termios.c_cflag & (PARENB | CREAD))
c7aa529
+              || ((termios_p->c_cflag & CSIZE)
c7aa529
+                  && ((termios_p->c_cflag & CSIZE)
c7aa529
+                      != (k_termios.c_cflag & CSIZE))))
c7aa529
+       {
c7aa529
+         /* It looks like the Linux kernel silently changed the
c7aa529
+            PARENB/CREAD/CSIZE bits in c_cflag. Report it as an
c7aa529
+            error. */
c7aa529
+         __set_errno (EINVAL);
c7aa529
+         retval = -1;
c7aa529
+       }
c7aa529
+    }
c7aa529
+
c7aa529
+  return retval;
c7aa529
 }
c7aa529
 libc_hidden_def (tcsetattr)
6bd344f
--- glibc-20041021T0701/sysdeps/unix/sysv/linux/i386/dl-cache.h 1 Jan 1970 00:00:00 -0000
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/unix/sysv/linux/i386/dl-cache.h	22 Sep 2004 21:21:08 -0000	1.1.2.1
c7aa529
@@ -0,0 +1,59 @@
c7aa529
+/* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
c7aa529
+   Copyright (C) 2004 Free Software Foundation, Inc.
c7aa529
+   This file is part of the GNU C Library.
c7aa529
+
c7aa529
+   The GNU C Library is free software; you can redistribute it and/or
c7aa529
+   modify it under the terms of the GNU Lesser General Public
c7aa529
+   License as published by the Free Software Foundation; either
c7aa529
+   version 2.1 of the License, or (at your option) any later version.
c7aa529
+
c7aa529
+   The GNU C Library is distributed in the hope that it will be useful,
c7aa529
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
c7aa529
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c7aa529
+   Lesser General Public License for more details.
c7aa529
+
c7aa529
+   You should have received a copy of the GNU Lesser General Public
c7aa529
+   License along with the GNU C Library; if not, write to the Free
c7aa529
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
c7aa529
+   02111-1307 USA.  */
c7aa529
+
c7aa529
+static inline int
c7aa529
+is_ia64 (void)
c7aa529
+{
c7aa529
+  unsigned int fl1, fl2;
c7aa529
+
c7aa529
+  /* See if we can use cpuid.  */
c7aa529
+  __asm__ ("pushfl; pushfl; popl %0; movl %0,%1; xorl %2,%0;"
c7aa529
+           "pushl %0; popfl; pushfl; popl %0; popfl"
c7aa529
+           : "=&r" (fl1), "=&r" (fl2)
c7aa529
+           : "i" (0x00200000));
c7aa529
+  if (((fl1 ^ fl2) & 0x00200000) == 0)
c7aa529
+    return 0;
c7aa529
+
c7aa529
+  /* Host supports cpuid.  See if cpuid gives capabilities, try
c7aa529
+     CPUID(0).  Preserve %ebx and %ecx; cpuid insn clobbers these, we
c7aa529
+     don't need their CPUID values here, and %ebx may be the PIC
c7aa529
+     register.  */
c7aa529
+  __asm__ ("pushl %%ecx; pushl %%ebx; cpuid; popl %%ebx; popl %%ecx"
c7aa529
+           : "=a" (fl1) : "0" (0) : "edx", "cc");
c7aa529
+  if (fl1 == 0)
c7aa529
+    return 0;
c7aa529
+
c7aa529
+  /* Invoke CPUID(1), return %edx; caller can examine bits to
c7aa529
+     determine what's supported.  */
c7aa529
+  __asm__ ("pushl %%ecx; pushl %%ebx; cpuid; popl %%ebx; popl %%ecx"
c7aa529
+           : "=d" (fl2), "=a" (fl1) : "1" (1) : "cc");
c7aa529
+  return (fl2 & (1 << 30)) != 0;
c7aa529
+}
c7aa529
+
c7aa529
+#define arch_startup(argc, argv) \
c7aa529
+  do {									\
c7aa529
+    /* On IA-64, try to execute 64-bit ldconfig if possible.		\
c7aa529
+       This is because the badly designed /emul/ia32-linux hack		\
c7aa529
+       will cause 32-bit ldconfig to do all sorts of weird things.  */	\
c7aa529
+    if (is_ia64 ())							\
c7aa529
+      execv ("/emul/ia32-linux/../../sbin/ldconfig",			\
c7aa529
+	     (char *const *) argv);					\
c7aa529
+  } while (0)
c7aa529
+
c7aa529
+#include_next <dl-cache.h>
6bd344f
--- glibc-20041021T0701/sysdeps/unix/sysv/linux/ia64/dl-cache.h	6 Jul 2001 04:56:17 -0000	1.2
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/unix/sysv/linux/ia64/dl-cache.h	22 Sep 2004 21:21:09 -0000	1.2.4.1
c7aa529
@@ -22,4 +22,31 @@
c7aa529
 #define _dl_cache_check_flags(flags) \
c7aa529
   ((flags) == _DL_CACHE_DEFAULT_ID)
c7aa529
 
c7aa529
+#define EMUL_HACK "/emul/ia32-linux"
c7aa529
+
c7aa529
+#define arch_startup(argc, argv) unlink (EMUL_HACK LD_SO_CACHE)
c7aa529
+
c7aa529
+#define add_arch_dirs(config_file) \
c7aa529
+  do {							\
c7aa529
+    int save_verbose = opt_verbose;			\
c7aa529
+    opt_verbose = 0;					\
c7aa529
+							\
c7aa529
+    parse_conf (config_file, EMUL_HACK, true);		\
c7aa529
+							\
c7aa529
+    /* Always add the standard search paths.  */	\
c7aa529
+    add_system_dir (EMUL_HACK SLIBDIR);			\
c7aa529
+    if (strcmp (SLIBDIR, LIBDIR))			\
c7aa529
+      add_system_dir (EMUL_HACK LIBDIR);		\
c7aa529
+							\
c7aa529
+    char emul_config_file[strlen (config_file)		\
c7aa529
+			  + sizeof EMUL_HACK];		\
c7aa529
+    strcpy (mempcpy (emul_config_file, EMUL_HACK,	\
c7aa529
+		     strlen (EMUL_HACK)), config_file);	\
c7aa529
+							\
c7aa529
+    if (! access (emul_config_file, R_OK))		\
c7aa529
+      parse_conf (emul_config_file, EMUL_HACK, true);	\
c7aa529
+							\
c7aa529
+    opt_verbose = save_verbose;				\
c7aa529
+  } while (0)
c7aa529
+
c7aa529
 #include_next <dl-cache.h>
6bd344f
--- glibc-20041021T0701/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c 1 Jan 1970 00:00:00 -0000
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c	22 Sep 2004 21:21:09 -0000	1.1.2.1
c7aa529
@@ -0,0 +1,5 @@
c7aa529
+#ifdef IS_IN_ldconfig
c7aa529
+#include <sysdeps/i386/dl-procinfo.c>
c7aa529
+#else
c7aa529
+#include <sysdeps/generic/dl-procinfo.c>
c7aa529
+#endif
6bd344f
--- glibc-20041021T0701/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h 1 Jan 1970 00:00:00 -0000
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h	22 Sep 2004 21:21:09 -0000	1.1.2.1
c7aa529
@@ -0,0 +1,5 @@
c7aa529
+#ifdef IS_IN_ldconfig
c7aa529
+#include <sysdeps/unix/sysv/linux/i386/dl-procinfo.h>
c7aa529
+#else
c7aa529
+#include <sysdeps/generic/dl-procinfo.h>
c7aa529
+#endif
6bd344f
--- glibc-20041021T0701/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed	17 Jan 2002 06:49:28 -0000	1.2
6bd344f
+++ glibc-20041021T0701-fedora/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed	22 Sep 2004 21:21:09 -0000	1.2.2.1
c7aa529
@@ -1 +1 @@
c7aa529
-s_^\(RTLDLIST=\)\([^ 	]*\)-ia64\(\.so\.[0-9.]*\)[ 	]*$_\1"\2-ia64\3 \2\3"_
c7aa529
+s_^\(RTLDLIST=\)\([^ 	]*\)-ia64\(\.so\.[0-9.]*\)[ 	]*$_\1"\2-ia64\3 /emul/ia32-linux\2\3"_