PR23611, objcopy is not removing executable relocatable sections
authorAlan Modra <amodra@gmail.com>
Mon, 10 Sep 2018 02:27:08 +0000 (11:57 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 10 Sep 2018 04:16:37 +0000 (13:46 +0930)
commitf9853190c8d90e9f7d43fae90478a0db291f9c03
treeabf8f9fd17f8bf6192349e1644ebef00572effe7
parent78f8307c93755eb581c20ba049f1b092f161d513
PR23611, objcopy is not removing executable relocatable sections

BFD handles ELF relocation sections in an executable differently to
relocation sections in a relocatable object.  For a relocatable
object, BFD carries the relocations as data associated with the
section to which they apply; The relocation section doesn't appear as
a separate section.  For an executable, dynamic relocation sections do
appear as separate sections.  This means that objcopy needs to use
different strategies when dealing with relocations.

When --remove-relocations was added to objcopy with commit
d3e5f6c8f1e, objcopy lost the ability to remove dynamic relocation
sections such as .rela.plt from executables using the option
"--remove-section=.rela.plt".  This patch reinstates that
functionality.

I thought it best to keep --remove-relocations as is, rather than
extending to handle dynamic relocations as per the patch in the PR,
because executables linked with --emit-relocs may have both dynamic
and non-dynamic relocations.  In that case --remove-relocataions=* is
useful to remove all the non-dynamic relocations.

PR binutils/23611
* objcopy.c (handle_remove_section_option): Consider .rela and
.rel sections for stripping directly as well as attached to the
associated section they relocate.
* doc/binutils.texi (remove-relocations): Specify that this
option removes non-dynamic relocation sections.
* testsuite/binutils-all/objcopy.exp
(objcopy_remove_relocations_from_executable): New test.
binutils/ChangeLog
binutils/doc/binutils.texi
binutils/objcopy.c
binutils/testsuite/binutils-all/objcopy.exp