diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | elf/dl-lookup.c | 16 | ||||
-rw-r--r-- | elf/dl-reloc.c | 11 |
3 files changed, 23 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog index f95c953517..9158427ca9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2002-01-29 Ulrich Drepper <drepper@redhat.com> + * elf/dl-lookup.c: Only define or handle _dl_num_relocations for the + SHARED version. + * elf/dl-reloc.c: Likewise for _dl_num_cache_relocations. + * elf/rtld.c (_dl_start): Use __builtin_memset if available. 2002-01-29 Ben Collins <bcollins@debian.org> diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c index ae3f0b1e34..86b5c0dc05 100644 --- a/elf/dl-lookup.c +++ b/elf/dl-lookup.c @@ -1,5 +1,5 @@ /* Look up a symbol in the loaded objects. - Copyright (C) 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -59,8 +59,14 @@ struct sym_val result; \ }) +#ifdef SHARED /* Statistics function. */ unsigned long int _dl_num_relocations; +# define bump_num_relocation() ++_dl_num_relocations +#else +# define bump_num_relocation() 0 +#endif + /* We have two different situations when looking up a simple: with or @@ -215,7 +221,7 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map, struct r_scope_elem **scope; int protected; - ++_dl_num_relocations; + bump_num_relocations (); /* Search the relevant loaded objects for a definition. */ for (scope = symbol_scope; *scope; ++scope) @@ -303,7 +309,7 @@ _dl_lookup_symbol_skip (const char *undef_name, size_t i; int protected; - ++_dl_num_relocations; + bump_num_relocations (); /* Search the relevant loaded objects for a definition. */ scope = symbol_scope; @@ -374,7 +380,7 @@ _dl_lookup_versioned_symbol (const char *undef_name, struct r_scope_elem **scope; int protected; - ++_dl_num_relocations; + bump_num_relocations (); /* Search the relevant loaded objects for a definition. */ for (scope = symbol_scope; *scope; ++scope) @@ -493,7 +499,7 @@ _dl_lookup_versioned_symbol_skip (const char *undef_name, size_t i; int protected; - ++_dl_num_relocations; + bump_num_relocations (); /* Search the relevant loaded objects for a definition. */ scope = symbol_scope; diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index 4d4ca149ea..748aa3b8e2 100644 --- a/elf/dl-reloc.c +++ b/elf/dl-reloc.c @@ -1,5 +1,5 @@ /* Relocate a shared object and resolve its references to other loaded objects. - Copyright (C) 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -27,8 +27,13 @@ #include <sys/types.h> #include "dynamic-link.h" +#ifdef SHARED /* Statistics function. */ unsigned long int _dl_num_cache_relocations; +# define bump_num_cache_relocations() ++_dl_num_cache_relocations +#else +# define bump_num_cache_relocations() 0 +#endif void @@ -113,7 +118,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], (ELFW(ST_BIND) ((*ref)->st_info) != STB_LOCAL \ ? ((__builtin_expect ((*ref) == l->l_lookup_cache.sym, 0) \ && elf_machine_type_class (r_type) == l->l_lookup_cache.type_class) \ - ? (++_dl_num_cache_relocations, \ + ? (bump_num_cache_relocations, \ (*ref) = l->l_lookup_cache.ret, \ l->l_lookup_cache.value) \ : ({ lookup_t _lr; \ @@ -133,7 +138,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], (ELFW(ST_BIND) ((*ref)->st_info) != STB_LOCAL \ ? ((__builtin_expect ((*ref) == l->l_lookup_cache.sym, 0) \ && elf_machine_type_class (r_type) == l->l_lookup_cache.type_class) \ - ? (++_dl_num_cache_relocations, \ + ? (bump_num_cache_relocations, \ (*ref) = l->l_lookup_cache.ret, \ l->l_lookup_cache.value) \ : ({ lookup_t _lr; \ |