PR binutils/12753
authorNick Clifton <nickc@redhat.com>
Wed, 18 May 2011 16:35:03 +0000 (16:35 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 18 May 2011 16:35:03 +0000 (16:35 +0000)
* nm.c (filter_symbols): Treat unique symbols as global symbols.
* doc/binutils.texi (nm): Mention that some lowercase letters
actually indicate global symbols.

* lib/utils-lib.exp (run_dump_test): Allow nm as a program.
* binutils-all/nm.exp: Test running "nm -g" on an object file
containing a unique symbol.

binutils/ChangeLog
binutils/doc/binutils.texi
binutils/nm.c
binutils/testsuite/ChangeLog
binutils/testsuite/binutils-all/nm.exp
binutils/testsuite/lib/utils-lib.exp

index 8aefa2a..83a59c7 100644 (file)
@@ -1,3 +1,10 @@
+2011-05-18  Nick Clifton  <nickc@redhat.com>
+
+       PR binutils/12753
+       * nm.c (filter_symbols): Treat unique symbols as global symbols.
+       * doc/binutils.texi (nm): Mention that some lowercase letters
+       actually indicate global symbols.
+
 2011-05-15  Tristan Gingold  <gingold@adacore.com>
 
        * od-xcoff.c: New file.
index fb3948f..64333cf 100644 (file)
@@ -724,7 +724,9 @@ hexadecimal by default.
 @item
 The symbol type.  At least the following types are used; others are, as
 well, depending on the object file format.  If lowercase, the symbol is
-local; if uppercase, the symbol is global (external).
+usually local; if uppercase, the symbol is global (external).  There
+are however a few lowercase symbols that are shown for special global
+symbols (@code{u}, @code{v} and @code{w}).
 
 @c Some more detail on exactly what these symbol types are used for
 @c would be nice.
index 2c099aa..2fc13b4 100644 (file)
@@ -436,6 +436,8 @@ filter_symbols (bfd *abfd, bfd_boolean is_dynamic, void *minisyms,
       else if (external_only)
        keep = ((sym->flags & BSF_GLOBAL) != 0
                || (sym->flags & BSF_WEAK) != 0
+               /* PR binutls/12753: Unique symbols are global too.  */
+               || (sym->flags & BSF_GNU_UNIQUE) != 0
                || bfd_is_und_section (sym->section)
                || bfd_is_com_section (sym->section));
       else
index 758e574..94dcdad 100644 (file)
@@ -1,3 +1,10 @@
+2011-05-18  Nick Clifton  <nickc@redhat.com>
+
+       PR binutils/12753
+       * lib/utils-lib.exp (run_dump_test): Allow nm as a program.
+       * binutils-all/nm.exp: Test running "nm -g" on an object file
+       containing a unique symbol.
+
 2011-05-13  Alan Modra  <amodra@gmail.com>
 
        * binutils-all/objcopy.exp objcopy_text): Remove xfails for sh-rtems
index 67d0cbd..685794d 100644 (file)
@@ -98,6 +98,41 @@ if {![info exists vars(text_symbol)] \
     pass "nm -g"
 }
 
+if [is_elf_format] {
+    # PR binutils/12753
+    # Test nm -g on a unique global symbol.
+
+    # Only some targets support unique symbols.
+    if {([istarget "i?86-*-*"]
+        || [istarget "x86_64-*-*"]
+        || [istarget "arm-*-*"]
+        || [istarget "powerpc*-*-*"]
+        || [istarget "sparc*-*-*"])} then {
+
+       if {![binutils_assemble $srcdir/$subdir/unique.s tmpdir/unique.o]} then {
+           fail "nm -g on unique symbols (assembling)"
+       } else {
+           if [is_remote host] {
+               set tmpfile [remote_download host tmpdir/unique.o]
+           } else {
+               set tmpfile tmpdir/unique.o
+           }
+       
+           set got [binutils_run $NM "$NMFLAGS -g $tmpfile"]
+
+           if [regexp "u foo" $got] then {
+               pass "nm -g on unique symbols"
+           } else {
+               fail "nm -g on unique symbols"
+           }
+
+           if { $verbose < 1 } {
+               remote_file host delete "tmpdir/unique.o"
+           }
+       }
+   }
+}
+
 # Test nm -P
 
 # This test does not work correctly on ECOFF targets, because ECOFF
index 72e368c..b96043b 100644 (file)
@@ -354,6 +354,7 @@ proc run_dump_test { name {extra_options {}} } {
        }
        strings { set program strings }
        elfedit { set program elfedit }
+       nm      { set program nm }
        default {
            perror "unrecognized program option $opts(PROG) in $file.d"
            unresolved $testname