]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 23 Aug 2001 23:36:47 +0000 (23:36 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 23 Aug 2001 23:36:47 +0000 (23:36 +0000)
2001-08-23  Jakub Jelinek  <jakub@redhat.com>

* elf/ldconfig.c (search_dir): Remove stale symlinks.

2001-08-23  Jakub Jelinek  <jakub@redhat.com>

* elf/dl-lookup.c (lookup_cache, lookup_cache_versioned): New.
(_dl_lookup_symbol): Lookup relocations in cache and store successfull
lookups in cache.
(_dl_lookup_versioned_symbol): Likewise.
* elf/dl-reloc.c (_dl_relocate_object): Initialize cache for
relocation lookup.
* elf/rtld.c (print_statistics): Output _dl_num_cache_relocations.
* sysdeps/generic/ldsodefs.h (struct lookup_cache): New definition.
(lookup_cache, lookup_cache_versioned): Add declarations.

2001-08-23  Ulrich Drepper  <drepper@redhat.com>

* stdlib/tst-random.c (main): Swap parameters in fail call.
Patch by Pete Bevin <pete@petebevin.com>.

2001-08-23  Jakub Jelinek  <jakub@redhat.com>

* sysdeps/generic/inttypes.h: Use __gwchar_t instead of __wchar_t.

* malloc/obstack.c: Indent preprocessor directives.
Patch by Jim Meyering <meyering@ascend.com>.

ChangeLog
elf/dl-lookup.c
elf/dl-reloc.c
elf/ldconfig.c
elf/rtld.c
malloc/obstack.c
stdlib/tst-random.c
sysdeps/generic/inttypes.h
sysdeps/generic/ldsodefs.h

index 3c41f72cb4fb9177498f5e99c271e3f06dba9ea6..d6e9aeb69fc337fe12932ae7f3576f716ad24fb0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,33 @@
+2001-08-23  Jakub Jelinek  <jakub@redhat.com>
+
+       * elf/ldconfig.c (search_dir): Remove stale symlinks.
+
+2001-08-23  Jakub Jelinek  <jakub@redhat.com>
+
+       * elf/dl-lookup.c (lookup_cache, lookup_cache_versioned): New.
+       (_dl_lookup_symbol): Lookup relocations in cache and store successfull
+       lookups in cache.
+       (_dl_lookup_versioned_symbol): Likewise.
+       * elf/dl-reloc.c (_dl_relocate_object): Initialize cache for
+       relocation lookup.
+       * elf/rtld.c (print_statistics): Output _dl_num_cache_relocations.
+       * sysdeps/generic/ldsodefs.h (struct lookup_cache): New definition.
+       (lookup_cache, lookup_cache_versioned): Add declarations.
+
+2001-08-23  Ulrich Drepper  <drepper@redhat.com>
+
+       * stdlib/tst-random.c (main): Swap parameters in fail call.
+       Patch by Pete Bevin <pete@petebevin.com>.
+
+2001-08-23  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/generic/inttypes.h: Use __gwchar_t instead of __wchar_t.
+
 2001-08-23  Ulrich Drepper  <drepper@redhat.com>
 
+       * malloc/obstack.c: Indent preprocessor directives.
+       Patch by Jim Meyering <meyering@ascend.com>.
+
        * po/ja.po: Update from translation team.
 
 2001-08-23  Roland McGrath  <roland@frob.com>
index fe833ba22b759881e9ce6ecb4fe5073e504111ac..48850e6caa8e03478872faaae1e46da8c3f28ae7 100644 (file)
@@ -60,6 +60,7 @@ struct sym_val
 
 /* Statistics function.  */
 unsigned long int _dl_num_relocations;
+unsigned long int _dl_num_cache_relocations;
 
 
 /* We have two different situations when looking up a simple: with or
@@ -184,6 +185,9 @@ _dl_do_lookup_versioned (const char *undef_name, unsigned long int hash,
                         const struct r_found_version *const version,
                         struct link_map *skip, int noexec, int noplt);
 
+struct lookup_cache _dl_lookup_cache;
+struct lookup_cache _dl_lookup_cache_versioned;
+
 /* Search loaded objects' symbol tables for a definition of the symbol
    UNDEF_NAME.  */
 
@@ -201,6 +205,17 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
   int noexec = elf_machine_lookup_noexec_p (reloc_type);
   int noplt = elf_machine_lookup_noplt_p (reloc_type);
 
+  /* First check if we can find it in the cache.  */
+  if (__builtin_expect (*ref == _dl_lookup_cache.sym, 0)
+      && _dl_lookup_cache.map == undef_map
+      && _dl_lookup_cache.noexec == noexec
+      && _dl_lookup_cache.noplt == noplt)
+    {
+      ++_dl_num_cache_relocations;
+      *ref = _dl_lookup_cache.ret;
+      return _dl_lookup_cache.value;
+    }
+
   ++_dl_num_relocations;
 
   /* Search the relevant loaded objects for a definition.  */
@@ -229,6 +244,11 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
        break;
       }
 
