struct link_map *l = (struct link_map *) (g1 & ~(ELF_MIPS_GNU_GOT1_MASK|ELF_MIPS_GNU_GOT1_OK));
struct link_map *l = (struct link_map *) (g1 & ~ELF_MIPS_GNU_GOT1_MASK);
elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc){  extern int _dl_mips_gnu_objects;  /* got[1] is reserved to keep its link map address for the shared     object generated by the gnu linker.  If all are such objects, we     can find the link map from current GPREG simply.  If not so, get     the link map for caller's object containing STUB_PC.  */  if (_dl_mips_gnu_objects)    {      ElfW(Addr) *got = elf_mips_got_from_gpreg (gpreg);      ElfW(Word) g1;      g1 = ((ElfW(Word) *) got)[1];      if ((g1 & ELF_MIPS_GNU_GOT1_MASK) != 0)	{	  struct link_map *l = (struct link_map *)		(g1 & ~(ELF_MIPS_GNU_GOT1_MASK|ELF_MIPS_GNU_GOT1_OK));	  ElfW(Addr) base, limit;	  const ElfW(Phdr) *p = l->l_phdr;	  ElfW(Half) this, nent = l->l_phnum;	  /* For the common case of a stub being called from the containing	     object, STUB_PC will point to somewhere within the object that	     is described by the link map fetched via got[1].  Otherwise we	     have to scan all maps.  */	  for (this = 0; this < nent; this++)	    {	      if (p[this].p_type == PT_LOAD)		{		  base = p[this].p_vaddr + l->l_addr;		  limit = base + p[this].p_memsz;		  if (stub_pc >= base && stub_pc < limit)		    return l;		}	    }	}    }    {      struct link_map *l = _dl_loaded;      while (l)	{	  ElfW(Addr) base, limit;	  const ElfW(Phdr) *p = l->l_phdr;	  ElfW(Half) this, nent = l->l_phnum;	  for (this = 0; this < nent; ++this)	    {	      if (p[this].p_type == PT_LOAD)		{		  base = p[this].p_vaddr + l->l_addr;		  limit = base + p[this].p_memsz;		  if (stub_pc >= base && stub_pc < limit)		    return l;		}	    }	  l = l->l_next;	}    }  _dl_signal_error (0, NULL, "cannot find runtime link map");  return NULL;}