diff options
-rw-r--r-- | binutils/ChangeLog | 5 | ||||
-rw-r--r-- | binutils/objcopy.c | 8 | ||||
-rw-r--r-- | binutils/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/objcopy.exp | 13 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/symbols-1.d | 14 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/symbols-2.d | 14 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/symbols-3.d | 14 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/symbols-4.d | 14 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/symbols.s | 14 |
9 files changed, 102 insertions, 4 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 2e1c211..dde51c2 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2015-08-07 Andrew Burgess <andrew.burgess@embecosm.com> + + * objcopy.c (is_specified_symbol_predicate): Don't stop at first + match. Non-match rules set found to FALSE. + 2015-08-06 Yaakov Selkowitz <yselkowi@redhat.com> * configure: Regenerate. diff --git a/binutils/objcopy.c b/binutils/objcopy.c index bb6ca44..7ac8661 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -985,15 +985,15 @@ is_specified_symbol_predicate (void **slot, void *data) if (! fnmatch (slot_name, d->name, 0)) { d->found = TRUE; - /* Stop traversal. */ - return 0; + /* Continue traversal, there might be a non-match rule. */ + return 1; } } else { - if (fnmatch (slot_name + 1, d->name, 0)) + if (! fnmatch (slot_name + 1, d->name, 0)) { - d->found = TRUE; + d->found = FALSE; /* Stop traversal. */ return 0; } diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog index 9255fb9..8f8f3c2 100644 --- a/binutils/testsuite/ChangeLog +++ b/binutils/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2015-08-07 Andrew Burgess <andrew.burgess@embecosm.com> + + * binutils-all/objcopy.exp: Run new symbol tests. + (objcopy_test_symbol_manipulation): New function. + * binutils-all/symbols-1.d: New file. + * binutils-all/symbols-2.d: New file. + * binutils-all/symbols-3.d: New file. + * binutils-all/symbols-4.d: New file. + * binutils-all/symbols.s: New file. + 2015-08-05 Nick Clifton <nickc@redhat.com> * binutils-all/objcopy.exp (keep_debug_symbols_and_check_links): diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index 01d2e17..75514e4 100644 --- a/binutils/testsuite/binutils-all/objcopy.exp +++ b/binutils/testsuite/binutils-all/objcopy.exp @@ -987,6 +987,18 @@ proc objcopy_test_readelf {testname srcfile} { } } +proc objcopy_test_symbol_manipulation {} { + global srcdir + global subdir + + set test_list [lsort [glob -nocomplain $srcdir/$subdir/symbols-*.d]] + foreach t $test_list { + # We need to strip the ".d", but can leave the dirname. + verbose [file rootname $t] + run_dump_test [file rootname $t] + } +} + # ia64 specific tests if { ([istarget "ia64-*-elf*"] || [istarget "ia64-*-linux*"]) } { @@ -995,6 +1007,7 @@ if { ([istarget "ia64-*-elf*"] # ELF specific tests if [is_elf_format] { + objcopy_test_symbol_manipulation objcopy_test "ELF unknown section type" unknown.s objcopy_test_readelf "ELF group" group.s objcopy_test_readelf "ELF group" group-2.s diff --git a/binutils/testsuite/binutils-all/symbols-1.d b/binutils/testsuite/binutils-all/symbols-1.d new file mode 100644 index 0000000..41314bd --- /dev/null +++ b/binutils/testsuite/binutils-all/symbols-1.d @@ -0,0 +1,14 @@ +#name: localize 'fo*' but not 'foo' +#PROG: objcopy +#objcopy: -w -L !foo -L fo* +#source: symbols.s +#DUMPPROG: nm +#nm: -n + +0+ D bar +0+ d foa +0+ d fob +0+ D foo +0+ d foo1 +0+ d foo2 + diff --git a/binutils/testsuite/binutils-all/symbols-2.d b/binutils/testsuite/binutils-all/symbols-2.d new file mode 100644 index 0000000..99950aa --- /dev/null +++ b/binutils/testsuite/binutils-all/symbols-2.d @@ -0,0 +1,14 @@ +#name: weaken 'fo*' but not 'foo' +#PROG: objcopy +#objcopy: -w -W !foo -W fo* +#source: symbols.s +#DUMPPROG: nm +#nm: -n + +0+ D bar +0+ W foa +0+ W fob +0+ D foo +0+ W foo1 +0+ W foo2 + diff --git a/binutils/testsuite/binutils-all/symbols-3.d b/binutils/testsuite/binutils-all/symbols-3.d new file mode 100644 index 0000000..9838e67 --- /dev/null +++ b/binutils/testsuite/binutils-all/symbols-3.d @@ -0,0 +1,14 @@ +#name: weaken 'fo*' but not 'foo', localize foo. +#PROG: objcopy +#objcopy: -w -W !foo -W fo* -L foo +#source: symbols.s +#DUMPPROG: nm +#nm: -n + +0+ D bar +0+ W foa +0+ W fob +0+ d foo +0+ W foo1 +0+ W foo2 + diff --git a/binutils/testsuite/binutils-all/symbols-4.d b/binutils/testsuite/binutils-all/symbols-4.d new file mode 100644 index 0000000..bb984fd --- /dev/null +++ b/binutils/testsuite/binutils-all/symbols-4.d @@ -0,0 +1,14 @@ +#name: weaken '*' but not 'foo' or 'bar' +#PROG: objcopy +#objcopy: -w -W !foo -W !bar -W * +#source: symbols.s +#DUMPPROG: nm +#nm: -n + +0+ D bar +0+ W foa +0+ W fob +0+ D foo +0+ W foo1 +0+ W foo2 + diff --git a/binutils/testsuite/binutils-all/symbols.s b/binutils/testsuite/binutils-all/symbols.s new file mode 100644 index 0000000..0d2c62e --- /dev/null +++ b/binutils/testsuite/binutils-all/symbols.s @@ -0,0 +1,14 @@ + .section ".data", "aw" + .global foo + .global foo1 + .global foo2 + .global foa + .global fob + .global bar +foo: +foo1: +foo2: +foa: +fob: +bar: + .word 0x0 |