_dl_profile_map = l;
GL(dl_profile_map) = l;
elf_machine_runtime_setup (struct link_map *l, int lazy, int profile){  Elf32_Addr *got;  extern void _dl_runtime_resolve (Elf32_Word);  extern void _dl_runtime_profile (Elf32_Word);  if (l->l_info[DT_JMPREL] && lazy)    {      /* patb: this is different than i386 */      /* The GOT entries for functions in the PLT have not yet been filled	 in.  Their initial contents will arrange when called to push an	 index into the .got section, load ip with &_GLOBAL_OFFSET_TABLE_[3],	 and then jump to _GLOBAL_OFFSET_TABLE[2].  */      got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);      /* If a library is prelinked but we have to relocate anyway,	 we have to be able to undo the prelinking of .got.plt.	 The prelinker saved us here address of .plt.  */      if (got[1])	l->l_mach.plt = got[1] + l->l_addr;      got[1] = (Elf32_Addr) l;	/* Identify this shared object.  */      /* The got[2] entry contains the address of a function which gets	 called to get the address of a so far unresolved function and	 jump to it.  The profiling extension of the dynamic linker allows	 to intercept the calls to collect information.  In this case we	 don't store the address in the GOT so that all future calls also	 end in this function.  */      if (profile)	{	  got[2] = (Elf32_Addr) &_dl_runtime_profile;	  if (_dl_name_match_p (_dl_profile, l))	    /* Say that we really want profiling and the timers are	       started.  */	    _dl_profile_map = l;	}      else	/* This function will get called to fix up the GOT entry indicated by	   the offset on the stack, and then jump to the resolved address.  */	got[2] = (Elf32_Addr) &_dl_runtime_resolve;    }  return lazy;}