[binutils-gdb] Support objcopy --remove-section=.relaFOO

Alan Modra amodra@sourceware.org
Mon Sep 17 14:09:00 GMT 2018


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=c12d9fa2afe7abcbe407a00e15719e1a1350c2a7

commit c12d9fa2afe7abcbe407a00e15719e1a1350c2a7
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Sep 12 14:57:48 2018 +0930

    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.

Diff:
---
 binutils/ChangeLog                                 | 12 ++++++++++++
 binutils/objcopy.c                                 | 15 +++++++++------
 binutils/testsuite/binutils-all/remove-relocs-01.d |  1 +
 binutils/testsuite/binutils-all/remove-relocs-04.d |  1 +
 binutils/testsuite/binutils-all/remove-relocs-05.d |  1 +
 binutils/testsuite/binutils-all/remove-relocs-06.d |  1 +
 binutils/testsuite/binutils-all/remove-relocs-07.d |  6 ++++++
 binutils/testsuite/binutils-all/remove-relocs-07.s |  2 ++
 binutils/testsuite/binutils-all/remove-relocs-08.d |  6 ++++++
 9 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index ee6defc..5207db8 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 8e06cd2..2e40b42 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 9cd0bfe..702747b 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 99f5a61..1b8eab3 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 e2166c9..a429182 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 09fed58..5214bc7 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 0000000..c69df8d
--- /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 0000000..1e95375
--- /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 0000000..f54462d
--- /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\.



More information about the Binutils-cvs mailing list