array = (ElfW(Addr) *) l->l_info[DT_INIT_ARRAY]->d_un.d_ptr;
array = (ElfW(Addr) *) D_PTR (l, l_info[DT_INIT_ARRAY]);
_dl_init_next (struct r_scope_elem *searchlist){  unsigned int i;  /* The search list for symbol lookup is a flat list in top-down     dependency order, so processing that list from back to front gets us     breadth-first leaf-to-root order.  */  i = searchlist->r_nlist;  while (i-- > 0)    {      struct link_map *l = searchlist->r_list[i];      ElfW(Addr) *array;      if (l->l_init_called)	/* This object is all done.  */	continue;      /* Check for object which constructors we do not run here.	 XXX Maybe this should be pre-computed, but where?  */      if (l->l_name[0] == '\0' && l->l_type == lt_executable)	{	  l->l_init_called = 1;	  continue;	}      /* Account for running next constructor.  */      ++l->l_runcount;      if (l->l_runcount == 1)	{	  /* Try running the DT_INIT constructor.  */	  if (l->l_info[DT_INIT])	    {	      /* Print a debug message if wanted.  */	      if (_dl_debug_impcalls)		_dl_debug_message (1, "\ncalling init: ",				   l->l_name[0] ? l->l_name : _dl_argv[0],				   "\n\n", NULL);	      return l->l_addr + l->l_info[DT_INIT]->d_un.d_ptr;	    }	  /* No DT_INIT, so go on with the array.  */	  ++l->l_runcount;	}      if (l->l_runcount > l->l_initcount)	{	  /* That were all of the constructors.  */	  l->l_runcount = 0;	  l->l_init_called = 1;	  continue;	}      /* Print a debug message if wanted.  */      if (_dl_debug_impcalls && l->l_info[DT_INIT] == NULL	  && l->l_runcount == 2)	_dl_debug_message (1, "\ncalling init: ",			   l->l_name[0] ? l->l_name : _dl_argv[0],			   "\n\n", NULL);      array = (ElfW(Addr) *) l->l_info[DT_INIT_ARRAY]->d_un.d_ptr;      return l->l_addr + array[l->l_runcount - 2];      /* NOTREACHED */    }  /* Notify the debugger all new objects are now ready to go.  */  _r_debug.r_state = RT_CONSISTENT;  _dl_debug_state ();  return 0;}