_dl_profile_map = l;
GL(dl_profile_map) = l;
elf_machine_runtime_setup (struct link_map *l, int lazy, int profile){  extern void _dl_runtime_resolve (void);  extern void _dl_runtime_profile (void);  Elf32_Addr jmprel = D_PTR(l, l_info[DT_JMPREL]);  if (lazy && jmprel)    {      Elf32_Addr *got = NULL;      Elf32_Addr l_addr;      Elf32_Addr end_jmprel;      Elf32_Addr iplt;      /* Relocate all the PLT slots.  */      l_addr = l->l_addr;      end_jmprel = jmprel + l->l_info[DT_PLTRELSZ]->d_un.d_val;      for (iplt = jmprel; iplt < end_jmprel; iplt += sizeof (Elf32_Rela))	{	  const Elf32_Rela *reloc;	  Elf32_Word r_type;	  Elf32_Word r_sym;	  struct hppa_fptr *fptr;	  reloc = (const Elf32_Rela *) iplt;	  r_type = ELF32_R_TYPE (reloc->r_info);	  r_sym = ELF32_R_SYM (reloc->r_info);	  if (__builtin_expect (r_type == R_PARISC_IPLT, 1))	    {	      fptr = (struct hppa_fptr *) (reloc->r_offset + l_addr);	      if (r_sym != 0)		{		  /* Relocate the pointer to the stub.  */		  fptr->func += l_addr;		  /* Instead of the LTP value, we put the reloc offset		     here.  The trampoline code will load the proper		     LTP and pass the reloc offset to the fixup		     function.  */		  fptr->gp = iplt - jmprel;		  if (!got)		    {		      static union {			unsigned char c[8];			Elf32_Addr i[2];		      } sig = {{0x00,0xc0,0xff,0xee, 0xde,0xad,0xbe,0xef}};		      /* Find our .got section.  It's right after the			 stub.  */		      got = (Elf32_Addr *) (fptr->func + GOT_FROM_PLT_STUB);		      /* Sanity check to see if the address we are                         going to check below is within a reasonable                         approximation of the bounds of the PLT (or,                         at least, is at an address that won't fault                         on read).  Then check for the magic signature                         above. */		      if (fptr->func < (Elf32_Addr) fptr + sizeof(*fptr))			  return 0;		      if (fptr->func >			  ((Elf32_Addr) fptr			   + SIZEOF_PLT_STUB			   + ((l->l_info[DT_PLTRELSZ]->d_un.d_val / sizeof (Elf32_Rela))			      * 8)))			return 0;		      if (got[-2] != sig.i[0] || got[-1] != sig.i[1])			return 0; /* No lazy linking for you! */		    }		}	      else		{		  /* Relocate this *ABS* entry.  */		  fptr->func = reloc->r_addend + l_addr;		  fptr->gp = D_PTR (l, l_info[DT_PLTGOT]);		}	    }	  else if (__builtin_expect (r_type != R_PARISC_NONE, 0))	    _dl_reloc_bad_type (l, r_type, 1);	}      if (got)	{	  register Elf32_Addr ltp __asm__ ("%r19");	  /* Identify this shared object. */	  got[1] = (Elf32_Addr) l;	  /* This function will be called to perform the relocation. */	  if (__builtin_expect (!profile, 1))	    got[-2] =	      (Elf32_Addr) ((struct hppa_fptr *)			    ((unsigned long) &_dl_runtime_resolve & ~3))->func;	  else	    {	      if (_dl_name_match_p (_dl_profile, l))		{		  /* This is the object we are looking for.  Say that		     we really want profiling and the timers are		     started.  */		  _dl_profile_map = l;		}	      got[-2] =		(Elf32_Addr) ((struct hppa_fptr *)			      ((unsigned long) &_dl_runtime_profile & ~3))->func;	    }	  got[-1] = ltp;	}    }  return lazy;}