+  /* Update common information in the cache.  */
+  _dl_lookup_cache.sym = *ref;
+  _dl_lookup_cache.noexec = noexec;
+  _dl_lookup_cache.noplt = noplt;
+
   if (__builtin_expect (current_value.s == NULL, 0))
     {
       if (*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK)
@@ -238,6 +258,8 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
                               ? reference_name
                               : (_dl_argv[0] ?: "<main program>")),
                           make_string (undefined_msg, undef_name));
+      _dl_lookup_cache.ret = NULL;
+      _dl_lookup_cache.value = 0;
       *ref = NULL;
       return 0;
     }
@@ -254,6 +276,8 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
 
   if (__builtin_expect (protected == 0, 1))
     {
+      _dl_lookup_cache.ret = current_value.s;
+      _dl_lookup_cache.value = LOOKUP_VALUE (current_value.m);
       *ref = current_value.s;
       return LOOKUP_VALUE (current_value.m);
     }
@@ -270,9 +294,13 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
 
       if (protected_value.s == NULL || protected_value.m == undef_map)
        {
+         _dl_lookup_cache.ret = current_value.s;
+         _dl_lookup_cache.value = LOOKUP_VALUE (current_value.m);
          *ref = current_value.s;
          return LOOKUP_VALUE (current_value.m);
        }
+      _dl_lookup_cache.ret = *ref;
+      _dl_lookup_cache.value = LOOKUP_VALUE (undef_map);
 
       return LOOKUP_VALUE (undef_map);
     }
@@ -379,6 +407,18 @@ _dl_lookup_versioned_symbol (const char *undef_name,
   int noexec = elf_machine_lookup_noexec_p (reloc_type);
   int noplt = elf_machine_lookup_noplt_p (reloc_type);
 
+  /* First check if we can find it in the cache.  */
+  if (__builtin_expect (*ref == _dl_lookup_cache_versioned.sym, 0)
+      && _dl_lookup_cache_versioned.map == undef_map
+      && _dl_lookup_cache_versioned.noexec == noexec
+      && _dl_lookup_cache_versioned.noplt == noplt
+      && _dl_lookup_cache_versioned.version == version)
+    {
+      ++_dl_num_cache_relocations;
+      *ref = _dl_lookup_cache_versioned.ret;
+      return _dl_lookup_cache_versioned.value;
+    }
+
   ++_dl_num_relocations;
 
   /* Search the relevant loaded objects for a definition.  */
@@ -430,6 +470,12 @@ _dl_lookup_versioned_symbol (const char *undef_name,
        }
     }
 
+  /* Update common information in the cache.  */
+  _dl_lookup_cache_versioned.sym = *ref;
+  _dl_lookup_cache_versioned.noexec = noexec;
+  _dl_lookup_cache_versioned.noplt = noplt;
+  _dl_lookup_cache_versioned.version = version;
+
   if (__builtin_expect (current_value.s == NULL, 0))
     {
       if (*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK)
@@ -440,6 +486,8 @@ _dl_lookup_versioned_symbol (const char *undef_name,
                               : (_dl_argv[0] ?: "<main program>")),
                           make_string (undefined_msg, undef_name,
                                        ", version ", version->name ?: NULL));
