@ -228,24 +228,7 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
for ( scope = symbol_scope ; * scope ; + + scope )
if ( do_lookup ( undef_name , hash , * ref , & current_value , * scope , 0 , flags ,
NULL , type_class ) )
{
/* We have to check whether this would bind UNDEF_MAP to an object
in the global scope which was dynamically loaded . In this case
we have to prevent the latter from being unloaded unless the
UNDEF_MAP object is also unloaded . */
if ( __builtin_expect ( current_value . m - > l_type = = lt_loaded , 0 )
/* Don't do this for explicit lookups as opposed to implicit
runtime lookups . */
& & ( flags & DL_LOOKUP_ADD_DEPENDENCY ) ! = 0
/* Add UNDEF_MAP to the dependencies. */
& & add_dependency ( undef_map , current_value . m ) < 0 )
/* Something went wrong. Perhaps the object we tried to reference
was just removed . Try finding another definition . */
return INTUSE ( _dl_lookup_symbol ) ( undef_name , undef_map , ref ,
symbol_scope , type_class , 0 ) ;
break ;
}
if ( __builtin_expect ( current_value . s = = NULL , 0 ) )
{
@ -267,7 +250,7 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
if ( __builtin_expect ( protected ! = 0 , 0 ) )
{
/* It is very tricky. We need to figure out what value to
return for the protected symbol */
return for the protected symbol . */
struct sym_val protected_value = { NULL , NULL } ;
for ( scope = symbol_scope ; * scope ; + + scope )
@ -282,6 +265,21 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
}
}
/* We have to check whether this would bind UNDEF_MAP to an object
in the global scope which was dynamically loaded . In this case
we have to prevent the latter from being unloaded unless the
UNDEF_MAP object is also unloaded . */
if ( __builtin_expect ( current_value . m - > l_type = = lt_loaded , 0 )
/* Don't do this for explicit lookups as opposed to implicit
runtime lookups . */
& & ( flags & DL_LOOKUP_ADD_DEPENDENCY ) ! = 0
/* Add UNDEF_MAP to the dependencies. */
& & add_dependency ( undef_map , current_value . m ) < 0 )
/* Something went wrong. Perhaps the object we tried to reference
was just removed . Try finding another definition . */
return INTUSE ( _dl_lookup_symbol ) ( undef_name , undef_map , ref ,
symbol_scope , type_class , flags ) ;
if ( __builtin_expect ( GL ( dl_debug_mask )
& ( DL_DEBUG_BINDINGS | DL_DEBUG_PRELINK ) , 0 ) )
_dl_debug_bindings ( undef_name , undef_map , ref , symbol_scope ,
@ -395,26 +393,7 @@ _dl_lookup_versioned_symbol (const char *undef_name,
int res = do_lookup_versioned ( undef_name , hash , * ref , & current_value ,
* scope , 0 , version , NULL , type_class ) ;
if ( res > 0 )
{
/* We have to check whether this would bind UNDEF_MAP to an object
in the global scope which was dynamically loaded . In this case
we have to prevent the latter from being unloaded unless the
UNDEF_MAP object is also unloaded . */
if ( __builtin_expect ( current_value . m - > l_type = = lt_loaded , 0 )
/* Don't do this for explicit lookups as opposed to implicit
runtime lookups . */
& & flags ! = 0
/* Add UNDEF_MAP to the dependencies. */
& & add_dependency ( undef_map , current_value . m ) < 0 )
/* Something went wrong. Perhaps the object we tried to reference
was just removed . Try finding another definition . */
return INTUSE ( _dl_lookup_versioned_symbol ) ( undef_name , undef_map ,
ref , symbol_scope ,
version , type_class ,
0 ) ;
break ;
}
if ( __builtin_expect ( res , 0 ) < 0 )
{
@ -463,7 +442,7 @@ _dl_lookup_versioned_symbol (const char *undef_name,
if ( __builtin_expect ( protected ! = 0 , 0 ) )
{
/* It is very tricky. We need to figure out what value to
return for the protected symbol */
return for the protected symbol . */
struct sym_val protected_value = { NULL , NULL } ;
for ( scope = symbol_scope ; * scope ; + + scope )
@ -479,6 +458,22 @@ _dl_lookup_versioned_symbol (const char *undef_name,
}
}
/* We have to check whether this would bind UNDEF_MAP to an object
in the global scope which was dynamically loaded . In this case
we have to prevent the latter from being unloaded unless the
UNDEF_MAP object is also unloaded . */
if ( __builtin_expect ( current_value . m - > l_type = = lt_loaded , 0 )
/* Don't do this for explicit lookups as opposed to implicit
runtime lookups . */
& & flags ! = 0
/* Add UNDEF_MAP to the dependencies. */
& & add_dependency ( undef_map , current_value . m ) < 0 )
/* Something went wrong. Perhaps the object we tried to reference
was just removed . Try finding another definition . */
return INTUSE ( _dl_lookup_versioned_symbol ) ( undef_name , undef_map ,
ref , symbol_scope ,
version , type_class , flags ) ;
if ( __builtin_expect ( GL ( dl_debug_mask )
& ( DL_DEBUG_BINDINGS | DL_DEBUG_PRELINK ) , 0 ) )
_dl_debug_bindings ( undef_name , undef_map , ref , symbol_scope ,
@ -546,7 +541,7 @@ _dl_lookup_versioned_symbol_skip (const char *undef_name,
if ( __builtin_expect ( protected ! = 0 , 0 ) )
{
/* It is very tricky. We need to figure out what value to
return for the protected symbol */
return for the protected symbol . */
struct sym_val protected_value = { NULL , NULL } ;
if ( i > = ( * scope ) - > r_nlist