forked from OSchip/llvm-project
[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 llvm-svn: 324783
This commit is contained in:
parent
99db883d55
commit
fedb01603c
|
@ -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
|
|
@ -72,8 +72,8 @@ LLVM_ATTRIBUTE_NORETURN void reportError(StringRef File, Error E) {
|
|||
} // 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();
|
||||
|
|
Loading…
Reference in New Issue