+      _dl_lookup_cache_versioned.ret = NULL;
+      _dl_lookup_cache_versioned.value = 0;
       *ref = NULL;
       return 0;
     }
@@ -457,6 +505,8 @@ _dl_lookup_versioned_symbol (const char *undef_name,
 
   if (__builtin_expect (protected == 0, 1))
     {
+      _dl_lookup_cache_versioned.ret = current_value.s;
+      _dl_lookup_cache_versioned.value = LOOKUP_VALUE (current_value.m);
       *ref = current_value.s;
       return LOOKUP_VALUE (current_value.m);
     }
@@ -473,10 +523,14 @@ _dl_lookup_versioned_symbol (const char *undef_name,
 
       if (protected_value.s == NULL || protected_value.m == undef_map)
        {
+         _dl_lookup_cache_versioned.ret = current_value.s;
+         _dl_lookup_cache_versioned.value = LOOKUP_VALUE (current_value.m);
          *ref = current_value.s;
          return LOOKUP_VALUE (current_value.m);
        }
 
+      _dl_lookup_cache_versioned.ret = *ref;
+      _dl_lookup_cache_versioned.value = LOOKUP_VALUE (undef_map);
       return LOOKUP_VALUE (undef_map);
     }
 }
@@ -605,7 +659,7 @@ _dl_do_lookup (const char *undef_name, unsigned long int hash,
               struct link_map *skip, int noexec, int noplt)
 {
   return do_lookup (undef_name, hash, ref, result, scope, i, skip, noexec,
-                   noplt);
+                   noplt);
 }
 
 static int
index dbbc19c233ed89cf7fc1130eeea21337871cf02e..b46d3bcf474497b498408e18e258fc397eacabb2 100644 (file)
@@ -89,8 +89,15 @@ cannot make segment writable for relocation"));
      : l->l_addr)
 
 #include "dynamic-link.h"
+    /* Start symbol lookup caching for this object.  */
+    _dl_lookup_cache.map = l;
+    _dl_lookup_cache_versioned.map = l;
+
     ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling);
 
+    _dl_lookup_cache.map = NULL;
+    _dl_lookup_cache_versioned.map = NULL;
+
     if (__builtin_expect (consider_profiling, 0))
       {
        /* Allocate the array which will contain the already found
index a087da85e42479a5ed5298f3e00ab1af3eeb2d1d..ba05c67a97a8830f651c56fbecb724f32eb505b3 100644 (file)
@@ -699,6 +699,10 @@ search_dir (const struct dir_entry *entry)
            {
              if (opt_verbose)
                error (0, errno, _("Cannot stat %s"), file_name);
+
+             /* Remove stale symlinks.  */
+             if (strstr (direntry->d_name, ".so."))
+               unlink (real_file_name);
              continue;
            }
          is_dir = S_ISDIR (stat_buf.st_mode);
index b32de61888ed5ba990cdebbbbb4170ec6d63a95f..1188880351f0c2dc5b57e22c863cdc419cfc75aa 100644 (file)
@@ -127,6 +127,7 @@ static hp_timing_t relocate_time;
 static hp_timing_t load_time;
 #endif
 extern unsigned long int _dl_num_relocations;  /* in dl-lookup.c */
+extern unsigned long int _dl_num_cache_relocations;    /* in dl-lookup.c */
 
 static ElfW(Addr) _dl_start_final (void *arg, struct link_map *bootstrap_map_p,
                                   hp_timing_t start_time);
@@ -1524,6 +1525,8 @@ print_statistics (void)
 #endif
   _dl_debug_printf ("                 number of relocations: %lu\n",
                    _dl_num_relocations);
+  _dl_debug_printf ("                 number of relocations from cache: %lu\n",
+                   _dl_num_cache_relocations);
 
 #ifndef HP_TIMING_NONAVAIL
   /* Time spend while loading the object and the dependencies.  */
