[llvm-objcopy]Don't implicitly strip sections in segments
authorJames Henderson <jh7370@my.bristol.ac.uk>
Thu, 14 Mar 2019 10:20:27 +0000 (10:20 +0000)
committerJames Henderson <jh7370@my.bristol.ac.uk>
Thu, 14 Mar 2019 10:20:27 +0000 (10:20 +0000)
commitc03a95d46576a5de3b3c15fc5d818cf0fe66668f
tree7dcca679bff73f96b248a4203ae9f4b49a030874
parenteea078ee165fe1d8cdc90c626d19a6cb44f21a56
[llvm-objcopy]Don't implicitly strip sections in segments

This patch changes llvm-objcopy's behaviour to not strip sections that
are in segments, if they otherwise would be due to a stripping operation
(--strip-all, --strip-sections, --strip-non-alloc). This preserves the
segment contents. It does not change the behaviour of --strip-all-gnu
(although we could choose to do so), because GNU objcopy's behaviour in
this case seems to be to strip the section, nor does it prevent removing
of sections in segments with --remove-section (if a user REALLY wants to
remove a section, we should probably let them, although I could be
persuaded that warning might be appropriate). Tests have been added to
show this latter behaviour.

This fixes https://bugs.llvm.org/show_bug.cgi?id=41006.

Reviewed by: grimar, rupprecht, jakehehrlich

Differential Revision: https://reviews.llvm.org/D59293

llvm-svn: 356129
llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test [new file with mode: 0644]
llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test
llvm/test/tools/llvm-objcopy/ELF/strip-all.test
llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test
llvm/test/tools/llvm-objcopy/ELF/strip-sections.test
llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
llvm/tools/llvm-objcopy/ObjcopyOpts.td
llvm/tools/llvm-objcopy/StripOpts.td