[llvm] r324783 - [llvm-objcopy] Make modifications in-place if output is not specified

Alexander Shaposhnikov via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 9 15:33:31 PST 2018


Author: alexshap
Date: Fri Feb  9 15:33:31 2018
New Revision: 324783

URL: http://llvm.org/viewvc/llvm-project?rev=324783&view=rev
Log:
[llvm-objcopy] Make modifications in-place if output is not specified

If the output file is not specified make the modifications in-place 
(like binutils objcopy does). In particular, this fixes 
the behavior of Clang -gsplit-dwarf (if Clang is configured to use llvm-objcopy), 
previously it was creating .dwo files, but still leaving *dwo* sections in 
the original binary.

Test plan: make check-all

Differential revision: https://reviews.llvm.org/D42873

Added:
    llvm/trunk/test/tools/llvm-objcopy/strip-dwo-inplace.test
Modified:
    llvm/trunk/tools/llvm-objcopy/llvm-objcopy.cpp

Added: llvm/trunk/test/tools/llvm-objcopy/strip-dwo-inplace.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/strip-dwo-inplace.test?rev=324783&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/strip-dwo-inplace.test (added)
+++ llvm/trunk/test/tools/llvm-objcopy/strip-dwo-inplace.test Fri Feb  9 15:33:31 2018
@@ -0,0 +1,29 @@
+# RUN: cp %p/Inputs/dwarf.dwo %t
+# RUN: llvm-objcopy -strip-dwo %t
+# RUN: llvm-readobj -file-headers -sections %t | FileCheck %s
+
+CHECK:     SectionHeaderCount: 24
+
+CHECK:    Name: .text
+CHECK:    Name: .rodata.str1.1
+CHECK:    Name: .debug_str
+CHECK:    Name: .debug_abbrev
+CHECK:    Name: .debug_info
+CHECK:    Name: .debug_ranges
+CHECK:    Name: .debug_macinfo
+CHECK:    Name: .debug_addr
+CHECK:    Name: .debug_pubnames
+CHECK:    Name: .debug_pubtypes
+CHECK:    Name: .comment
+CHECK:    Name: .note.GNU-stack
+CHECK:    Name: .debug_frame
+CHECK:    Name: .debug_line
+CHECK:    Name: .symtab
+CHECK:    Name: .rela.text
+CHECK:    Name: .rela.debug_info
+CHECK:    Name: .rela.debug_addr
+CHECK:    Name: .rela.debug_pubnames
+CHECK:    Name: .rela.debug_pubtypes
+CHECK:    Name: .rela.debug_frame
+CHECK:    Name: .rela.debug_line
+CHECK:    Name: .strtab

Modified: llvm/trunk/tools/llvm-objcopy/llvm-objcopy.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objcopy/llvm-objcopy.cpp?rev=324783&r1=324782&r2=324783&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objcopy/llvm-objcopy.cpp (original)
+++ llvm/trunk/tools/llvm-objcopy/llvm-objcopy.cpp Fri Feb  9 15:33:31 2018
@@ -72,8 +72,8 @@ LLVM_ATTRIBUTE_NORETURN void reportError
 } // end namespace llvm
 
 static cl::opt<std::string> InputFilename(cl::Positional, cl::desc("<input>"));
-static cl::opt<std::string> OutputFilename(cl::Positional, cl::desc("<output>"),
-                                           cl::init("-"));
+static cl::opt<std::string> OutputFilename(cl::Positional, cl::desc("[ <output> ]"));
+
 static cl::opt<std::string>
     OutputFormat("O", cl::desc("Set output format to one of the following:"
                                "\n\tbinary"));
@@ -340,7 +340,9 @@ int main(int argc, char **argv) {
 
   auto Reader = CreateReader();
   auto Obj = Reader->create();
-  auto Writer = CreateWriter(*Obj, OutputFilename);
+  StringRef Output =
+      OutputFilename.getNumOccurrences() ? OutputFilename : InputFilename;
+  auto Writer = CreateWriter(*Obj, Output);
   HandleArgs(*Obj, *Reader);
   Writer->finalize();
   Writer->write();




More information about the llvm-commits mailing list