aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binutils/ChangeLog5
-rw-r--r--binutils/objcopy.c8
-rw-r--r--binutils/testsuite/ChangeLog10
-rw-r--r--binutils/testsuite/binutils-all/objcopy.exp13
-rw-r--r--binutils/testsuite/binutils-all/symbols-1.d14
-rw-r--r--binutils/testsuite/binutils-all/symbols-2.d14
-rw-r--r--binutils/testsuite/binutils-all/symbols-3.d14
-rw-r--r--binutils/testsuite/binutils-all/symbols-4.d14
-rw-r--r--binutils/testsuite/binutils-all/symbols.s14
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