_dl_debug_printf ("\
INT(_dl_debug_printf) ("\
match_symbol (const char *name, ElfW(Word) hash, const char *string,	      struct link_map *map, int verbose, int weak){  const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);  ElfW(Addr) def_offset;  ElfW(Verdef) *def;  /* Initialize to make the compiler happy.  */  const char *errstring = NULL;  int result = 0;  /* Display information about what we are doing while debugging.  */  if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_VERSIONS, 0))    _dl_debug_printf ("\checking for version `%s' in file %s required by file %s\n",		      string, map->l_name[0]		      ? map->l_name : _dl_argv[0], name);  if (__builtin_expect (map->l_info[VERSYMIDX (DT_VERDEF)] == NULL, 0))    {      /* The file has no symbol versioning.  I.e., the dependent	 object was linked against another version of this file.  We	 only print a message if verbose output is requested.  */      if (verbose)	{	  /* XXX We cannot translate the messages.  */	  errstring = make_string ("\no version information available (required by ", name, ")");	  goto call_cerror;	}      return 0;    }  def_offset = map->l_info[VERSYMIDX (DT_VERDEF)]->d_un.d_ptr;  assert (def_offset != 0);  def = (ElfW(Verdef) *) ((char *) map->l_addr + def_offset);  while (1)    {      /* Currently the version number of the definition entry is 1.	 Make sure all we see is this version.  */      if (__builtin_expect (def->vd_version, 1) != 1)	{	  char buf[20];	  buf[sizeof (buf) - 1] = '\0';	  /* XXX We cannot translate the message.  */	  errstring = make_string ("unsupported version ",				   _itoa_word (def->vd_version,					       &buf[sizeof (buf) - 1], 10, 0),				   " of Verdef record");	  result = 1;	  goto call_cerror;	}      /* Compare the hash values.  */      if (hash == def->vd_hash)	{	  ElfW(Verdaux) *aux = (ElfW(Verdaux) *) ((char *) def + def->vd_aux);	  /* To be safe, compare the string as well.  */	  if (__builtin_expect (strcmp (string, strtab + aux->vda_name), 0)	      == 0)	    /* Bingo!  */	    return 0;	}      /* If no more definitions we failed to find what we want.  */      if (def->vd_next == 0)	break;      /* Next definition.  */      def = (ElfW(Verdef) *) ((char *) def + def->vd_next);    }  /* Symbol not found.  If it was a weak reference it is not fatal.  */  if (__builtin_expect (weak, 1))    {      if (verbose)	{	  /* XXX We cannot translate the message.  */	  errstring = make_string ("weak version `", string,				   "' not found (required by ", name, ")");	  goto call_cerror;	}      return 0;    }  /* XXX We cannot translate the message.  */  errstring = make_string ("version `", string, "' not found (required by ",			   name, ")");  result = 1; call_cerror:  _dl_signal_cerror (0, map->l_name[0] ? map->l_name : _dl_argv[0],		     NULL, errstring);  return result;}