_dl_init_all_dirs = _dl_all_dirs;
GL(dl_init_all_dirs) = GL(dl_all_dirs);
_dl_init_paths (const char *llp){  size_t idx;  const char *strp;  struct r_search_path_elem *pelem, **aelem;  size_t round_size;#ifdef SHARED  struct link_map *l;#endif  /* Initialize to please the compiler.  */  const char *errstring = NULL;  /* Fill in the information about the application's RPATH and the     directories addressed by the LD_LIBRARY_PATH environment variable.  */  /* Get the capabilities.  */  capstr = _dl_important_hwcaps (_dl_platform, _dl_platformlen,				 &ncapstr, &max_capstrlen);  /* First set up the rest of the default search directory entries.  */  aelem = rtld_search_dirs.dirs = (struct r_search_path_elem **)    malloc ((nsystem_dirs_len + 1) * sizeof (struct r_search_path_elem *));  if (rtld_search_dirs.dirs == NULL)    {      errstring = N_("cannot create search path array");    signal_error:      _dl_signal_error (ENOMEM, NULL, NULL, errstring);    }  round_size = ((2 * sizeof (struct r_search_path_elem) - 1		 + ncapstr * sizeof (enum r_dir_status))		/ sizeof (struct r_search_path_elem));  rtld_search_dirs.dirs[0] = (struct r_search_path_elem *)    malloc ((sizeof (system_dirs) / sizeof (system_dirs[0]))	    * round_size * sizeof (struct r_search_path_elem));  if (rtld_search_dirs.dirs[0] == NULL)    {      errstring = N_("cannot create cache for search path");      goto signal_error;    }  rtld_search_dirs.malloced = 0;  pelem = _dl_all_dirs = rtld_search_dirs.dirs[0];  strp = system_dirs;  idx = 0;  do    {      size_t cnt;      *aelem++ = pelem;      pelem->what = "system search path";      pelem->where = NULL;      pelem->dirname = strp;      pelem->dirnamelen = system_dirs_len[idx];      strp += system_dirs_len[idx] + 1;      /* System paths must be absolute.  */      assert (pelem->dirname[0] == '/');      for (cnt = 0; cnt < ncapstr; ++cnt)	pelem->status[cnt] = unknown;      pelem->next = (++idx == nsystem_dirs_len ? NULL : (pelem + round_size));      pelem += round_size;    }  while (idx < nsystem_dirs_len);  max_dirnamelen = SYSTEM_DIRS_MAX_LEN;  *aelem = NULL;#ifdef SHARED  /* This points to the map of the main object.  */  l = _dl_loaded;  if (l != NULL)    {      assert (l->l_type != lt_loaded);      if (l->l_info[DT_RUNPATH])	{	  /* Allocate room for the search path and fill in information	     from RUNPATH.  */	  decompose_rpath (&l->l_runpath_dirs,			   (const void *) (D_PTR (l, l_info[DT_STRTAB])					   + l->l_info[DT_RUNPATH]->d_un.d_val),			   l, "RUNPATH");	  /* The RPATH is ignored.  */	  l->l_rpath_dirs.dirs = (void *) -1;	}      else	{	  l->l_runpath_dirs.dirs = (void *) -1;	  if (l->l_info[DT_RPATH])	    {	      /* Allocate room for the search path and fill in information		 from RPATH.  */	      decompose_rpath (&l->l_rpath_dirs,			       (const void *) (D_PTR (l, l_info[DT_STRTAB])					       + l->l_info[DT_RPATH]->d_un.d_val),			       l, "RPATH");	      l->l_rpath_dirs.malloced = 0;	    }	  else	    l->l_rpath_dirs.dirs = (void *) -1;	}    }#endif	/* SHARED */  if (llp != NULL && *llp != '\0')    {      size_t nllp;      const char *cp = llp;      char *llp_tmp = strdupa (llp);      /* Decompose the LD_LIBRARY_PATH contents.  First determine how many	 elements it has.  */      nllp = 1;      while (*cp)	{	  if (*cp == ':' || *cp == ';')	    ++nllp;	  ++cp;	}      env_path_list.dirs = (struct r_search_path_elem **)	malloc ((nllp + 1) * sizeof (struct r_search_path_elem *));      if (env_path_list.dirs == NULL)	{	  errstring = N_("cannot create cache for search path");	  goto signal_error;	}      (void) fillin_rpath (llp_tmp, env_path_list.dirs, ":;",			   __libc_enable_secure, "LD_LIBRARY_PATH", NULL);      if (env_path_list.dirs[0] == NULL)	{	  free (env_path_list.dirs);	  env_path_list.dirs = (void *) -1;	}      env_path_list.malloced = 0;    }  else    env_path_list.dirs = (void *) -1;  /* Remember the last search directory added at startup.  */  _dl_init_all_dirs = _dl_all_dirs;}