summaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2018-09-12 14:57:48 +0930
committerAlan Modra <amodra@gmail.com>2018-09-17 23:31:18 +0930
commitc12d9fa2afe7abcbe407a00e15719e1a1350c2a7 (patch)
treea766a5fd206554f404b2e84ed11582b8c84d0d90 /binutils
parenta4b9568c7ee95891de6f5ba846f2d1aaf61569cd (diff)
downloadbinutils-gdb-c12d9fa2afe7abcbe407a00e15719e1a1350c2a7.tar.gz
Support objcopy --remove-section=.relaFOO
* objcopy.c (handle_remove_section_option): Don't require a dot after .rela and .rel to handle a possible relocation section. * testsuite/binutils-all/remove-relocs-07.s, * testsuite/binutils-all/remove-relocs-07.d, * testsuite/binutils-all/remove-relocs-08.d: New tests. * testsuite/binutils-all/remove-relocs-01.d, * testsuite/binutils-all/remove-relocs-04.d, * testsuite/binutils-all/remove-relocs-05.d, * testsuite/binutils-all/remove-relocs-06.d: Exclude mips64-openbsd.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog12
-rw-r--r--binutils/objcopy.c15
-rw-r--r--binutils/testsuite/binutils-all/remove-relocs-01.d1
-rw-r--r--binutils/testsuite/binutils-all/remove-relocs-04.d1
-rw-r--r--binutils/testsuite/binutils-all/remove-relocs-05.d1
-rw-r--r--binutils/testsuite/binutils-all/remove-relocs-06.d1
-rw-r--r--binutils/testsuite/binutils-all/remove-relocs-07.d6
-rw-r--r--binutils/testsuite/binutils-all/remove-relocs-07.s2
-rw-r--r--binutils/testsuite/binutils-all/remove-relocs-08.d6
9 files changed, 39 insertions, 6 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index ee6defcbf8d..5207db81931 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,5 +1,17 @@
2018-09-17 Alan Modra <amodra@gmail.com>
+ * objcopy.c (handle_remove_section_option): Don't require a dot
+ after .rela and .rel to handle a possible relocation section.
+ * testsuite/binutils-all/remove-relocs-07.s,
+ * testsuite/binutils-all/remove-relocs-07.d,
+ * testsuite/binutils-all/remove-relocs-08.d: New tests.
+ * testsuite/binutils-all/remove-relocs-01.d,
+ * testsuite/binutils-all/remove-relocs-04.d,
+ * testsuite/binutils-all/remove-relocs-05.d,
+ * testsuite/binutils-all/remove-relocs-06.d: Exclude mips64-openbsd.
+
+2018-09-17 Alan Modra <amodra@gmail.com>
+
* testsuite/lib/binutils-common.exp (is_som_format): New proc.
(run_dump_test): Correct target test for alternate .comm syntax.
(get_standard_section_names): Handle som format.
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index 8e06cd284f5..2e40b42da31 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -3943,18 +3943,21 @@ discard_relocations (bfd *ibfd ATTRIBUTE_UNUSED, asection *isection)
/* Wrapper for dealing with --remove-section (-R) command line arguments.
A special case is detected here, if the user asks to remove a relocation
- section (one starting with ".rela." or ".rel.") then this removal must
+ section (one starting with ".rela" or ".rel") then this removal must
be done using a different technique in a relocatable object. */
static void
handle_remove_section_option (const char *section_pattern)
{
- if (strncmp (section_pattern, ".rela.", 6) == 0)
- handle_remove_relocations_option (section_pattern + 5);
- else if (strncmp (section_pattern, ".rel.", 5) == 0)
- handle_remove_relocations_option (section_pattern + 4);
-
find_section_list (section_pattern, TRUE, SECTION_CONTEXT_REMOVE);
+ if (strncmp (section_pattern, ".rel", 4) == 0)
+ {
+ section_pattern += 4;
+ if (*section_pattern == 'a')
+ section_pattern++;
+ if (*section_pattern)
+ handle_remove_relocations_option (section_pattern);
+ }
sections_removed = TRUE;
}
diff --git a/binutils/testsuite/binutils-all/remove-relocs-01.d b/binutils/testsuite/binutils-all/remove-relocs-01.d
index 9cd0bfeb63f..702747bc3f3 100644
--- a/binutils/testsuite/binutils-all/remove-relocs-01.d
+++ b/binutils/testsuite/binutils-all/remove-relocs-01.d
@@ -2,6 +2,7 @@
#source: remove-relocs-01.s
#objcopy: --remove-relocations=.data.relocs.01
#readelf: -r
+#notarget: "mips64*-*-openbsd*"
Relocation section '\.rela?\.data\.relocs\.02' at offset 0x[0-9a-f]+ contains 3 entries:
.*
diff --git a/binutils/testsuite/binutils-all/remove-relocs-04.d b/binutils/testsuite/binutils-all/remove-relocs-04.d
index 99f5a6146eb..1b8eab39a1a 100644
--- a/binutils/testsuite/binutils-all/remove-relocs-04.d
+++ b/binutils/testsuite/binutils-all/remove-relocs-04.d
@@ -2,6 +2,7 @@
#source: remove-relocs-01.s
#objcopy: --remove-relocations=.data.relocs.0\[12\]
#readelf: -r
+#notarget: "mips64*-*-openbsd*"
Relocation section '\.rela?\.data\.relocs\.03' at offset 0x[0-9a-f]+ contains 3 entries:
.*
diff --git a/binutils/testsuite/binutils-all/remove-relocs-05.d b/binutils/testsuite/binutils-all/remove-relocs-05.d
index e2166c93d91..a429182d258 100644
--- a/binutils/testsuite/binutils-all/remove-relocs-05.d
+++ b/binutils/testsuite/binutils-all/remove-relocs-05.d
@@ -2,6 +2,7 @@
#source: remove-relocs-01.s
#objcopy: --remove-section=.rela.data.relocs.01 --remove-section=.rel.data.relocs.01
#readelf: -r
+#notarget: "mips64*-*-openbsd*"
Relocation section '\.rela?\.data\.relocs\.02' at offset 0x[0-9a-f]+ contains 3 entries:
.*
diff --git a/binutils/testsuite/binutils-all/remove-relocs-06.d b/binutils/testsuite/binutils-all/remove-relocs-06.d
index 09fed58bb09..5214bc7297a 100644
--- a/binutils/testsuite/binutils-all/remove-relocs-06.d
+++ b/binutils/testsuite/binutils-all/remove-relocs-06.d
@@ -2,6 +2,7 @@
#source: remove-relocs-01.s
#objcopy: --remove-relocations=.data.relocs.* --remove-relocations=!.data.relocs.02
#readelf: -r
+#notarget: "mips64*-*-openbsd*"
Relocation section '\.rela?\.data\.relocs\.02' at offset 0x[0-9a-f]+ contains 3 entries:
.*
diff --git a/binutils/testsuite/binutils-all/remove-relocs-07.d b/binutils/testsuite/binutils-all/remove-relocs-07.d
new file mode 100644
index 00000000000..c69df8d931c
--- /dev/null
+++ b/binutils/testsuite/binutils-all/remove-relocs-07.d
@@ -0,0 +1,6 @@
+#PROG: objcopy
+#source: remove-relocs-07.s
+#objcopy: --remove-relocations=FOO
+#readelf: -r
+
+There are no relocations in this file\.
diff --git a/binutils/testsuite/binutils-all/remove-relocs-07.s b/binutils/testsuite/binutils-all/remove-relocs-07.s
new file mode 100644
index 00000000000..1e95375cd7c
--- /dev/null
+++ b/binutils/testsuite/binutils-all/remove-relocs-07.s
@@ -0,0 +1,2 @@
+ .section "FOO","aw",%progbits
+ .dc.a x
diff --git a/binutils/testsuite/binutils-all/remove-relocs-08.d b/binutils/testsuite/binutils-all/remove-relocs-08.d
new file mode 100644
index 00000000000..f54462d6454
--- /dev/null
+++ b/binutils/testsuite/binutils-all/remove-relocs-08.d
@@ -0,0 +1,6 @@
+#PROG: objcopy
+#source: remove-relocs-07.s
+#objcopy: --remove-section=.relFOO --remove-section=.relaFOO
+#readelf: -r
+
+There are no relocations in this file\.