_dl_debug_state ();
INT(_dl_debug_state) ();
_dl_init (struct link_map *main_map, int argc, char **argv, char **env){  ElfW(Dyn) *preinit_array = main_map->l_info[DT_PREINIT_ARRAY];  struct r_debug *r;  unsigned int i;  if (__builtin_expect (GL(dl_initfirst) != NULL, 0))    {      call_init (GL(dl_initfirst), argc, argv, env);      GL(dl_initfirst) = NULL;    }  /* Don't do anything if there is no preinit array.  */  if (__builtin_expect (preinit_array != NULL, 0)      && (i = preinit_array->d_un.d_val / sizeof (ElfW(Addr))) > 0)    {      ElfW(Addr) *addrs;      unsigned int cnt;      if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))	_dl_debug_printf ("\ncalling preinit: %s\n\n",			  main_map->l_name[0]			  ? main_map->l_name : _dl_argv[0]);      addrs = (ElfW(Addr) *) (main_map->l_info[DT_PREINIT_ARRAY]->d_un.d_ptr			      + main_map->l_addr);      for (cnt = 0; cnt < i; ++cnt)	((init_t) addrs[cnt]) (argc, argv, env);    }  /* Notify the debugger we have added some objects.  We need to call     _dl_debug_initialize in a static program in case dynamic linking has     not been used before.  */  r = _dl_debug_initialize (0);  r->r_state = RT_ADD;  _dl_debug_state ();  /* Stupid users forced the ELF specification to be changed.  It now     says that the dynamic loader is responsible for determining the     order in which the constructors have to run.  The constructors     for all dependencies of an object must run before the constructor     for the object itself.  Circular dependencies are left unspecified.     This is highly questionable since it puts the burden on the dynamic     loader which has to find the dependencies at runtime instead of     letting the user do it right.  Stupidity rules!  */  i = main_map->l_searchlist.r_nlist;  while (i-- > 0)    call_init (main_map->l_initfini[i], argc, argv, env);  /* Notify the debugger all new objects are now ready to go.  */  r->r_state = RT_CONSISTENT;  _dl_debug_state ();  /* Finished starting up.  */  _dl_starting_up = 0;}