*_dl_global_scope_end = NULL;
elf_machine_got_rel (struct link_map *map, int lazy){  ElfW(Addr) *got;  ElfW(Sym) *sym;  int i, n;  struct link_map **scope;  const char *strtab    = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);#define RESOLVE_GOTSYM(sym) \    ({ \      const ElfW(Sym) *ref = sym; \      ElfW(Addr) sym_loadaddr; \      sym_loadaddr = _dl_lookup_symbol (strtab + sym->st_name, &ref, scope, \					map->l_name, ELF_MACHINE_RELOC_NOPLT);\      (ref)? sym_loadaddr + ref->st_value: 0; \    })  got = (ElfW(Addr) *) ((void *) map->l_addr			+ map->l_info[DT_PLTGOT]->d_un.d_ptr);  /* got[0] is reserved. got[1] is also reserved for the dynamic object     generated by gnu ld. Skip these reserved entries from relocation.  */  i = (got[1] & ELF_MIPS_GNU_GOT1_MASK)? 2: 1;  n = map->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val;  /* Add the run-time display to all local got entries. */  while (i < n)    got[i++] += map->l_addr;  /* Set scope.  */  scope = _dl_object_relocation_scope (map);  /* Handle global got entries. */  got += n;  sym = (ElfW(Sym) *) ((void *) map->l_addr		       + map->l_info[DT_SYMTAB]->d_un.d_ptr);  sym += map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val;  i = (map->l_info[DT_MIPS (SYMTABNO)]->d_un.d_val       - map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val);  while (i--)    {      if (sym->st_shndx == SHN_UNDEF)	{	  if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC)	    {	      if (sym->st_value && lazy)		*got = sym->st_value + map->l_addr;	      else		*got = RESOLVE_GOTSYM (sym);	    }	  else /* if (*got == 0 || *got == QS) */	    *got = RESOLVE_GOTSYM (sym);	}      else if (sym->st_shndx == SHN_COMMON)	*got = RESOLVE_GOTSYM (sym);      else if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC	       && *got != sym->st_value	       && lazy)	*got += map->l_addr;      else if (ELFW(ST_TYPE) (sym->st_info) == STT_SECTION)	{	  if (sym->st_other == 0)	    *got += map->l_addr;	}      else	*got = RESOLVE_GOTSYM (sym);      got++;      sym++;    }#undef RESOLVE_GOTSYM  *_dl_global_scope_end = NULL;  return;}