&args->version,
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						    ?: _dl_default_scope)[2],						  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;      {	struct link_map *map = l;	struct link_map *mapscope[2] = { map, NULL };	args->loadbase = _dl_lookup_versioned_symbol_skip (args->name,							   &args->ref,							   mapscope,							   NULL,							   match);      }    }  else    {      /* Search the scope of the given object.  */      struct link_map *map = args->handle;      struct link_map *mapscope[2] = { map, NULL };      args->loadbase = _dl_lookup_versioned_symbol (args->name, &args->ref,						    mapscope, map->l_name,						    &args->version, 0);    }}