diff options
author | Alan Modra <amodra@gmail.com> | 2018-09-12 14:57:48 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2018-09-17 23:31:18 +0930 |
commit | c12d9fa2afe7abcbe407a00e15719e1a1350c2a7 (patch) | |
tree | a766a5fd206554f404b2e84ed11582b8c84d0d90 /binutils | |
parent | a4b9568c7ee95891de6f5ba846f2d1aaf61569cd (diff) | |
download | binutils-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/ChangeLog | 12 | ||||
-rw-r--r-- | binutils/objcopy.c | 15 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/remove-relocs-01.d | 1 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/remove-relocs-04.d | 1 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/remove-relocs-05.d | 1 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/remove-relocs-06.d | 1 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/remove-relocs-07.d | 6 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/remove-relocs-07.s | 2 | ||||
-rw-r--r-- | 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 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\. |