diff --git a/bfd/archive.c b/bfd/archive.c index 6fad826..15eea03 100644 --- a/bfd/archive.c +++ b/bfd/archive.c @@ -2196,6 +2196,7 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength) if ((flags & BSF_GLOBAL || flags & BSF_WEAK || flags & BSF_INDIRECT + || flags & BSF_GNU_UNIQUE || bfd_is_com_section (sec)) && ! bfd_is_und_section (sec)) { diff --git a/binutils/testsuite/binutils-all/ar.exp b/binutils/testsuite/binutils-all/ar.exp index 3ad868b..7d224eb 100644 --- a/binutils/testsuite/binutils-all/ar.exp +++ b/binutils/testsuite/binutils-all/ar.exp @@ -1,4 +1,4 @@ -# Copyright 1995, 1997, 2002, 2004, 2007, 2008, 2009 +# Copyright 1995, 1997, 2002, 2004, 2007, 2008, 2009, 2010 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -399,6 +399,45 @@ proc deterministic_archive { } { pass $testname } +proc unique_symbol { } { + global AR + global AS + global NM + global srcdir + global subdir + + set testname "ar unique symbol in archive" + + if ![binutils_assemble $srcdir/$subdir/unique.s tmpdir/unique.o] { + unresolved $testname + } + + if [is_remote host] { + set archive artest.a + set objfile [remote_download host tmpdir/unique.o] + remote_file host delete $archive + } else { + set archive tmpdir/artest.a + set objfile tmpdir/unique.o + } + + remote_file build delete tmpdir/artest.a + + set got [binutils_run $AR "-s -r -c $archive ${objfile}"] + if ![string match "" $got] { + fail $testname + return + } + + set got [binutils_run $NM "--print-armap $archive"] + if ![string match "*foo in *unique.o*" $got] { + fail $testname + return + } + + pass $testname +} + # Run the tests. long_filenames @@ -407,3 +446,4 @@ thin_archive thin_archive_with_nested argument_parsing deterministic_archive +unique_symbol