Index: llvm/trunk/test/tools/llvm-objcopy/ELF/strip-symbol.test =================================================================== --- llvm/trunk/test/tools/llvm-objcopy/ELF/strip-symbol.test +++ llvm/trunk/test/tools/llvm-objcopy/ELF/strip-symbol.test @@ -1,6 +1,8 @@ # RUN: yaml2obj %s > %t # RUN: llvm-objcopy --strip-symbol baz -N bar %t %t2 # RUN: llvm-readobj --symbols --sections %t2 | FileCheck %s +# RUN: llvm-strip --strip-symbol baz -N bar %t -o %t3 +# RUN: llvm-readobj --symbols --sections %t3 | FileCheck %s !ELF FileHeader: Index: llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp =================================================================== --- llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp +++ llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp @@ -480,19 +480,22 @@ Config.StripAll = InputArgs.hasArg(STRIP_strip_all); Config.StripAllGNU = InputArgs.hasArg(STRIP_strip_all_gnu); - if (!Config.StripDebug && !Config.StripUnneeded && - Config.DiscardMode == DiscardType::None && !Config.StripAllGNU) - Config.StripAll = true; - for (auto Arg : InputArgs.filtered(STRIP_keep_section)) Config.KeepSection.push_back(Arg->getValue()); for (auto Arg : InputArgs.filtered(STRIP_remove_section)) Config.ToRemove.push_back(Arg->getValue()); + for (auto Arg : InputArgs.filtered(STRIP_strip_symbol)) + Config.SymbolsToRemove.push_back(Arg->getValue()); + for (auto Arg : InputArgs.filtered(STRIP_keep_symbol)) Config.SymbolsToKeep.push_back(Arg->getValue()); + if (!Config.StripDebug && !Config.StripUnneeded && + Config.DiscardMode == DiscardType::None && !Config.StripAllGNU && Config.SymbolsToRemove.empty()) + Config.StripAll = true; + Config.DeterministicArchives = InputArgs.hasFlag(STRIP_enable_deterministic_archives, STRIP_disable_deterministic_archives, /*default=*/true); Index: llvm/trunk/tools/llvm-objcopy/StripOpts.td =================================================================== --- llvm/trunk/tools/llvm-objcopy/StripOpts.td +++ llvm/trunk/tools/llvm-objcopy/StripOpts.td @@ -51,6 +51,10 @@ MetaVarName<"section">; def R : JoinedOrSeparate<["-"], "R">, Alias; +defm strip_symbol : Eq<"strip-symbol", "Strip ">, + MetaVarName<"symbol">; +def N : JoinedOrSeparate<["-"], "N">, Alias; + defm keep_section : Eq<"keep-section", "Keep
">, MetaVarName<"section">; defm keep_symbol : Eq<"keep-symbol", "Do not remove symbol ">,