Index: llvm/trunk/test/tools/llvm-objcopy/strip-all.test =================================================================== --- llvm/trunk/test/tools/llvm-objcopy/strip-all.test +++ llvm/trunk/test/tools/llvm-objcopy/strip-all.test @@ -1,15 +1,26 @@ # RUN: yaml2obj %s > %t +# RUN: cp %t %t3 # RUN: llvm-objcopy --strip-all %t %t2 # RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s -# We run yaml2obj again rather than copy %t to avoid interfering -# with llvm-objcopy's test (which potentially could have corrupted/updated the binary). +# Verify that the previous llvm-objcopy's run has not modified the input. +# RUN: cmp %t %t3 -# RUN: yaml2obj %s > %t3 # RUN: llvm-strip %t3 -# RUN: llvm-readobj -file-headers -sections %t3 | FileCheck %s # RUN: cmp %t2 %t3 +# RUN: cp %t %t4 +# RUN: llvm-strip %t4 -o %t5 +# RUN: cmp %t2 %t5 + +# Verify that the previous llvm-strip's run has not modified the input. +# RUN: cmp %t %t4 + +# RUN: cp %t %t-should-remain-the-same +# RUN: llvm-strip %t4 -o %t-should-remain-the-same -o %t-should-be-stripped +# RUN: cmp %t2 %t-should-be-stripped +# RUN: cmp %t %t-should-remain-the-same + !ELF FileHeader: Class: ELFCLASS64 Index: llvm/trunk/tools/llvm-objcopy/StripOpts.td =================================================================== --- llvm/trunk/tools/llvm-objcopy/StripOpts.td +++ llvm/trunk/tools/llvm-objcopy/StripOpts.td @@ -7,6 +7,10 @@ def help : Flag<["-", "--"], "help">; +defm output : Eq<"o">, + MetaVarName<"output">, + HelpText<"Write output to ">; + def strip_debug : Flag<["-", "--"], "strip-debug">, HelpText<"Remove debugging symbols only">; Index: llvm/trunk/tools/llvm-objcopy/llvm-objcopy.cpp =================================================================== --- llvm/trunk/tools/llvm-objcopy/llvm-objcopy.cpp +++ llvm/trunk/tools/llvm-objcopy/llvm-objcopy.cpp @@ -582,7 +582,8 @@ CopyConfig Config; Config.InputFilename = Positional[0]; - Config.OutputFilename = Positional[0]; + Config.OutputFilename = + InputArgs.getLastArgValue(STRIP_output, Positional[0]); // Strip debug info only. Config.StripDebug = InputArgs.hasArg(STRIP_strip_debug);