return;
_dl_md_reloc_got(elf_object_t *object, int lazy){	Elf_Addr *pltgot;	extern void _dl_bind_start(void);	/* XXX */	Elf_Addr ooff;	const Elf_Sym *this;	Elf_Addr plt_addr;	pltgot = (Elf_Addr *)object->Dyn.info[DT_PLTGOT];	if (pltgot != NULL) {		/*		 * PLTGOT is the PLT on the sparc.		 * The first entry holds the call the dynamic linker.		 * We construct a `call' sequence that transfers		 * to `_dl_bind_start()'.		 * The second entry holds the object identification.		 * Note: each PLT entry is three words long.		 */#define SAVE    0x9de3bfc0      /* i.e. `save %sp,-64,%sp' */#define CALL    0x40000000#define NOP     0x01000000		pltgot[0] = SAVE;		pltgot[1] = CALL |		    ((Elf_Addr)&_dl_bind_start - (Elf_Addr)&pltgot[1]) >> 2;		pltgot[2] = NOP;		pltgot[3] = (Elf_Addr) object;		__asm __volatile("iflush %0+8"  : : "r" (pltgot));		__asm __volatile("iflush %0+4"  : : "r" (pltgot));		__asm __volatile("iflush %0+0"  : : "r" (pltgot));		/*		 * iflush requires 5 subsequent cycles to be sure all copies		 * are flushed from the CPU and the icache.		 */		__asm __volatile("nop;nop;nop;nop;nop");	}	object->got_addr = NULL;	object->got_size = 0;	this = NULL;	ooff = _dl_find_symbol("__got_start", object, &this,	    SYM_SEARCH_SELF|SYM_NOWARNNOTFOUND|SYM_PLT, 0, object);	if (this != NULL)		object->got_addr = ooff + this->st_value;	this = NULL;	ooff = _dl_find_symbol("__got_end", object, &this,	    SYM_SEARCH_SELF|SYM_NOWARNNOTFOUND|SYM_PLT, 0, object);	if (this != NULL)		object->got_size = ooff + this->st_value  - object->got_addr;	plt_addr = 0;	object->plt_size = 0;	this = NULL;	ooff = _dl_find_symbol("__plt_start", object, &this,	    SYM_SEARCH_SELF|SYM_NOWARNNOTFOUND|SYM_PLT, 0, object);	if (this != NULL)		plt_addr = ooff + this->st_value;	this = NULL;	ooff = _dl_find_symbol("__plt_end", object, &this,	    SYM_SEARCH_SELF|SYM_NOWARNNOTFOUND|SYM_PLT, 0, object);	if (this != NULL)		object->plt_size = ooff + this->st_value  - plt_addr;	if (object->got_addr == NULL)		object->got_start = NULL;	else {		object->got_start = ELF_TRUNC(object->got_addr, _dl_pagesz);		object->got_size += object->got_addr - object->got_start;		object->got_size = ELF_ROUND(object->got_size, _dl_pagesz);	}	if (plt_addr == NULL)		object->plt_start = NULL;	else {		object->plt_start = ELF_TRUNC(plt_addr, _dl_pagesz);		object->plt_size += plt_addr - object->plt_start;		object->plt_size = ELF_ROUND(object->plt_size, _dl_pagesz);	}	if (object->obj_type == OBJTYPE_LDR || !lazy || pltgot == NULL) {		_dl_md_reloc(object, DT_JMPREL, DT_PLTRELSZ);		return;	}	if (object->got_size != 0)		_dl_mprotect((void*)object->got_addr, object->got_size,		    PROT_READ);	if (object->plt_size != 0)		_dl_mprotect((void*)object->plt_start, object->plt_size,		    PROT_READ|PROT_EXEC);}