return 0;
if (an[0] == '.' && bn[0] != '.') return 1; if (an[0] != '.' && bn[0] == '.') return -1;   return strcmp (an, bn);
compare_symbols (ap, bp)     const PTR ap;     const PTR bp;{  const asymbol *a = *(const asymbol **)ap;  const asymbol *b = *(const asymbol **)bp;  const char *an, *bn;  size_t anl, bnl;  boolean af, bf;  flagword aflags, bflags;  if (bfd_asymbol_value (a) > bfd_asymbol_value (b))    return 1;  else if (bfd_asymbol_value (a) < bfd_asymbol_value (b))    return -1;  if (a->section > b->section)    return 1;  else if (a->section < b->section)    return -1;  an = bfd_asymbol_name (a);  bn = bfd_asymbol_name (b);  anl = strlen (an);  bnl = strlen (bn);  /* The symbols gnu_compiled and gcc2_compiled convey no real     information, so put them after other symbols with the same value.  */  af = (strstr (an, "gnu_compiled") != NULL	|| strstr (an, "gcc2_compiled") != NULL);  bf = (strstr (bn, "gnu_compiled") != NULL	|| strstr (bn, "gcc2_compiled") != NULL);  if (af && ! bf)    return 1;  if (! af && bf)    return -1;  /* We use a heuristic for the file name, to try to sort it after     more useful symbols.  It may not work on non Unix systems, but it     doesn't really matter; the only difference is precisely which     symbol names get printed.  */#define file_symbol(s, sn, snl)			\  (((s)->flags & BSF_FILE) != 0			\   || ((sn)[(snl) - 2] == '.'			\       && ((sn)[(snl) - 1] == 'o'		\	   || (sn)[(snl) - 1] == 'a')))  af = file_symbol (a, an, anl);  bf = file_symbol (b, bn, bnl);  if (af && ! bf)    return 1;  if (! af && bf)    return -1;  /* Finally, try to sort global symbols before local symbols before     debugging symbols.  */  aflags = a->flags;  bflags = b->flags;  if ((aflags & BSF_DEBUGGING) != (bflags & BSF_DEBUGGING))    {      if ((aflags & BSF_DEBUGGING) != 0)	return 1;      else	return -1;    }  if ((aflags & BSF_LOCAL) != (bflags & BSF_LOCAL))    {      if ((aflags & BSF_LOCAL) != 0)	return 1;      else	return -1;    }  return 0;}