index 8a02a0b1d4ca8422c65e32469cf33f1fcf8b1bb3..7b1206c13fed7fa500cc8e8c254d5391a1caf905 100644 (file)
@@ -19,7 +19,7 @@
    02111-1307 USA.  */
 
 #ifdef HAVE_CONFIG_H
-#include <config.h>
+# include <config.h>
 #endif
 
 #include "obstack.h"
    files, it is simpler to just do this in the source for each such file.  */
 
 #include <stdio.h>             /* Random thing to get __GNU_LIBRARY__.  */
-#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
-#include <gnu-versions.h>
-#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
-#define ELIDE_CODE
-#endif
+#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
+# include <gnu-versions.h>
+# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
+#  define ELIDE_CODE
+# endif
 #endif
 
 #if defined _LIBC && defined USE_IN_LIBIO
 #ifndef ELIDE_CODE
 
 
-#if defined (__STDC__) && __STDC__
-#define POINTER void *
-#else
-#define POINTER char *
-#endif
+# if defined __STDC__ && __STDC__
+#  define POINTER void *
+# else
+#  define POINTER char *
+# endif
 
 /* Determine default alignment.  */
 struct fooalign {char x; double d;};
-#define DEFAULT_ALIGNMENT  \
+# define DEFAULT_ALIGNMENT  \
   ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))
 /* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
    But in fact it might be less smart and round addresses to as much as
    DEFAULT_ROUNDING.  So we prepare for it to do that.  */
 union fooround {long x; double d;};
-#define DEFAULT_ROUNDING (sizeof (union fooround))
+# define DEFAULT_ROUNDING (sizeof (union fooround))
 
 /* When we copy a long block of data, this is the unit to do it with.
    On some machines, copying successive ints does not work;
    in such a case, redefine COPYING_UNIT to `long' (if that works)
    or `char' as a last resort.  */
-#ifndef COPYING_UNIT
-#define COPYING_UNIT int
-#endif
+# ifndef COPYING_UNIT
+#  define COPYING_UNIT int
+# endif
 
 
 /* The functions allocating more room by calling `obstack_chunk_alloc'
@@ -84,21 +84,21 @@ union fooround {long x; double d;};
    abort gracefully or use longjump - but shouldn't return.  This
    variable by default points to the internal function
    `print_and_abort'.  */
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
 static void print_and_abort (void);
 void (*obstack_alloc_failed_handler) (void) = print_and_abort;
-#else
+# else
 static void print_and_abort ();
 void (*obstack_alloc_failed_handler) () = print_and_abort;
-#endif
+# endif
 
 /* Exit value used when `print_and_abort' is used.  */
-#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifndef EXIT_FAILURE
-#define EXIT_FAILURE 1
-#endif
+# if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+# ifndef EXIT_FAILURE
+#  define EXIT_FAILURE 1
+# endif
 int obstack_exit_failure = EXIT_FAILURE;
 
 /* The non-GNU-C macros copy the obstack into this global variable
@@ -112,33 +112,33 @@ struct obstack *_obstack;
    For free, do not use ?:, since some compilers, like the MIPS compilers,
    do not allow (expr) ? void : void.  */
 
