aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2002-06-21 02:34:38 +0000
committerAlan Modra <amodra@gmail.com>2002-06-21 02:34:38 +0000
commit9710509e6bcb59af4b3f7852d27e652b6c252ea1 (patch)
treef1cf1bc9d4a6ff53a935eb6103a0cc12533c2290
parent87c4a0399d1fe2d5b1127c207bc7b3facd0c3233 (diff)
downloadgdb-9710509e6bcb59af4b3f7852d27e652b6c252ea1.zip
gdb-9710509e6bcb59af4b3f7852d27e652b6c252ea1.tar.gz
gdb-9710509e6bcb59af4b3f7852d27e652b6c252ea1.tar.bz2
* configure.in: Check for strcoll.
* configure: Regenerate. * config.in: Regenerate. * nm.c (main): Set locale for LC_COLLATE category. (non_numeric_forward): Use strcoll if available.
-rw-r--r--binutils/ChangeLog8
-rw-r--r--binutils/config.in3
-rwxr-xr-xbinutils/configure2
-rw-r--r--binutils/configure.in2
-rw-r--r--binutils/nm.c28
5 files changed, 35 insertions, 8 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index f606846..920a9a0 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,11 @@
+2002-06-21 Mitsru Chinen <chinen@jp.ibm.com>
+
+ * configure.in: Check for strcoll.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * nm.c (main): Set locale for LC_COLLATE category.
+ (non_numeric_forward): Use strcoll if available.
+
2002-06-20 Dave Brolley <brolley@redhat.com>
* MAINTAINERS: Add self as fr30 and frv maintainer.
diff --git a/binutils/config.in b/binutils/config.in
index 02ec0a7..d404762 100644
--- a/binutils/config.in
+++ b/binutils/config.in
@@ -97,6 +97,9 @@
/* Define if you have the strchr function. */
#undef HAVE_STRCHR
+/* Define if you have the strcoll function. */
+#undef HAVE_STRCOLL
+
/* Define if you have the utimes function. */
#undef HAVE_UTIMES
diff --git a/binutils/configure b/binutils/configure
index ea51d7f..fc59b1d 100755
--- a/binutils/configure
+++ b/binutils/configure
@@ -4902,7 +4902,7 @@ EOF
fi
-for ac_func in sbrk utimes setmode getc_unlocked
+for ac_func in sbrk utimes setmode getc_unlocked strcoll
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:4909: checking for $ac_func" >&5
diff --git a/binutils/configure.in b/binutils/configure.in
index 8c6ecb8..6363141 100644
--- a/binutils/configure.in
+++ b/binutils/configure.in
@@ -100,7 +100,7 @@ AC_SUBST(DEMANGLER_NAME)
AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h)
AC_HEADER_SYS_WAIT
AC_FUNC_ALLOCA
-AC_CHECK_FUNCS(sbrk utimes setmode getc_unlocked)
+AC_CHECK_FUNCS(sbrk utimes setmode getc_unlocked strcoll)
# Check whether fopen64 is available and whether _LARGEFILE64_SOURCE
# needs to be defined for it
diff --git a/binutils/nm.c b/binutils/nm.c
index 79658fe..306f2c6 100644
--- a/binutils/nm.c
+++ b/binutils/nm.c
@@ -51,7 +51,7 @@ struct get_relocs_info
asymbol **syms;
};
-struct extended_symbol_info
+struct extended_symbol_info
{
symbol_info *sinfo;
bfd_vma ssize;
@@ -355,6 +355,7 @@ main (argc, argv)
#endif
#if defined (HAVE_SETLOCALE)
setlocale (LC_CTYPE, "");
+ setlocale (LC_COLLATE, "");
#endif
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
@@ -705,8 +706,23 @@ non_numeric_forward (P_x, P_y)
xn = bfd_asymbol_name (x);
yn = bfd_asymbol_name (y);
- return ((xn == NULL) ? ((yn == NULL) ? 0 : -1) :
- ((yn == NULL) ? 1 : strcmp (xn, yn)));
+ if (yn == NULL)
+ return xn != NULL;
+ if (xn == NULL)
+ return -1;
+
+#ifdef HAVE_STRCOLL
+ /* Solaris 2.5 has a bug in strcoll.
+ strcoll returns invalid values when confronted with empty strings. */
+ if (*yn == '\0')
+ return *xn != '\0';
+ if (*xn == '\0')
+ return -1;
+
+ return strcoll (xn, yn);
+#else
+ return strcmp (xn, yn);
+#endif
}
static int
@@ -886,7 +902,7 @@ sort_symbols_by_size (abfd, dynamic, minisyms, symcount, size, symsizesp)
sec = bfd_get_section (sym);
- if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
sz = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
else if (bfd_is_com_section (sec))
sz = sym->value;
@@ -1186,7 +1202,7 @@ print_symbol (abfd, sym, ssize, archive_bfd)
bfd_get_symbol_info (abfd, sym, &syminfo);
info.sinfo = &syminfo;
info.ssize = ssize;
- if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
info.elfinfo = (elf_symbol_type *) sym;
else
info.elfinfo = NULL;
@@ -1545,7 +1561,7 @@ print_symbol_info_sysv (info, abfd)
printf ("| |"); /* Line, Section */
}
else
- {
+ {
/* Type, Size, Line, Section */
if (info->elfinfo)
printf ("%18s|",