unsigned long *hwcap;
elf_machine_runtime_setup (struct link_map *l, int lazy, int profile){  Elf32_Addr *plt;  extern void _dl_runtime_resolve (Elf32_Word);  extern void _dl_runtime_profile (Elf32_Word);  if (l->l_info[DT_JMPREL] && lazy)    {      Elf32_Addr rfunc;      /* The entries for functions in the PLT have not yet been filled in.	 Their initial contents will arrange when called to set the high 22	 bits of %g1 with an offset into the .rela.plt section and jump to	 the beginning of the PLT.  */      plt = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);      if (! profile)	rfunc = (Elf32_Addr) &_dl_runtime_resolve;      else	{	  rfunc = (Elf32_Addr) &_dl_runtime_profile;	  if (_dl_name_match_p (GL(dl_profile), l))	    GL(dl_profile_map) = l;	}      /* The beginning of the PLT does:		save %sp, -64, %sp	 pltpc:	call _dl_runtime_resolve		nop		.word MAP         This saves the register window containing the arguments, and the	 PC value (pltpc) implicitly saved in %o7 by the call points near the	 location where we store the link_map pointer for this object.  */      plt[0] = OPCODE_SAVE_SP;      /* Construct PC-relative word address.  */      plt[1] = OPCODE_CALL | ((rfunc - (Elf32_Addr) &plt[1]) >> 2);      plt[2] = OPCODE_NOP;	/* Fill call delay slot.  */      plt[3] = (Elf32_Addr) l;      if (__builtin_expect (l->l_info[VALIDX(DT_GNU_PRELINKED)] != NULL, 0)	  || __builtin_expect (l->l_info [VALIDX (DT_GNU_LIBLISTSZ)] != NULL, 0))	{	  /* Need to reinitialize .plt to undo prelinking.  */	  unsigned long *hwcap;	  int do_flush;	  Elf32_Rela *rela = (Elf32_Rela *) D_PTR (l, l_info[DT_JMPREL]);	  Elf32_Rela *relaend	    = (Elf32_Rela *) ((char *) rela			      + l->l_info[DT_PLTRELSZ]->d_un.d_val);#ifndef SHARED	  weak_extern (_dl_hwcap);#endif	  hwcap = WEAKADDR (GL(dl_hwcap));	  do_flush = (!hwcap || (*hwcap & HWCAP_SPARC_FLUSH));	  /* prelink must ensure there are no R_SPARC_NONE relocs left	     in .rela.plt.  */	  while (rela < relaend)	    {	      *(unsigned int *) rela->r_offset		= OPCODE_SETHI_G1 | (rela->r_offset - (Elf32_Addr) plt);	      *(unsigned int *) (rela->r_offset + 4)		= OPCODE_BA | ((((Elf32_Addr) plt				 - rela->r_offset - 4) >> 2) & 0x3fffff);	      if (do_flush)		{		  __asm __volatile ("flush %0" : : "r"(rela->r_offset));		  __asm __volatile ("flush %0+4" : : "r"(rela->r_offset));		}	      ++rela;	    }	}    }  return lazy;}