SYM_SEARCH_ALL|SYM_WARNNOTFOUND|SYM_PLT, SYM_NOTPLT, object->load_name);
SYM_SEARCH_ALL|SYM_WARNNOTFOUND|SYM_PLT, 0, object->load_name);
_dl_bind(elf_object_t *object, int reloff){	const Elf_Sym *sym, *this;	Elf_Addr *r_addr, ooff;	const char *symn;	Elf_Addr value;	Elf_RelA *relas;	Elf32_Addr val;	Elf32_Addr *pltresolve;	Elf32_Addr *pltcall;	Elf32_Addr *pltinfo;	Elf32_Addr *plttable;	sigset_t omask, nmask;	relas = ((Elf_RelA *)object->Dyn.info[DT_JMPREL]) + (reloff>>2);	sym = object->dyn.symtab;	sym += ELF_R_SYM(relas->r_info);	symn = object->dyn.strtab + sym->st_name;	r_addr = (Elf_Addr *)(object->load_offs + relas->r_offset);	this = NULL;	ooff = _dl_find_symbol(symn, _dl_objects, &this,	    SYM_SEARCH_ALL|SYM_WARNNOTFOUND|SYM_PLT, SYM_NOTPLT,	    object->load_name);	if (this == NULL) {		_dl_printf("lazy binding failed!\n");		*((int *)0) = 0;	/* XXX */	}	/* if PLT is protected, allow the write */	if (object->plt_size != 0)  {		sigfillset(&nmask);		_dl_sigprocmask(SIG_BLOCK, &nmask, &omask);		_dl_mprotect((void*)object->plt_start, object->plt_size,		    PROT_READ|PROT_WRITE|PROT_EXEC);	}	value = ooff + this->st_value;	val = value - (Elf32_Addr)r_addr;	pltresolve = (Elf32_Addr *)	    (Elf32_Rela *)(object->Dyn.info[DT_PLTGOT]);	pltcall = (Elf32_Addr *)(pltresolve) + PLT_CALL_OFFSET;	if (!B24_VALID_RANGE(val)) {		int index;		/* if offset is > RELOC_24 deal with it */		index = reloff >> 2;		/* update plttable before pltcall branch, to make		 * this a safe race for threads		 */		val = ooff + this->st_value + relas->r_addend;		pltinfo = (Elf32_Addr *)(pltresolve) + PLT_INFO_OFFSET;		plttable = (Elf32_Addr *)pltinfo[0];		plttable[index] = val;		if (index > (2 << 14)) {			/* r_addr[0,1] is initialized to correct			 * value in reloc_got.			 */			BR(r_addr[2], pltcall);			_dl_dcbf(&r_addr[2]);		} else {			/* r_addr[0] is initialized to correct			 * value in reloc_got.			 */			BR(r_addr[1], pltcall);			_dl_dcbf(&r_addr[1]);		}	} else {		/* if the offset is small enough,		 * branch directly to the dest		 */		BR(r_addr[0], value);		_dl_dcbf(&r_addr[0]);	}	/* if PLT is (to be protected, change back to RO/X */	if (object->plt_size != 0) {		_dl_mprotect((void*)object->plt_start, object->plt_size,		    PROT_READ|PROT_EXEC); /* only PPC is PROT_EXE */		_dl_sigprocmask(SIG_SETMASK, &omask, NULL);	}	return (value);}