else if (dynp->d_tag >= DT_LOPROC && dynp->d_tag < DT_LOPROC + DT_NUM) dynld.Dyn.info[dynp->d_tag + DT_NUM - DT_LOPROC] =
else if (dynp->d_tag >= DT_LOPROC && dynp->d_tag < DT_LOPROC + DT_PROCNUM) dynld.Dyn.info[dynp->d_tag - DT_LOPROC + DT_NUM] =
_dl_boot_bind(const long sp, long *dl_data){	struct elf_object  dynld;	/* Resolver data for the loader */	AuxInfo		*auxstack;	long		*stack;	Elf_Dyn		*dynp;	int		n, argc;	char **argv, **envp;	long loff;	/*	 * Scan argument and environment vectors. Find dynamic	 * data vector put after them.	 */	stack = (long *)sp;	argc = *stack++;	argv = (char **)stack;	envp = &argv[argc + 1];	stack = (long *)envp;	while (*stack++ != NULL)		;	/*	 * Zero out dl_data.	 */	for (n = 0; n < AUX_entry; n++)		dl_data[n] = 0;	/*	 * Dig out auxiliary data set up by exec call. Move all known	 * tags to an indexed local table for easy access.	 */	for (auxstack = (AuxInfo *)stack; auxstack->au_id != AUX_null;	    auxstack++) {		if (auxstack->au_id > AUX_entry)			continue;		dl_data[auxstack->au_id] = auxstack->au_v;	}	loff = dl_data[AUX_base];	/* XXX assumes linked at 0x0 */	/*	 * We need to do 'selfreloc' in case the code weren't	 * loaded at the address it was linked to.	 *	 * Scan the DYNAMIC section for the loader.	 * Cache the data for easier access.	 */#if defined(__alpha__)	dynp = (Elf_Dyn *)((long)_DYNAMIC);#else	dynp = (Elf_Dyn *)((long)_DYNAMIC + loff);#endif	while (dynp != NULL && dynp->d_tag != DT_NULL) {		if (dynp->d_tag < DT_LOPROC)			dynld.Dyn.info[dynp->d_tag] = dynp->d_un.d_val;		else if (dynp->d_tag >= DT_LOPROC && dynp->d_tag < DT_LOPROC + DT_NUM)			dynld.Dyn.info[dynp->d_tag + DT_NUM - DT_LOPROC] =			    dynp->d_un.d_val;		if (dynp->d_tag == DT_TEXTREL)			dynld.dyn.textrel = 1;		dynp++;	}	/*	 * Do the 'bootstrap relocation'. This is really only needed if	 * the code was loaded at another location than it was linked to.	 * We don't do undefined symbols resolving (to difficult..)	 */	/* "relocate" dyn.X values if they represent addresses */	{		int i, val;		/* must be code, not pic data */		int table[20];		i = 0;		table[i++] = DT_PLTGOT;		table[i++] = DT_HASH;		table[i++] = DT_STRTAB;		table[i++] = DT_SYMTAB;		table[i++] = DT_RELA;		table[i++] = DT_INIT;		table[i++] = DT_FINI;		table[i++] = DT_REL;		table[i++] = DT_JMPREL;		/* other processors insert their extras here */		table[i++] = DT_NULL;		for (i = 0; table[i] != DT_NULL; i++) {			val = table[i];			if (val > DT_HIPROC) /* ??? */				continue;			if (val > DT_LOPROC)				val -= DT_LOPROC + DT_NUM;			if (dynld.Dyn.info[val] != 0)				dynld.Dyn.info[val] += loff;		}	}	{		u_int32_t rs;		Elf_Rel *rp;		int	i;		rp = (Elf_Rel *)(dynld.Dyn.info[DT_REL]);		rs = dynld.dyn.relsz;		for (i = 0; i < rs; i += sizeof (Elf_Rel)) {			Elf_Addr *ra;			const Elf_Sym *sp;			sp = dynld.dyn.symtab;			sp += ELF_R_SYM(rp->r_info);			if (ELF_R_SYM(rp->r_info) && sp->st_value == 0) {#if 0/* cannot printf in this function */				_dl_wrstderr("Dynamic loader failure: self bootstrapping impossible.\n");				_dl_wrstderr("Undefined symbol: ");				_dl_wrstderr((char *)dynld.dyn.strtab +				    sp->st_name);#endif				_dl_exit(5);			}			ra = (Elf_Addr *)(rp->r_offset + loff);			RELOC_REL(rp, sp, ra, loff);			rp++;		}	}	for (n = 0; n < 2; n++) {		unsigned long rs;		Elf_RelA *rp;		int	i;		switch (n) {		case 0:			rp = (Elf_RelA *)(dynld.Dyn.info[DT_JMPREL]);			rs = dynld.dyn.pltrelsz;			break;		case 1:			rp = (Elf_RelA *)(dynld.Dyn.info[DT_RELA]);			rs = dynld.dyn.relasz;			break;		default:			rp = NULL;			rs = 0;		}		for (i = 0; i < rs; i += sizeof (Elf_RelA)) {			Elf_Addr *ra;			const Elf_Sym *sp;			sp = dynld.dyn.symtab;			sp += ELF_R_SYM(rp->r_info);			if (ELF_R_SYM(rp->r_info) && sp->st_value == 0) {#if 0				_dl_wrstderr("Dynamic loader failure: self bootstrapping impossible.\n");				_dl_wrstderr("Undefined symbol: ");				_dl_wrstderr((char *)dynld.dyn.strtab +				    sp->st_name);#endif				_dl_exit(6);			}			ra = (Elf_Addr *)(rp->r_offset + loff);			RELOC_RELA(rp, sp, ra, loff);			rp++;		}	}	RELOC_GOT(&dynld, loff);	/*	 * we have been fully relocated here, so most things no longer	 * need the loff adjustment	 */}