ooff = _dl_find_symbol(".init", object, &sym, 1, 1);
ooff = _dl_find_symbol(".init", object, &sym, 1, 1, 1);
_dl_call_init(elf_object_t *object){	Elf_Addr ooff;	const Elf_Sym *sym;	if (object->next)		_dl_call_init(object->next);	if (object->status & STAT_INIT_DONE)		return;#ifndef __mips__	if (object->dyn.init)		(*object->dyn.init)();/* * XXX We perform relocation of DTOR/CTOR. This is a ld bug problem * XXX that should be fixed. */	sym = NULL;	ooff = _dl_find_symbol("__CTOR_LIST__", object, &sym, 1, 1);	if (sym != NULL) {		int i = *(int *)(sym->st_value + ooff);		while (i--)			*(int *)(sym->st_value + ooff + 4 + 4 * i) += ooff;	}	sym = NULL;	ooff = _dl_find_symbol("__DTOR_LIST__", object, &sym, 1, 1);	if (sym != NULL) {		int i = *(int *)(sym->st_value + ooff);		while (i--)			*(int *)(sym->st_value + ooff + 4 + 4 * i) += ooff;	}/* * XXX We should really call any code which resides in the .init segment * XXX but at the moment this functionality is not provided by the toolchain. * XXX Instead we rely on a symbol named '.init' and call it if it exists. */	sym = NULL;	ooff = _dl_find_symbol(".init", object, &sym, 1, 1);	if (sym != NULL) {		DL_DEB(("calling .init in '%s'\n",object->load_name));		(*(void(*)(void))(sym->st_value + ooff))();	}#if 0 /*XXX*/	if (object->dyn.init)		(*object->dyn.init)();#endif#endif /* __mips__ */	object->status |= STAT_INIT_DONE;}