if (hwcap && (cache_new->libs[middle].hwcap & *hwcap) > _dl_hwcap)     \
if (hwcap && (cache_new->libs[middle].hwcap & *hwcap) > *hwcap)        \
_dl_load_cache_lookup (const char *name){  int left, right, middle;  int cmpres;  const char *cache_data;  uint32_t cache_data_size;  const char *best;  /* Print a message if the loading of libs is traced.  */  if (_dl_debug_libs)    _dl_debug_message (1, " search cache=", LD_SO_CACHE, "\n", NULL);  if (cache == NULL)    {      /* Read the contents of the file.  */      void *file = _dl_sysdep_read_whole_file (LD_SO_CACHE, &cachesize,					       PROT_READ);      /* We can handle three different cache file formats here:	 - the old libc5/glibc2.0/2.1 format	 - the old format with the new format in it	 - only the new format	 The following checks if the cache contains any of these formats.  */      if (file != NULL && cachesize > sizeof *cache	  && memcmp (file, CACHEMAGIC, sizeof CACHEMAGIC - 1) == 0)	{	  size_t offset;	  /* Looks ok.  */	  cache = file;	  /* Check for new version.  */	  offset = ALIGN_CACHE (sizeof (struct cache_file)				+ cache->nlibs * sizeof (struct file_entry));	  cache_new = (struct cache_file_new *) ((void *) cache + offset);	  if (cachesize < (offset + sizeof (struct cache_file_new))	      || memcmp (cache_new->magic, CACHEMAGIC_VERSION_NEW,			 sizeof CACHEMAGIC_VERSION_NEW - 1) != 0)	    cache_new = (void *) -1;	}      else if (file != NULL && cachesize > sizeof *cache_new	       && memcmp (file, CACHEMAGIC_VERSION_NEW,			  sizeof CACHEMAGIC_VERSION_NEW - 1) == 0)	{	  cache_new = file;	  cache = file;	}      else	{	  if (file != NULL)	    __munmap (file, cachesize);	  cache = (void *) -1;	}      assert (cache != NULL);    }  if (cache == (void *) -1)    /* Previously looked for the cache file and didn't find it.  */    return NULL;  best = NULL;  if (cache_new != (void *) -1)    {      /* This file ends in static libraries where we don't have a hwcap.  */      unsigned long int *hwcap;      weak_extern (_dl_hwcap);      /* This is where the strings start.  */      cache_data = (const char *) cache_new;      /* Now we can compute how large the string table is.  */      cache_data_size = (const char *) cache + cachesize - cache_data;      hwcap = &_dl_hwcap;#define HWCAP_CHECK							     \      if (hwcap && (cache_new->libs[middle].hwcap & *hwcap) > _dl_hwcap)     \	continue      SEARCH_CACHE (cache_new);    }  else    {      /* This is where the strings start.  */      cache_data = (const char *) &cache->libs[cache->nlibs];      /* Now we can compute how large the string table is.  */      cache_data_size = (const char *) cache + cachesize - cache_data;#undef HWCAP_CHECK#define HWCAP_CHECK do {} while (0)      SEARCH_CACHE (cache);    }  /* Print our result if wanted.  */  if (_dl_debug_libs && best != NULL)    _dl_debug_message (1, "  trying file=", best, "\n", NULL);  return best;}