From: Ulrich Drepper Date: Wed, 26 Mar 2003 05:55:17 +0000 (+0000) Subject: Update. X-Git-Tag: cvs/glibc-2_3_3~1070 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=697119d670d6ec1283fff84eccf405a4851e83a6;p=platform%2Fupstream%2Fglibc.git Update. 2003-03-25 H.J. Lu * elf/dl-lookup.c (_dl_lookup_symbol): Avoid looking up protected symbols twice. (_dl_lookup_versioned_symbol): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 0de4810..e849b38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-03-25 H.J. Lu + + * elf/dl-lookup.c (_dl_lookup_symbol): Avoid looking up protected + symbols twice. + (_dl_lookup_versioned_symbol): Likewise. + 2003-03-26 Jakub Jelinek * csu/tst-atomic.c (do_test): Add some new diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c index 4603761..2b74736 100644 --- a/elf/dl-lookup.c +++ b/elf/dl-lookup.c @@ -273,17 +273,30 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map, { /* It is very tricky. We need to figure out what value to return for the protected symbol. */ - struct sym_val protected_value = { NULL, NULL }; - - for (scope = symbol_scope; *scope; ++scope) - if (_dl_do_lookup (undef_name, hash, *ref, &protected_value, *scope, - 0, flags, NULL, ELF_RTYPE_CLASS_PLT)) - break; - - if (protected_value.s != NULL && protected_value.m != undef_map) + if (type_class == ELF_RTYPE_CLASS_PLT) { - current_value.s = *ref; - current_value.m = undef_map; + if (current_value.s != NULL && current_value.m != undef_map) + { + current_value.s = *ref; + current_value.m = undef_map; + } + } + else + { + struct sym_val protected_value = { NULL, NULL }; + + for (scope = symbol_scope; *scope; ++scope) + if (_dl_do_lookup (undef_name, hash, *ref, + &protected_value, *scope, 0, flags, + NULL, ELF_RTYPE_CLASS_PLT)) + break; + + if (protected_value.s != NULL + && protected_value.m != undef_map) + { + current_value.s = *ref; + current_value.m = undef_map; + } } } @@ -465,18 +478,31 @@ _dl_lookup_versioned_symbol (const char *undef_name, { /* It is very tricky. We need to figure out what value to return for the protected symbol. */ - struct sym_val protected_value = { NULL, NULL }; - - for (scope = symbol_scope; *scope; ++scope) - if (_dl_do_lookup_versioned (undef_name, hash, *ref, &protected_value, - *scope, 0, version, NULL, - ELF_RTYPE_CLASS_PLT)) - break; - - if (protected_value.s != NULL && protected_value.m != undef_map) + if (type_class == ELF_RTYPE_CLASS_PLT) { - current_value.s = *ref; - current_value.m = undef_map; + if (current_value.s != NULL && current_value.m != undef_map) + { + current_value.s = *ref; + current_value.m = undef_map; + } + } + else + { + struct sym_val protected_value = { NULL, NULL }; + + for (scope = symbol_scope; *scope; ++scope) + if (_dl_do_lookup_versioned (undef_name, hash, *ref, + &protected_value, + *scope, 0, version, NULL, + ELF_RTYPE_CLASS_PLT)) + break; + + if (protected_value.s != NULL + && protected_value.m != undef_map) + { + current_value.s = *ref; + current_value.m = undef_map; + } } }