if (i < (*scope)->r_nlist && do_lookup (undef_name, undef_map, hash, *ref, &current_value, *scope, i, skip_map, 0, 0)) {  if (current_value.m->l_global && (__builtin_expect (current_value.m->l_type, lt_library) == lt_loaded) && undef_map != current_value.m  && add_dependency (undef_map, current_value.m) < 0)  return _dl_lookup_symbol_skip (undef_name, undef_map, ref, symbol_scope, skip_map); } else
while (i >= (*scope)->r_nlist || ! do_lookup (undef_name, hash, *ref, &current_value, *scope, i, skip_map, 0, 0))
_dl_lookup_symbol_skip (const char *undef_name,			struct link_map *undef_map, const ElfW(Sym) **ref,			struct r_scope_elem *symbol_scope[],			struct link_map *skip_map){  const char *reference_name = undef_map ? undef_map->l_name : NULL;  const unsigned long int hash = _dl_elf_hash (undef_name);  struct sym_val current_value = { NULL, NULL };  struct r_scope_elem **scope;  size_t i;  int protected;  ++_dl_num_relocations;  /* Search the relevant loaded objects for a definition.  */  scope = symbol_scope;  for (i = 0; (*scope)->r_duplist[i] != skip_map; ++i)    assert (i < (*scope)->r_nduplist);  if (i < (*scope)->r_nlist      && do_lookup (undef_name, undef_map, hash, *ref, &current_value,		    *scope, i, skip_map, 0, 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 (current_value.m->l_global	  && (__builtin_expect (current_value.m->l_type, lt_library)	      == lt_loaded)	  && undef_map != current_value.m	  /* 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 _dl_lookup_symbol_skip (undef_name, undef_map, ref,				       symbol_scope, skip_map);    }  else    while (*++scope)      if (do_lookup (undef_name, undef_map, hash, *ref, &current_value,		     *scope, 0, skip_map, 0, 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_global, 0)	      && (__builtin_expect (current_value.m->l_type, lt_library)		  == lt_loaded)	      && undef_map != current_value.m	      /* 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 _dl_lookup_symbol_skip (undef_name, undef_map, ref,					   symbol_scope, skip_map);	  break;	}  if (__builtin_expect (current_value.s == NULL, 0))    {      *ref = NULL;      return 0;    }  protected = *ref && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED;  if (__builtin_expect (_dl_debug_bindings, 0))    _dl_debug_message (1, "binding file ",		       (reference_name && reference_name[0]			? reference_name			: (_dl_argv[0] ?: "<main program>")),		       " to ", current_value.m->l_name[0]		       ? current_value.m->l_name : _dl_argv[0],		       ": ", protected ? "protected" : "normal",		       " symbol `", undef_name, "'\n", NULL);  if (__builtin_expect (protected == 0, 1))    {      *ref = current_value.s;      return LOOKUP_VALUE (current_value.m);    }  else    {      /* It is very tricky. We need to figure out what value to         return for the protected symbol */      struct sym_val protected_value = { NULL, NULL };      if (i >= (*scope)->r_nlist	  || !do_lookup (undef_name, undef_map, hash, *ref, &protected_value,			 *scope, i, skip_map, 0, 1))	while (*++scope)	  if (do_lookup (undef_name, undef_map, hash, *ref, &protected_value,			 *scope, 0, skip_map, 0, 1))	    break;      if (protected_value.s == NULL || protected_value.m == undef_map)	{	  *ref = current_value.s;	  return LOOKUP_VALUE (current_value.m);	}      return LOOKUP_VALUE (undef_map);    }}