Index: llvm/trunk/test/tools/llvm-objcopy/basic-keep.test =================================================================== --- llvm/trunk/test/tools/llvm-objcopy/basic-keep.test +++ llvm/trunk/test/tools/llvm-objcopy/basic-keep.test @@ -1,6 +1,8 @@ # RUN: yaml2obj %s > %t # RUN: llvm-objcopy -strip-non-alloc -keep=.test %t %t2 +# RUN: llvm-strip --strip-all -keep=.test %t -o %t3 # RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s +# RUN: cmp %t2 %t3 !ELF FileHeader: Index: llvm/trunk/test/tools/llvm-objcopy/strip-all-gnu.test =================================================================== --- llvm/trunk/test/tools/llvm-objcopy/strip-all-gnu.test +++ llvm/trunk/test/tools/llvm-objcopy/strip-all-gnu.test @@ -1,7 +1,9 @@ # RUN: yaml2obj %s > %t # RUN: cp %t %t1 # RUN: llvm-objcopy --strip-all-gnu %t %t2 +# RUN: llvm-strip --strip-all-gnu %t -o %t3 # RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s +# RUN: cmp %t2 %t3 !ELF FileHeader: Index: llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp =================================================================== --- llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp +++ llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp @@ -405,10 +405,15 @@ Config.DiscardAll = InputArgs.hasArg(STRIP_discard_all); Config.StripUnneeded = InputArgs.hasArg(STRIP_strip_unneeded); Config.StripAll = InputArgs.hasArg(STRIP_strip_all); + Config.StripAllGNU = InputArgs.hasArg(STRIP_strip_all_gnu); - if (!Config.StripDebug && !Config.StripUnneeded && !Config.DiscardAll) + if (!Config.StripDebug && !Config.StripUnneeded && !Config.DiscardAll && + !Config.StripAllGNU) Config.StripAll = true; + for (auto Arg : InputArgs.filtered(STRIP_keep)) + Config.Keep.push_back(Arg->getValue()); + for (auto Arg : InputArgs.filtered(STRIP_remove_section)) Config.ToRemove.push_back(Arg->getValue()); Index: llvm/trunk/tools/llvm-objcopy/ObjcopyOpts.td =================================================================== --- llvm/trunk/tools/llvm-objcopy/ObjcopyOpts.td +++ llvm/trunk/tools/llvm-objcopy/ObjcopyOpts.td @@ -85,7 +85,7 @@ def S : Flag<["-"], "S">, Alias; def strip_all_gnu : Flag<["-", "--"], "strip-all-gnu">, - HelpText<"Compaitable with GNU objcopy's --strip-all">; + HelpText<"Compatible with GNU objcopy's --strip-all">; def strip_debug : Flag<["-", "--"], "strip-debug">, HelpText<"Remove all debug information">; def strip_dwo : Flag<["-", "--"], "strip-dwo">, @@ -142,7 +142,7 @@ def K : JoinedOrSeparate<["-"], "K">, Alias; def only_keep_debug : Flag<["-", "--"], "only-keep-debug">, - HelpText<"Currently ignored. Only for compaitability with GNU objcopy.">; + HelpText<"Currently ignored. Only for compatibility with GNU objcopy.">; def strip_unneeded : Flag<["-", "--"], "strip-unneeded">, HelpText<"Remove all symbols not needed by relocations">; def keep_file_symbols : Flag<["-", "--"], "keep-file-symbols">, Index: llvm/trunk/tools/llvm-objcopy/StripOpts.td =================================================================== --- llvm/trunk/tools/llvm-objcopy/StripOpts.td +++ llvm/trunk/tools/llvm-objcopy/StripOpts.td @@ -38,6 +38,9 @@ def s : Flag<["-"], "s">, Alias; +def strip_all_gnu : Flag<["-", "--"], "strip-all-gnu">, + HelpText<"Compatible with GNU strip's --strip-all">; + def strip_debug : Flag<["-", "--"], "strip-debug">, HelpText<"Remove debugging symbols only">; @@ -56,6 +59,8 @@ def R : JoinedOrSeparate<["-"], "R">, Alias; +defm keep : Eq<"keep", "Keep
">, MetaVarName<"section">; + defm keep_symbol : Eq<"keep-symbol", "Do not remove symbol ">, MetaVarName<"symbol">;