_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)    {      /* The GOT entries for functions in the PLT have not yet been	 filled in.  Their initial contents will arrange when called	 to push an offset into the .rela.plt section, push	 _GLOBAL_OFFSET_TABLE_[1], and then jump to	 _GLOBAL_OFFSET_TABLE_[2].  */      got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);      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))	    {	      /* This is the object we are looking for.  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;}