-#if defined (__STDC__) && __STDC__
-#define CALL_CHUNKFUN(h, size) \
+# if defined __STDC__ && __STDC__
+#  define CALL_CHUNKFUN(h, size) \
   (((h) -> use_extra_arg) \
    ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
    : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
 
-#define CALL_FREEFUN(h, old_chunk) \
+#  define CALL_FREEFUN(h, old_chunk) \
   do { \
     if ((h) -> use_extra_arg) \
       (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
     else \
       (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
   } while (0)
-#else
-#define CALL_CHUNKFUN(h, size) \
+# else
+#  define CALL_CHUNKFUN(h, size) \
   (((h) -> use_extra_arg) \
    ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
    : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size)))
 
-#define CALL_FREEFUN(h, old_chunk) \
+#  define CALL_FREEFUN(h, old_chunk) \
   do { \
     if ((h) -> use_extra_arg) \
       (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
     else \
       (*(void (*) ()) (h)->freefun) ((old_chunk)); \
   } while (0)
-#endif
+# endif
 
 \f
 /* Initialize an obstack H for use.  Specify chunk size SIZE (0 means default).
@@ -154,13 +154,13 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
      struct obstack *h;
      int size;
      int alignment;
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
      POINTER (*chunkfun) (long);
      void (*freefun) (void *);
-#else
+# else
      POINTER (*chunkfun) ();
      void (*freefun) ();
-#endif
+# endif
 {
   register struct _obstack_chunk *chunk; /* points to new chunk */
 
@@ -183,13 +183,13 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
       size = 4096 - extra;
     }
 
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
   h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
   h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
-#else
+# else
   h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
   h->freefun = freefun;
-#endif
+# endif
   h->chunk_size = size;
   h->alignment_mask = alignment - 1;
   h->use_extra_arg = 0;
@@ -212,13 +212,13 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
      struct obstack *h;
      int size;
      int alignment;
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
      POINTER (*chunkfun) (POINTER, long);
      void (*freefun) (POINTER, POINTER);
-#else
+# else
      POINTER (*chunkfun) ();
      void (*freefun) ();
-#endif
+# endif
      POINTER arg;
 {
   register struct _obstack_chunk *chunk; /* points to new chunk */
@@ -242,13 +242,13 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
       size = 4096 - extra;
     }
 
-#if defined(__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
   h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
   h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
-#else
+# else
   h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
   h->freefun = freefun;
-#endif
+# endif
   h->chunk_size = size;
   h->alignment_mask = alignment - 1;
   h->extra_arg = arg;
@@ -343,11 +343,11 @@ _obstack_newchunk (h, length)
    This is here for debugging.
    If you use it in a program, you are probably losing.  */
 
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
 /* Suppress -Wmissing-prototypes warning.  We don't want to declare this in
    obstack.h because it is just for debugging.  */
 int _obstack_allocated_p (struct obstack *h, POINTER obj);
-#endif
+# endif
 
 int
 _obstack_allocated_p (h, obj)
@@ -372,7 +372,7 @@ _obstack_allocated_p (h, obj)
 /* Free objects in obstack H, including OBJ and everything allocate
    more recently than OBJ.  If OBJ is zero, free everything in H.  */
 
-#undef obstack_free
+# undef obstack_free
 
 /* This function has two names with identical definitions.
    This is the first one, called from non-ANSI code.  */
@@ -458,27 +458,27 @@ _obstack_memory_used (h)
 }
 \f
 /* Define the error handler.  */
-#ifndef _
-# if defined HAVE_LIBINTL_H || defined _LIBC
-#  include <libintl.h>
-#  ifndef _
-#   define _(Str) gettext (Str)
+# ifndef _
+#  if defined HAVE_LIBINTL_H || defined _LIBC
+#   include <libintl.h>
+#   ifndef _
+#    define _(Str) gettext (Str)
+#   endif
+#  else
+#   define _(Str) (Str)
 #  endif
-# else
-#  define _(Str) (Str)
 # endif
-#endif
-#if defined _LIBC && defined USE_IN_LIBIO
-# include <libio/iolibio.h>
-# define fputs(s, f) _IO_fputs (s, f)
-#endif
+# if defined _LIBC && defined USE_IN_LIBIO
+#  include <libio/iolibio.h>
+#  define fputs(s, f) _IO_fputs (s, f)
+# endif
 
-#ifndef __attribute__
+# ifndef __attribute__
 /* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
+#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+#   define __attribute__(Spec) /* empty */
+#  endif
 # endif
-#endif
 
 static void
 __attribute__ ((noreturn))
@@ -489,23 +489,23 @@ print_and_abort ()
      happen because the "memory exhausted" message appears in other places
      like this and the translation should be reused instead of creating
      a very similar string which requires a separate translation.  */
