if (args->handle == NULL)
if (args->handle == RTLD_DEFAULT)
dlvsym_doit (void *a){  struct dlvsym_args *args = (struct dlvsym_args *)a;  args->ref = NULL;  if (args->handle == NULL)    /* Search the global scope.  */    args->loadbase = _dl_lookup_versioned_symbol (args->name, &args->ref,						  _dl_global_scope,						  NULL, &args->version, 0);  else if (args->handle == RTLD_NEXT)    {      struct link_map *l, *match;      /* Find the highest-addressed object that CALLER is not below.  */      match = NULL;      for (l = _dl_loaded; l; l = l->l_next)	if (args->caller >= l->l_addr && (!match || match->l_addr < l->l_addr))	  match = l;      if (! match)	_dl_signal_error (0, NULL, _("\RTLD_NEXT used in code not dynamically loaded"));      l = match;      while (l->l_loader)	l = l->l_loader;      args->loadbase = _dl_lookup_versioned_symbol_skip (args->name,							 &args->ref,							 l->l_local_scope,							 NULL, &args->version,							 match);    }  else    {      /* Search the scope of the given object.  */      struct link_map *map = args->handle;      args->loadbase = _dl_lookup_versioned_symbol (args->name, &args->ref,						    map->l_local_scope,						    map->l_name,						    &args->version, 0);    }}