unsigned long *hwcap; int do_flush; # ifndef SHARED weak_extern (_dl_hwcap); # endif hwcap = WEAKADDR (GL(dl_hwcap)); do_flush = (!hwcap || (*hwcap & HWCAP_SPARC_FLUSH));
int do_flush = GL(dl_hwcap) & HWCAP_SPARC_FLUSH;
sparc_fixup_plt (const Elf32_Rela *reloc, Elf32_Addr *reloc_addr,		 Elf32_Addr value, int t){  Elf32_Sword disp = value - (Elf32_Addr) reloc_addr;#ifndef RTLD_BOOTSTRAP  /* Note that we don't mask the hwcap here, as the flush is essential to     functionality on those cpu's that implement it.  */  unsigned long *hwcap;  int do_flush;# ifndef SHARED  weak_extern (_dl_hwcap);# endif  hwcap = WEAKADDR (GL(dl_hwcap));  do_flush = (!hwcap || (*hwcap & HWCAP_SPARC_FLUSH));#else  /* Unfortunately, this is necessary, so that we can ensure     ld.so will not execute corrupt PLT entry instructions. */  const int do_flush = 1;#endif  if (0 && disp >= -0x800000 && disp < 0x800000)    {      /* Don't need to worry about thread safety. We're writing just one	 instruction.  */      reloc_addr[0] = OPCODE_BA | ((disp >> 2) & 0x3fffff);      if (do_flush)	__asm __volatile ("flush %0" : : "r"(reloc_addr));    }  else    {      /* For thread safety, write the instructions from the bottom and	 flush before we overwrite the critical "b,a".  This of course	 need not be done during bootstrapping, since there are no threads.	 But we also can't tell if we _can_ use flush, so don't. */      reloc_addr += t;      reloc_addr[1] = OPCODE_JMP_G1 | (value & 0x3ff);      if (do_flush)	__asm __volatile ("flush %0+4" : : "r"(reloc_addr));      reloc_addr[0] = OPCODE_SETHI_G1 | (value >> 10);      if (do_flush)	__asm __volatile ("flush %0" : : "r"(reloc_addr));    }  return value;}