_dl_signal_error (ENOMEM, NULL, NULL, errstring);
INT(_dl_signal_error) (ENOMEM, NULL, NULL, errstring);
decompose_rpath (struct r_search_path_struct *sps,		 const char *rpath, struct link_map *l, const char *what){  /* Make a copy we can work with.  */  const char *where = l->l_name;  char *copy;  char *cp;  struct r_search_path_elem **result;  size_t nelems;  /* Initialize to please the compiler.  */  const char *errstring = NULL;  /* First see whether we must forget the RUNPATH and RPATH from this     object.  */  if (__builtin_expect (GL(dl_inhibit_rpath) != NULL, 0)      && !__libc_enable_secure)    {      const char *found = strstr (GL(dl_inhibit_rpath), where);      if (found != NULL)	{	  size_t len = strlen (where);	  if ((found == GL(dl_inhibit_rpath) || found[-1] == ':')	      && (found[len] == '\0' || found[len] == ':'))	    {	      /* This object is on the list of objects for which the		 RUNPATH and RPATH must not be used.  */	      result = (struct r_search_path_elem **)		malloc (sizeof (*result));	      if (result == NULL)		{		signal_error_cache:		  errstring = N_("cannot create cache for search path");		signal_error:		  _dl_signal_error (ENOMEM, NULL, NULL, errstring);		}	      result[0] = NULL;	      sps->dirs = result;	      sps->malloced = 1;	      return;	    }	}    }  /* Make a writable copy.  At the same time expand possible dynamic     string tokens.  */  copy = expand_dynamic_string_token (l, rpath);  if (copy == NULL)    {      errstring = N_("cannot create RUNPATH/RPATH copy");      goto signal_error;    }  /* Count the number of necessary elements in the result array.  */  nelems = 0;  for (cp = copy; *cp != '\0'; ++cp)    if (*cp == ':')      ++nelems;  /* Allocate room for the result.  NELEMS + 1 is an upper limit for the     number of necessary entries.  */  result = (struct r_search_path_elem **) malloc ((nelems + 1 + 1)						  * sizeof (*result));  if (result == NULL)    goto signal_error_cache;  fillin_rpath (copy, result, ":", 0, what, where);  /* Free the copied RPATH string.  `fillin_rpath' make own copies if     necessary.  */  free (copy);  sps->dirs = result;  /* The caller will change this value if we haven't used a real malloc.  */  sps->malloced = 1;}