lose (int code, int fd, const char *name, char *realname, struct link_map *l,
      const char *msg)
{
  /* The use of `alloca' here looks ridiculous but it helps.  The goal
     is to avoid the function from being inlined.  There is no official
     way to do this so we use this trick.  gcc never inlines functions
     which use `alloca'.  */
  int *a = alloca (sizeof (int));
  a[0] = fd;
  (void) __close (a[0]);
  if (l != NULL)
    {
      /* Remove the stillborn object from the list and free it.  */
      if (l->l_prev)
	l->l_prev->l_next = l->l_next;
      if (l->l_next)
	l->l_next->l_prev = l->l_prev;
      free (l);
    }
  free (realname);
  _dl_signal_error (code, name, msg);
}
lose (int code, int fd, const char *name, char *realname, struct link_map *l,
      const char *msg)
{
   
  int *a = alloca (sizeof (int));
  a[0] = fd;
  (void) __close (a[0]);
  if (l != NULL)
    {
       
      if (l->l_prev)
	l->l_prev->l_next = l->l_next;
      if (l->l_next)
	l->l_next->l_prev = l->l_prev;
      free (l);
    }
  free (realname);
  _dl_signal_error (code, name, msg);
}