mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Update.
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>.
This commit is contained in:
28
ChangeLog
28
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>
|
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.
|
* po/ja.po: Update from translation team.
|
||||||
|
|
||||||
2001-08-23 Roland McGrath <roland@frob.com>
|
2001-08-23 Roland McGrath <roland@frob.com>
|
||||||
|
@ -60,6 +60,7 @@ struct sym_val
|
|||||||
|
|
||||||
/* Statistics function. */
|
/* Statistics function. */
|
||||||
unsigned long int _dl_num_relocations;
|
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
|
/* 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,
|
const struct r_found_version *const version,
|
||||||
struct link_map *skip, int noexec, int noplt);
|
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
|
/* Search loaded objects' symbol tables for a definition of the symbol
|
||||||
UNDEF_NAME. */
|
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 noexec = elf_machine_lookup_noexec_p (reloc_type);
|
||||||
int noplt = elf_machine_lookup_noplt_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;
|
++_dl_num_relocations;
|
||||||
|
|
||||||
/* Search the relevant loaded objects for a definition. */
|
/* 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;
|
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 (__builtin_expect (current_value.s == NULL, 0))
|
||||||
{
|
{
|
||||||
if (*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK)
|
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
|
? reference_name
|
||||||
: (_dl_argv[0] ?: "<main program>")),
|
: (_dl_argv[0] ?: "<main program>")),
|
||||||
make_string (undefined_msg, undef_name));
|
make_string (undefined_msg, undef_name));
|
||||||
|
_dl_lookup_cache.ret = NULL;
|
||||||
|
_dl_lookup_cache.value = 0;
|
||||||
*ref = NULL;
|
*ref = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -254,6 +276,8 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
|
|||||||
|
|
||||||
if (__builtin_expect (protected == 0, 1))
|
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;
|
*ref = current_value.s;
|
||||||
return LOOKUP_VALUE (current_value.m);
|
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)
|
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;
|
*ref = current_value.s;
|
||||||
return LOOKUP_VALUE (current_value.m);
|
return LOOKUP_VALUE (current_value.m);
|
||||||
}
|
}
|
||||||
|
_dl_lookup_cache.ret = *ref;
|
||||||
|
_dl_lookup_cache.value = LOOKUP_VALUE (undef_map);
|
||||||
|
|
||||||
return 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 noexec = elf_machine_lookup_noexec_p (reloc_type);
|
||||||
int noplt = elf_machine_lookup_noplt_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;
|
++_dl_num_relocations;
|
||||||
|
|
||||||
/* Search the relevant loaded objects for a definition. */
|
/* 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 (__builtin_expect (current_value.s == NULL, 0))
|
||||||
{
|
{
|
||||||
if (*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK)
|
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>")),
|
: (_dl_argv[0] ?: "<main program>")),
|
||||||
make_string (undefined_msg, undef_name,
|
make_string (undefined_msg, undef_name,
|
||||||
", version ", version->name ?: NULL));
|
", version ", version->name ?: NULL));
|
||||||
|
_dl_lookup_cache_versioned.ret = NULL;
|
||||||
|
_dl_lookup_cache_versioned.value = 0;
|
||||||
*ref = NULL;
|
*ref = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -457,6 +505,8 @@ _dl_lookup_versioned_symbol (const char *undef_name,
|
|||||||
|
|
||||||
if (__builtin_expect (protected == 0, 1))
|
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;
|
*ref = current_value.s;
|
||||||
return LOOKUP_VALUE (current_value.m);
|
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)
|
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;
|
*ref = current_value.s;
|
||||||
return LOOKUP_VALUE (current_value.m);
|
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);
|
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)
|
struct link_map *skip, int noexec, int noplt)
|
||||||
{
|
{
|
||||||
return do_lookup (undef_name, hash, ref, result, scope, i, skip, noexec,
|
return do_lookup (undef_name, hash, ref, result, scope, i, skip, noexec,
|
||||||
noplt);
|
noplt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -89,8 +89,15 @@ cannot make segment writable for relocation"));
|
|||||||
: l->l_addr)
|
: l->l_addr)
|
||||||
|
|
||||||
#include "dynamic-link.h"
|
#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);
|
ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling);
|
||||||
|
|
||||||
|
_dl_lookup_cache.map = NULL;
|
||||||
|
_dl_lookup_cache_versioned.map = NULL;
|
||||||
|
|
||||||
if (__builtin_expect (consider_profiling, 0))
|
if (__builtin_expect (consider_profiling, 0))
|
||||||
{
|
{
|
||||||
/* Allocate the array which will contain the already found
|
/* Allocate the array which will contain the already found
|
||||||
|
@ -699,6 +699,10 @@ search_dir (const struct dir_entry *entry)
|
|||||||
{
|
{
|
||||||
if (opt_verbose)
|
if (opt_verbose)
|
||||||
error (0, errno, _("Cannot stat %s"), file_name);
|
error (0, errno, _("Cannot stat %s"), file_name);
|
||||||
|
|
||||||
|
/* Remove stale symlinks. */
|
||||||
|
if (strstr (direntry->d_name, ".so."))
|
||||||
|
unlink (real_file_name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
is_dir = S_ISDIR (stat_buf.st_mode);
|
is_dir = S_ISDIR (stat_buf.st_mode);
|
||||||
|
@ -127,6 +127,7 @@ static hp_timing_t relocate_time;
|
|||||||
static hp_timing_t load_time;
|
static hp_timing_t load_time;
|
||||||
#endif
|
#endif
|
||||||
extern unsigned long int _dl_num_relocations; /* in dl-lookup.c */
|
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,
|
static ElfW(Addr) _dl_start_final (void *arg, struct link_map *bootstrap_map_p,
|
||||||
hp_timing_t start_time);
|
hp_timing_t start_time);
|
||||||
@ -1524,6 +1525,8 @@ print_statistics (void)
|
|||||||
#endif
|
#endif
|
||||||
_dl_debug_printf (" number of relocations: %lu\n",
|
_dl_debug_printf (" number of relocations: %lu\n",
|
||||||
_dl_num_relocations);
|
_dl_num_relocations);
|
||||||
|
_dl_debug_printf (" number of relocations from cache: %lu\n",
|
||||||
|
_dl_num_cache_relocations);
|
||||||
|
|
||||||
#ifndef HP_TIMING_NONAVAIL
|
#ifndef HP_TIMING_NONAVAIL
|
||||||
/* Time spend while loading the object and the dependencies. */
|
/* Time spend while loading the object and the dependencies. */
|
||||||
|
138
malloc/obstack.c
138
malloc/obstack.c
@ -19,7 +19,7 @@
|
|||||||
02111-1307 USA. */
|
02111-1307 USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "obstack.h"
|
#include "obstack.h"
|
||||||
@ -39,11 +39,11 @@
|
|||||||
files, it is simpler to just do this in the source for each such file. */
|
files, it is simpler to just do this in the source for each such file. */
|
||||||
|
|
||||||
#include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */
|
#include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */
|
||||||
#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
|
#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
|
||||||
#include <gnu-versions.h>
|
# include <gnu-versions.h>
|
||||||
#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
|
# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
|
||||||
#define ELIDE_CODE
|
# define ELIDE_CODE
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined _LIBC && defined USE_IN_LIBIO
|
#if defined _LIBC && defined USE_IN_LIBIO
|
||||||
@ -53,29 +53,29 @@
|
|||||||
#ifndef ELIDE_CODE
|
#ifndef ELIDE_CODE
|
||||||
|
|
||||||
|
|
||||||
#if defined (__STDC__) && __STDC__
|
# if defined __STDC__ && __STDC__
|
||||||
#define POINTER void *
|
# define POINTER void *
|
||||||
#else
|
# else
|
||||||
#define POINTER char *
|
# define POINTER char *
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
/* Determine default alignment. */
|
/* Determine default alignment. */
|
||||||
struct fooalign {char x; double d;};
|
struct fooalign {char x; double d;};
|
||||||
#define DEFAULT_ALIGNMENT \
|
# define DEFAULT_ALIGNMENT \
|
||||||
((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))
|
((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))
|
||||||
/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
|
/* 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
|
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. */
|
DEFAULT_ROUNDING. So we prepare for it to do that. */
|
||||||
union fooround {long x; double d;};
|
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.
|
/* 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;
|
On some machines, copying successive ints does not work;
|
||||||
in such a case, redefine COPYING_UNIT to `long' (if that works)
|
in such a case, redefine COPYING_UNIT to `long' (if that works)
|
||||||
or `char' as a last resort. */
|
or `char' as a last resort. */
|
||||||
#ifndef COPYING_UNIT
|
# ifndef COPYING_UNIT
|
||||||
#define COPYING_UNIT int
|
# define COPYING_UNIT int
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
|
|
||||||
/* The functions allocating more room by calling `obstack_chunk_alloc'
|
/* 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
|
abort gracefully or use longjump - but shouldn't return. This
|
||||||
variable by default points to the internal function
|
variable by default points to the internal function
|
||||||
`print_and_abort'. */
|
`print_and_abort'. */
|
||||||
#if defined (__STDC__) && __STDC__
|
# if defined __STDC__ && __STDC__
|
||||||
static void print_and_abort (void);
|
static void print_and_abort (void);
|
||||||
void (*obstack_alloc_failed_handler) (void) = print_and_abort;
|
void (*obstack_alloc_failed_handler) (void) = print_and_abort;
|
||||||
#else
|
# else
|
||||||
static void print_and_abort ();
|
static void print_and_abort ();
|
||||||
void (*obstack_alloc_failed_handler) () = print_and_abort;
|
void (*obstack_alloc_failed_handler) () = print_and_abort;
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
/* Exit value used when `print_and_abort' is used. */
|
/* Exit value used when `print_and_abort' is used. */
|
||||||
#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
|
# if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
|
||||||
#include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#endif
|
# endif
|
||||||
#ifndef EXIT_FAILURE
|
# ifndef EXIT_FAILURE
|
||||||
#define EXIT_FAILURE 1
|
# define EXIT_FAILURE 1
|
||||||
#endif
|
# endif
|
||||||
int obstack_exit_failure = EXIT_FAILURE;
|
int obstack_exit_failure = EXIT_FAILURE;
|
||||||
|
|
||||||
/* The non-GNU-C macros copy the obstack into this global variable
|
/* 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,
|
For free, do not use ?:, since some compilers, like the MIPS compilers,
|
||||||
do not allow (expr) ? void : void. */
|
do not allow (expr) ? void : void. */
|
||||||
|
|
||||||
#if defined (__STDC__) && __STDC__
|
# if defined __STDC__ && __STDC__
|
||||||
#define CALL_CHUNKFUN(h, size) \
|
# define CALL_CHUNKFUN(h, size) \
|
||||||
(((h) -> use_extra_arg) \
|
(((h) -> use_extra_arg) \
|
||||||
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
|
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
|
||||||
: (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
|
: (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
|
||||||
|
|
||||||
#define CALL_FREEFUN(h, old_chunk) \
|
# define CALL_FREEFUN(h, old_chunk) \
|
||||||
do { \
|
do { \
|
||||||
if ((h) -> use_extra_arg) \
|
if ((h) -> use_extra_arg) \
|
||||||
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
|
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
|
||||||
else \
|
else \
|
||||||
(*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
|
(*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
# else
|
||||||
#define CALL_CHUNKFUN(h, size) \
|
# define CALL_CHUNKFUN(h, size) \
|
||||||
(((h) -> use_extra_arg) \
|
(((h) -> use_extra_arg) \
|
||||||
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
|
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
|
||||||
: (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size)))
|
: (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size)))
|
||||||
|
|
||||||
#define CALL_FREEFUN(h, old_chunk) \
|
# define CALL_FREEFUN(h, old_chunk) \
|
||||||
do { \
|
do { \
|
||||||
if ((h) -> use_extra_arg) \
|
if ((h) -> use_extra_arg) \
|
||||||
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
|
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
|
||||||
else \
|
else \
|
||||||
(*(void (*) ()) (h)->freefun) ((old_chunk)); \
|
(*(void (*) ()) (h)->freefun) ((old_chunk)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
|
|
||||||
/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default).
|
/* 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;
|
struct obstack *h;
|
||||||
int size;
|
int size;
|
||||||
int alignment;
|
int alignment;
|
||||||
#if defined (__STDC__) && __STDC__
|
# if defined __STDC__ && __STDC__
|
||||||
POINTER (*chunkfun) (long);
|
POINTER (*chunkfun) (long);
|
||||||
void (*freefun) (void *);
|
void (*freefun) (void *);
|
||||||
#else
|
# else
|
||||||
POINTER (*chunkfun) ();
|
POINTER (*chunkfun) ();
|
||||||
void (*freefun) ();
|
void (*freefun) ();
|
||||||
#endif
|
# endif
|
||||||
{
|
{
|
||||||
register struct _obstack_chunk *chunk; /* points to new chunk */
|
register struct _obstack_chunk *chunk; /* points to new chunk */
|
||||||
|
|
||||||
@ -183,13 +183,13 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
|
|||||||
size = 4096 - extra;
|
size = 4096 - extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__STDC__) && __STDC__
|
# if defined __STDC__ && __STDC__
|
||||||
h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
|
h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
|
||||||
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
|
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
|
||||||
#else
|
# else
|
||||||
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
|
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
|
||||||
h->freefun = freefun;
|
h->freefun = freefun;
|
||||||
#endif
|
# endif
|
||||||
h->chunk_size = size;
|
h->chunk_size = size;
|
||||||
h->alignment_mask = alignment - 1;
|
h->alignment_mask = alignment - 1;
|
||||||
h->use_extra_arg = 0;
|
h->use_extra_arg = 0;
|
||||||
@ -212,13 +212,13 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
|
|||||||
struct obstack *h;
|
struct obstack *h;
|
||||||
int size;
|
int size;
|
||||||
int alignment;
|
int alignment;
|
||||||
#if defined (__STDC__) && __STDC__
|
# if defined __STDC__ && __STDC__
|
||||||
POINTER (*chunkfun) (POINTER, long);
|
POINTER (*chunkfun) (POINTER, long);
|
||||||
void (*freefun) (POINTER, POINTER);
|
void (*freefun) (POINTER, POINTER);
|
||||||
#else
|
# else
|
||||||
POINTER (*chunkfun) ();
|
POINTER (*chunkfun) ();
|
||||||
void (*freefun) ();
|
void (*freefun) ();
|
||||||
#endif
|
# endif
|
||||||
POINTER arg;
|
POINTER arg;
|
||||||
{
|
{
|
||||||
register struct _obstack_chunk *chunk; /* points to new chunk */
|
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;
|
size = 4096 - extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__STDC__) && __STDC__
|
# if defined __STDC__ && __STDC__
|
||||||
h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
|
h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
|
||||||
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
|
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
|
||||||
#else
|
# else
|
||||||
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
|
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
|
||||||
h->freefun = freefun;
|
h->freefun = freefun;
|
||||||
#endif
|
# endif
|
||||||
h->chunk_size = size;
|
h->chunk_size = size;
|
||||||
h->alignment_mask = alignment - 1;
|
h->alignment_mask = alignment - 1;
|
||||||
h->extra_arg = arg;
|
h->extra_arg = arg;
|
||||||
@ -343,11 +343,11 @@ _obstack_newchunk (h, length)
|
|||||||
This is here for debugging.
|
This is here for debugging.
|
||||||
If you use it in a program, you are probably losing. */
|
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
|
/* Suppress -Wmissing-prototypes warning. We don't want to declare this in
|
||||||
obstack.h because it is just for debugging. */
|
obstack.h because it is just for debugging. */
|
||||||
int _obstack_allocated_p (struct obstack *h, POINTER obj);
|
int _obstack_allocated_p (struct obstack *h, POINTER obj);
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
int
|
int
|
||||||
_obstack_allocated_p (h, obj)
|
_obstack_allocated_p (h, obj)
|
||||||
@ -372,7 +372,7 @@ _obstack_allocated_p (h, obj)
|
|||||||
/* Free objects in obstack H, including OBJ and everything allocate
|
/* Free objects in obstack H, including OBJ and everything allocate
|
||||||
more recently than OBJ. If OBJ is zero, free everything in H. */
|
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 function has two names with identical definitions.
|
||||||
This is the first one, called from non-ANSI code. */
|
This is the first one, called from non-ANSI code. */
|
||||||
@ -458,27 +458,27 @@ _obstack_memory_used (h)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Define the error handler. */
|
/* Define the error handler. */
|
||||||
#ifndef _
|
# ifndef _
|
||||||
# if defined HAVE_LIBINTL_H || defined _LIBC
|
# if defined HAVE_LIBINTL_H || defined _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
# ifndef _
|
# ifndef _
|
||||||
# define _(Str) gettext (Str)
|
# define _(Str) gettext (Str)
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define _(Str) (Str)
|
||||||
# endif
|
# endif
|
||||||
# else
|
|
||||||
# define _(Str) (Str)
|
|
||||||
# endif
|
# endif
|
||||||
#endif
|
# if defined _LIBC && defined USE_IN_LIBIO
|
||||||
#if defined _LIBC && defined USE_IN_LIBIO
|
# include <libio/iolibio.h>
|
||||||
# include <libio/iolibio.h>
|
# define fputs(s, f) _IO_fputs (s, f)
|
||||||
# define fputs(s, f) _IO_fputs (s, f)
|
# endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __attribute__
|
# ifndef __attribute__
|
||||||
/* This feature is available in gcc versions 2.5 and later. */
|
/* This feature is available in gcc versions 2.5 and later. */
|
||||||
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
|
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
|
||||||
# define __attribute__(Spec) /* empty */
|
# define __attribute__(Spec) /* empty */
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
__attribute__ ((noreturn))
|
__attribute__ ((noreturn))
|
||||||
@ -489,23 +489,23 @@ print_and_abort ()
|
|||||||
happen because the "memory exhausted" message appears in other places
|
happen because the "memory exhausted" message appears in other places
|
||||||
like this and the translation should be reused instead of creating
|
like this and the translation should be reused instead of creating
|
||||||
a very similar string which requires a separate translation. */
|
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)
|
if (_IO_fwide (stderr, 0) > 0)
|
||||||
__fwprintf (stderr, L"%s\n", _("memory exhausted"));
|
__fwprintf (stderr, L"%s\n", _("memory exhausted"));
|
||||||
else
|
else
|
||||||
#endif
|
# endif
|
||||||
fprintf (stderr, "%s\n", _("memory exhausted"));
|
fprintf (stderr, "%s\n", _("memory exhausted"));
|
||||||
exit (obstack_exit_failure);
|
exit (obstack_exit_failure);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
# if 0
|
||||||
/* These are now turned off because the applications do not use it
|
/* These are now turned off because the applications do not use it
|
||||||
and it uses bcopy via obstack_grow, which causes trouble on sysV. */
|
and it uses bcopy via obstack_grow, which causes trouble on sysV. */
|
||||||
|
|
||||||
/* Now define the functional versions of the obstack macros.
|
/* Now define the functional versions of the obstack macros.
|
||||||
Define them to simply use the corresponding macros to do the job. */
|
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;
|
/* These function definitions do not work with non-ANSI preprocessors;
|
||||||
they won't pass through the macro names in parentheses. */
|
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);
|
return obstack_copy0 (obstack, address, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __STDC__ */
|
# endif /* __STDC__ */
|
||||||
|
|
||||||
#endif /* 0 */
|
# endif /* 0 */
|
||||||
|
|
||||||
#endif /* !ELIDE_CODE */
|
#endif /* !ELIDE_CODE */
|
||||||
|
@ -101,7 +101,7 @@ main (void)
|
|||||||
{
|
{
|
||||||
char *oldstate = (char *) setstate (state[s]);
|
char *oldstate = (char *) setstate (state[s]);
|
||||||
if (oldstate != state[(s + nseq - 1) % nseq])
|
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 ())
|
if (rnd[s][i] != random ())
|
||||||
fail ("bad value generated in interleave test", s, i);
|
fail ("bad value generated in interleave test", s, i);
|
||||||
}
|
}
|
||||||
|
@ -28,15 +28,15 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
/* Get a definition for wchar_t. But we must not define wchar_t itself. */
|
/* 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__
|
# ifdef __WCHAR_TYPE__
|
||||||
typedef __WCHAR_TYPE__ __wchar_t;
|
typedef __WCHAR_TYPE__ __gwchar_t;
|
||||||
# else
|
# else
|
||||||
# defined __need_wchar_t
|
# defined __need_wchar_t
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
typedef wchar_t __wchar_t;
|
typedef wchar_t __gwchar_t;
|
||||||
# endif
|
# endif
|
||||||
# define ____wchar_t_defined 1
|
# define ____gwchar_t_defined 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -308,13 +308,13 @@ extern uintmax_t strtoumax (__const char *__restrict __nptr,
|
|||||||
char ** __restrict __endptr, int __base) __THROW;
|
char ** __restrict __endptr, int __base) __THROW;
|
||||||
|
|
||||||
/* Like `wcstol' but convert to `intmax_t'. */
|
/* Like `wcstol' but convert to `intmax_t'. */
|
||||||
extern intmax_t wcstoimax (__const __wchar_t *__restrict __nptr,
|
extern intmax_t wcstoimax (__const __gwchar_t *__restrict __nptr,
|
||||||
__wchar_t **__restrict __endptr, int __base)
|
__gwchar_t **__restrict __endptr, int __base)
|
||||||
__THROW;
|
__THROW;
|
||||||
|
|
||||||
/* Like `wcstoul' but convert to `uintmax_t'. */
|
/* Like `wcstoul' but convert to `uintmax_t'. */
|
||||||
extern uintmax_t wcstoumax (__const __wchar_t *__restrict __nptr,
|
extern uintmax_t wcstoumax (__const __gwchar_t *__restrict __nptr,
|
||||||
__wchar_t ** __restrict __endptr, int __base)
|
__gwchar_t ** __restrict __endptr, int __base)
|
||||||
__THROW;
|
__THROW;
|
||||||
|
|
||||||
#ifdef __USE_EXTERN_INLINES
|
#ifdef __USE_EXTERN_INLINES
|
||||||
@ -352,13 +352,13 @@ strtoumax (__const char *__restrict nptr, char **__restrict endptr,
|
|||||||
|
|
||||||
/* Like `wcstol' but convert to `intmax_t'. */
|
/* Like `wcstol' but convert to `intmax_t'. */
|
||||||
# ifndef __wcstol_internal_defined
|
# ifndef __wcstol_internal_defined
|
||||||
extern long int __wcstol_internal (__const __wchar_t * __restrict __nptr,
|
extern long int __wcstol_internal (__const __gwchar_t * __restrict __nptr,
|
||||||
__wchar_t **__restrict __endptr,
|
__gwchar_t **__restrict __endptr,
|
||||||
int __base, int __group) __THROW;
|
int __base, int __group) __THROW;
|
||||||
# define __wcstol_internal_defined 1
|
# define __wcstol_internal_defined 1
|
||||||
# endif
|
# endif
|
||||||
extern __inline intmax_t
|
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
|
int base) __THROW
|
||||||
{
|
{
|
||||||
return __wcstol_internal (nptr, endptr, base, 0);
|
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'. */
|
/* Like `wcstoul' but convert to `uintmax_t'. */
|
||||||
# ifndef __wcstoul_internal_defined
|
# ifndef __wcstoul_internal_defined
|
||||||
extern unsigned long int __wcstoul_internal (__const __wchar_t *
|
extern unsigned long int __wcstoul_internal (__const __gwchar_t *
|
||||||
__restrict __nptr,
|
__restrict __nptr,
|
||||||
__wchar_t **
|
__gwchar_t **
|
||||||
__restrict __endptr,
|
__restrict __endptr,
|
||||||
int __base, int __group) __THROW;
|
int __base, int __group) __THROW;
|
||||||
# define __wcstoul_internal_defined 1
|
# define __wcstoul_internal_defined 1
|
||||||
# endif
|
# endif
|
||||||
extern __inline uintmax_t
|
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
|
int base) __THROW
|
||||||
{
|
{
|
||||||
return __wcstoul_internal (nptr, endptr, base, 0);
|
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'. */
|
/* Like `wcstol' but convert to `intmax_t'. */
|
||||||
# ifndef __wcstoll_internal_defined
|
# ifndef __wcstoll_internal_defined
|
||||||
__extension__
|
__extension__
|
||||||
extern long long int __wcstoll_internal (__const __wchar_t *
|
extern long long int __wcstoll_internal (__const __gwchar_t *
|
||||||
__restrict __nptr,
|
__restrict __nptr,
|
||||||
__wchar_t **__restrict __endptr,
|
__gwchar_t **__restrict __endptr,
|
||||||
int __base, int __group) __THROW;
|
int __base, int __group) __THROW;
|
||||||
# define __wcstoll_internal_defined 1
|
# define __wcstoll_internal_defined 1
|
||||||
# endif
|
# endif
|
||||||
extern __inline intmax_t
|
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
|
int base) __THROW
|
||||||
{
|
{
|
||||||
return __wcstoll_internal (nptr, endptr, base, 0);
|
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'. */
|
/* Like `wcstoul' but convert to `uintmax_t'. */
|
||||||
# ifndef __wcstoull_internal_defined
|
# ifndef __wcstoull_internal_defined
|
||||||
__extension__
|
__extension__
|
||||||
extern unsigned long long int __wcstoull_internal (__const __wchar_t *
|
extern unsigned long long int __wcstoull_internal (__const __gwchar_t *
|
||||||
__restrict __nptr,
|
__restrict __nptr,
|
||||||
__wchar_t **
|
__gwchar_t **
|
||||||
__restrict __endptr,
|
__restrict __endptr,
|
||||||
int __base,
|
int __base,
|
||||||
int __group) __THROW;
|
int __group) __THROW;
|
||||||
# define __wcstoull_internal_defined 1
|
# define __wcstoull_internal_defined 1
|
||||||
# endif
|
# endif
|
||||||
extern __inline uintmax_t
|
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
|
int base) __THROW
|
||||||
{
|
{
|
||||||
return __wcstoull_internal (nptr, endptr, base, 0);
|
return __wcstoull_internal (nptr, endptr, base, 0);
|
||||||
|
@ -327,6 +327,21 @@ extern void _dl_map_object_deps (struct link_map *map,
|
|||||||
/* Cache the locations of MAP's hash table. */
|
/* Cache the locations of MAP's hash table. */
|
||||||
extern void _dl_setup_hash (struct link_map *map) internal_function;
|
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
|
/* Search loaded objects' symbol tables for a definition of the symbol
|
||||||
referred to by UNDEF. *SYM is the symbol table entry containing the
|
referred to by UNDEF. *SYM is the symbol table entry containing the
|
||||||
|
Reference in New Issue
Block a user