Skip to content

Commit

Permalink
[yaml2obj] Add "-o" command line option to specify an output file name.
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208900 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
atanasyan committed May 15, 2014
1 parent 70e3aba commit 926273d
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 11 deletions.
3 changes: 3 additions & 0 deletions test/Object/yaml2obj-elf-section-basic.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# RUN: yaml2obj -format=elf %s | llvm-readobj -sections -section-data - | FileCheck %s
# RUN: yaml2obj -format=elf -o %t %s
# RUN: llvm-readobj -sections -section-data %t | FileCheck %s

!ELF
FileHeader:
Class: ELFCLASS64
Expand Down
3 changes: 3 additions & 0 deletions test/Object/yaml2obj-readobj.test
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
RUN: yaml2obj %p/Inputs/COFF/i386.yaml | llvm-readobj -file-headers -relocations -expand-relocs - | FileCheck %s --check-prefix COFF-I386
RUN: yaml2obj -o %t %p/Inputs/COFF/i386.yaml
RUN: llvm-readobj -file-headers -relocations -expand-relocs %t \
RUN: | FileCheck %s --check-prefix COFF-I386

// COFF-I386: Characteristics [ (0x200)
// COFF-I386-NEXT: IMAGE_FILE_DEBUG_STRIPPED (0x200)
Expand Down
8 changes: 4 additions & 4 deletions tools/yaml2obj/yaml2elf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -477,13 +477,13 @@ int yaml2elf(llvm::raw_ostream &Out, llvm::MemoryBuffer *Buf) {
typedef ELFType<support::big, 4, false> BE32;
if (is64Bit(Doc)) {
if (isLittleEndian(Doc))
return ELFState<LE64>::writeELF(outs(), Doc);
return ELFState<LE64>::writeELF(Out, Doc);
else
return ELFState<BE64>::writeELF(outs(), Doc);
return ELFState<BE64>::writeELF(Out, Doc);
} else {
if (isLittleEndian(Doc))
return ELFState<LE32>::writeELF(outs(), Doc);
return ELFState<LE32>::writeELF(Out, Doc);
else
return ELFState<BE32>::writeELF(outs(), Doc);
return ELFState<BE32>::writeELF(Out, Doc);
}
}
34 changes: 27 additions & 7 deletions tools/yaml2obj/yaml2obj.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,14 @@

#include "yaml2obj.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/Signals.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/system_error.h"
#include "llvm/Support/ToolOutputFile.h"

using namespace llvm;

Expand Down Expand Up @@ -49,22 +51,40 @@ cl::opt<YAMLObjectFormat> Format(
clEnumValN(YOF_ELF, "elf", "ELF object file format"),
clEnumValEnd));

static cl::opt<std::string> OutputFilename("o", cl::desc("Output filename"),
cl::value_desc("filename"));

int main(int argc, char **argv) {
cl::ParseCommandLineOptions(argc, argv);
sys::PrintStackTraceOnErrorSignal();
PrettyStackTraceProgram X(argc, argv);
llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.

if (OutputFilename.empty())
OutputFilename = "-";

std::string ErrorInfo;
std::unique_ptr<tool_output_file> Out(
new tool_output_file(OutputFilename.c_str(), ErrorInfo, sys::fs::F_None));
if (!ErrorInfo.empty()) {
errs() << ErrorInfo << '\n';
return 1;
}

std::unique_ptr<MemoryBuffer> Buf;
if (MemoryBuffer::getFileOrSTDIN(Input, Buf))
return 1;
if (Format == YOF_COFF) {
return yaml2coff(outs(), Buf.get());
} else if (Format == YOF_ELF) {
return yaml2elf(outs(), Buf.get());
} else {

int Res = 1;
if (Format == YOF_COFF)
Res = yaml2coff(Out->os(), Buf.get());
else if (Format == YOF_ELF)
Res = yaml2elf(Out->os(), Buf.get());
else
errs() << "Not yet implemented\n";
return 1;
}

if (Res == 0)
Out->keep();

return Res;
}

0 comments on commit 926273d

Please sign in to comment.