From c12d9fa2afe7abcbe407a00e15719e1a1350c2a7 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 12 Sep 2018 14:57:48 +0930 Subject: [PATCH] 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. --- binutils/ChangeLog | 12 ++++++++++++ binutils/objcopy.c | 15 +++++++++------ .../testsuite/binutils-all/remove-relocs-01.d | 1 + .../testsuite/binutils-all/remove-relocs-04.d | 1 + .../testsuite/binutils-all/remove-relocs-05.d | 1 + .../testsuite/binutils-all/remove-relocs-06.d | 1 + .../testsuite/binutils-all/remove-relocs-07.d | 6 ++++++ .../testsuite/binutils-all/remove-relocs-07.s | 2 ++ .../testsuite/binutils-all/remove-relocs-08.d | 6 ++++++ 9 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 binutils/testsuite/binutils-all/remove-relocs-07.d create mode 100644 binutils/testsuite/binutils-all/remove-relocs-07.s create mode 100644 binutils/testsuite/binutils-all/remove-relocs-08.d diff --git a/binutils/ChangeLog b/binutils/ChangeLog index ee6defcbf8d..5207db81931 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,15 @@ +2018-09-17 Alan Modra + + * 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 * testsuite/lib/binutils-common.exp (is_som_format): New proc. 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\. -- 2.30.2