-#if defined _LIBC && defined USE_IN_LIBIO
+# if defined _LIBC && defined USE_IN_LIBIO
   if (_IO_fwide (stderr, 0) > 0)
     __fwprintf (stderr, L"%s\n", _("memory exhausted"));
   else
-#endif
+# endif
     fprintf (stderr, "%s\n", _("memory exhausted"));
   exit (obstack_exit_failure);
 }
 \f
-#if 0
+# if 0
 /* These are now turned off because the applications do not use it
    and it uses bcopy via obstack_grow, which causes trouble on sysV.  */
 
 /* Now define the functional versions of the obstack macros.
    Define them to simply use the corresponding macros to do the job.  */
 
-#if defined __STDC__ && __STDC__
+#  if defined __STDC__ && __STDC__
 /* These function definitions do not work with non-ANSI preprocessors;
    they won't pass through the macro names in parentheses.  */
 
@@ -616,8 +616,8 @@ POINTER (obstack_copy0) (obstack, address, length)
   return obstack_copy0 (obstack, address, length);
 }
 
-#endif /* __STDC__ */
+#  endif /* __STDC__ */
 
-#endif /* 0 */
+# endif /* 0 */
 
 #endif /* !ELIDE_CODE */
index 2cc8e9c60c88373e75b7998bb018325886049fb1..47195d635a0ec7c9eb8c28279652c70102c771e5 100644 (file)
@@ -101,7 +101,7 @@ main (void)
        {
          char *oldstate = (char *) setstate (state[s]);
          if (oldstate != state[(s + nseq - 1) % nseq])
-           fail ("bad setstate() return value", i, s);
+           fail ("bad setstate() return value", s, i);
          if (rnd[s][i] != random ())
            fail ("bad value generated in interleave test", s, i);
        }
index 29830ea2fbe6733667f1569c1fcaa04139fc5db2..0549a6accc5cc6d83251a514c845f0cad19cd07b 100644 (file)
 #include <stdint.h>
 
 /* Get a definition for wchar_t.  But we must not define wchar_t itself.  */
-#ifndef ____wchar_t_defined
+#ifndef ____gwchar_t_defined
 # ifdef __WCHAR_TYPE__
-typedef __WCHAR_TYPE__ __wchar_t;
+typedef __WCHAR_TYPE__ __gwchar_t;
 # else
 #  defined __need_wchar_t
 #  include <stddef.h>
-typedef wchar_t __wchar_t;
+typedef wchar_t __gwchar_t;
 # endif
-# define ____wchar_t_defined   1
+# define ____gwchar_t_defined  1
 #endif
 
 
@@ -308,13 +308,13 @@ extern uintmax_t strtoumax (__const char *__restrict __nptr,
                            char ** __restrict __endptr, int __base) __THROW;
 
 /* Like `wcstol' but convert to `intmax_t'.  */
-extern intmax_t wcstoimax (__const __wchar_t *__restrict __nptr,
-                          __wchar_t **__restrict __endptr, int __base)
+extern intmax_t wcstoimax (__const __gwchar_t *__restrict __nptr,
+                          __gwchar_t **__restrict __endptr, int __base)
      __THROW;
 
 /* Like `wcstoul' but convert to `uintmax_t'.  */
-extern uintmax_t wcstoumax (__const __wchar_t *__restrict __nptr,
-                           __wchar_t ** __restrict __endptr, int __base)
+extern uintmax_t wcstoumax (__const __gwchar_t *__restrict __nptr,
+                           __gwchar_t ** __restrict __endptr, int __base)
      __THROW;
 
 #ifdef __USE_EXTERN_INLINES
