diff options
author | Jake Ehrlich <jakehehrlich@google.com> | 2017-10-10 23:02:43 +0000 |
---|---|---|
committer | Jake Ehrlich <jakehehrlich@google.com> | 2017-10-10 23:02:43 +0000 |
commit | c9dc2816f16b6e5162ca71fef71387a725a901fd (patch) | |
tree | 6ceeedd803d6c31505e4c928f9eaa21bc68e2f8c /tools/llvm-objcopy | |
parent | 02ce807db57d139864a316ba01e46955f8eab54f (diff) |
[llvm-objcopy] Add ability to remove multiple sections by name
This change adds the ability to use the "-R"/"-remove-section" option
multiple times.
Differential Revision: https://reviews.llvm.org/D38332
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315385 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-objcopy')
-rw-r--r-- | tools/llvm-objcopy/llvm-objcopy.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/tools/llvm-objcopy/llvm-objcopy.cpp b/tools/llvm-objcopy/llvm-objcopy.cpp index 775c5ae42b6..d76735482d6 100644 --- a/tools/llvm-objcopy/llvm-objcopy.cpp +++ b/tools/llvm-objcopy/llvm-objcopy.cpp @@ -56,10 +56,11 @@ cl::opt<std::string> OutputFilename(cl::Positional, cl::desc("<output>"), cl::opt<std::string> OutputFormat("O", cl::desc("set output format to one of the following:" "\n\tbinary")); -// TODO: make this a cl::list to support removing multiple sections -cl::opt<std::string> ToRemove("remove-section", - cl::desc("Remove a specific section")); -cl::alias ToRemoveA("R", cl::desc("Alias for remove-section"), cl::aliasopt(ToRemove)); + +cl::list<std::string> ToRemove("remove-section", + cl::desc("Remove a specific section")); +cl::alias ToRemoveA("R", cl::desc("Alias for remove-section"), + cl::aliasopt(ToRemove)); void CopyBinary(const ELFObjectFile<ELF64LE> &ObjFile) { std::unique_ptr<FileOutputBuffer> Buffer; @@ -71,8 +72,10 @@ void CopyBinary(const ELFObjectFile<ELF64LE> &ObjFile) { else Obj = llvm::make_unique<ELFObject<ELF64LE>>(ObjFile); if (!ToRemove.empty()) { - Obj->removeSections( - [&](const SectionBase &Sec) { return ToRemove == Sec.Name; }); + Obj->removeSections([&](const SectionBase &Sec) { + return std::find(std::begin(ToRemove), std::end(ToRemove), Sec.Name) != + std::end(ToRemove); + }); } Obj->finalize(); ErrorOr<std::unique_ptr<FileOutputBuffer>> BufferOrErr = |