diff options
author | Alan Modra <amodra@gmail.com> | 2002-06-21 02:34:38 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2002-06-21 02:34:38 +0000 |
commit | 9710509e6bcb59af4b3f7852d27e652b6c252ea1 (patch) | |
tree | f1cf1bc9d4a6ff53a935eb6103a0cc12533c2290 | |
parent | 87c4a0399d1fe2d5b1127c207bc7b3facd0c3233 (diff) | |
download | fsf-binutils-gdb-9710509e6bcb59af4b3f7852d27e652b6c252ea1.zip fsf-binutils-gdb-9710509e6bcb59af4b3f7852d27e652b6c252ea1.tar.gz fsf-binutils-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/ChangeLog | 8 | ||||
-rw-r--r-- | binutils/config.in | 3 | ||||
-rwxr-xr-x | binutils/configure | 2 | ||||
-rw-r--r-- | binutils/configure.in | 2 | ||||
-rw-r--r-- | binutils/nm.c | 28 |
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|", |