const char *shstrtab; int idx; ElfW(Shdr) *symtab_entry;
load_shobj (const char *name){  struct link_map *map = NULL;  struct shobj *result;  ElfW(Addr) mapstart = ~((ElfW(Addr)) 0);  ElfW(Addr) mapend = 0;  const ElfW(Phdr) *ph;  size_t textsize;  unsigned int log_hashfraction;  ElfW(Ehdr) *ehdr;  int fd;  ElfW(Shdr) *shdr;  void *ptr;  size_t pagesize = getpagesize ();  const char *shstrtab;  int idx;  ElfW(Shdr) *symtab_entry;  /* Since we use dlopen() we must be prepared to work around the sometimes     strange lookup rules for the shared objects.  If we have a file foo.so     in the current directory and the user specfies foo.so on the command     line (without specifying a directory) we should load the file in the     current directory even if a normal dlopen() call would read the other     file.  We do this by adding a directory portion to the name.  */  if (strchr (name, '/') == NULL)    {      char *load_name = (char *) alloca (strlen (name) + 3);      stpcpy (stpcpy (load_name, "./"), name);      map = (struct link_map *) dlopen (load_name, RTLD_LAZY | __RTLD_SPROF);    }