diff options
Diffstat (limited to 'llvm/tools/llvm-objcopy/llvm-objcopy.cpp')
-rw-r--r-- | llvm/tools/llvm-objcopy/llvm-objcopy.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp index f7a94f5f891..812d27b403f 100644 --- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp +++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp @@ -87,6 +87,8 @@ static cl::opt<bool> StripDebug("strip-debug", cl::desc("Removes all debug information")); static cl::opt<bool> StripSections("strip-sections", cl::desc("Remove all section headers")); +static cl::opt<bool> StripNonAlloc("strip-non-alloc", + cl::desc("Remove all non-allocated sections")); static cl::opt<bool> StripDWO("strip-dwo", cl::desc("remove all DWARF .dwo sections from file")); static cl::opt<bool> ExtractDWO( @@ -206,6 +208,15 @@ void CopyBinary(const ELFObjectFile<ELFT> &ObjFile) { }; } + if (StripNonAlloc) + RemovePred = [RemovePred, &Obj](const SectionBase &Sec) { + if (RemovePred(Sec)) + return true; + if (&Sec == Obj->getSectionHeaderStrTab()) + return false; + return (Sec.Flags & SHF_ALLOC) == 0; + }; + Obj->removeSections(RemovePred); Obj->finalize(); WriteObjectFile(*Obj, OutputFilename.getValue()); |