@@ -352,13 +352,13 @@ strtoumax (__const char *__restrict nptr, char **__restrict endptr,
 
 /* Like `wcstol' but convert to `intmax_t'.  */
 #  ifndef __wcstol_internal_defined
-extern long int __wcstol_internal (__const __wchar_t * __restrict __nptr,
-                                  __wchar_t **__restrict __endptr,
+extern long int __wcstol_internal (__const __gwchar_t * __restrict __nptr,
+                                  __gwchar_t **__restrict __endptr,
                                   int __base, int __group) __THROW;
 #   define __wcstol_internal_defined   1
 #  endif
 extern __inline intmax_t
-wcstoimax (__const __wchar_t *__restrict nptr, __wchar_t **__restrict endptr,
+wcstoimax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr,
           int base) __THROW
 {
   return __wcstol_internal (nptr, endptr, base, 0);
@@ -367,15 +367,15 @@ wcstoimax (__const __wchar_t *__restrict nptr, __wchar_t **__restrict endptr,
 
 /* Like `wcstoul' but convert to `uintmax_t'.  */
 #  ifndef __wcstoul_internal_defined
-extern unsigned long int __wcstoul_internal (__const __wchar_t *
+extern unsigned long int __wcstoul_internal (__const __gwchar_t *
                                             __restrict __nptr,
-                                            __wchar_t **
+                                            __gwchar_t **
                                             __restrict __endptr,
                                             int __base, int __group) __THROW;
 #   define __wcstoul_internal_defined  1
 #  endif
 extern __inline uintmax_t
-wcstoumax (__const __wchar_t *__restrict nptr, __wchar_t **__restrict endptr,
+wcstoumax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr,
           int base) __THROW
 {
   return __wcstoul_internal (nptr, endptr, base, 0);
@@ -419,14 +419,14 @@ strtoumax (__const char *__restrict nptr, char **__restrict endptr,
 /* Like `wcstol' but convert to `intmax_t'.  */
 #  ifndef __wcstoll_internal_defined
 __extension__
-extern long long int __wcstoll_internal (__const __wchar_t *
+extern long long int __wcstoll_internal (__const __gwchar_t *
                                         __restrict __nptr,
-                                        __wchar_t **__restrict __endptr,
+                                        __gwchar_t **__restrict __endptr,
                                         int __base, int __group) __THROW;
 #   define __wcstoll_internal_defined  1
 #  endif
 extern __inline intmax_t
-wcstoimax (__const __wchar_t *__restrict nptr, __wchar_t **__restrict endptr,
+wcstoimax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr,
           int base) __THROW
 {
   return __wcstoll_internal (nptr, endptr, base, 0);
@@ -436,16 +436,16 @@ wcstoimax (__const __wchar_t *__restrict nptr, __wchar_t **__restrict endptr,
 /* Like `wcstoul' but convert to `uintmax_t'.  */
 #  ifndef __wcstoull_internal_defined
 __extension__
-extern unsigned long long int __wcstoull_internal (__const __wchar_t *
+extern unsigned long long int __wcstoull_internal (__const __gwchar_t *
                                                   __restrict __nptr,
-                                                  __wchar_t **
+                                                  __gwchar_t **
                                                   __restrict __endptr,
                                                   int __base,
                                                   int __group) __THROW;
 #   define __wcstoull_internal_defined 1
 #  endif
 extern __inline uintmax_t
-wcstoumax (__const __wchar_t *__restrict nptr, __wchar_t **__restrict endptr,
+wcstoumax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr,
           int base) __THROW
 {
   return __wcstoull_internal (nptr, endptr, base, 0);
index 6d196c7379808b8b84b5c537ad7c0836e14e9308..5e093fcdd5609f83de02b3e696b13efa47ddcbff 100644 (file)
@@ -327,6 +327,21 @@ extern void _dl_map_object_deps (struct link_map *map,
 /* Cache the locations of MAP's hash table.  */
 extern void _dl_setup_hash (struct link_map *map) internal_function;
 
+/* This holds symbol lookup cache.  */
+struct lookup_cache
+  {
+    const ElfW(Sym) *sym;
+    struct link_map *map;
+    const struct r_found_version *version;
+    int noexec;
+    int noplt;
+    lookup_t value;
+    const ElfW(Sym) *ret;
+  };
+
+extern struct lookup_cache _dl_lookup_cache;
+extern struct lookup_cache _dl_lookup_cache_versioned;
+
 
 /* Search loaded objects' symbol tables for a definition of the symbol
    referred to by UNDEF.  *SYM is the symbol table entry containing the