diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-04-14 22:14:34 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-04-14 22:14:34 +0000 |
commit | 5560a4cfbd6c4c8632f9b7662aa9fe477bbc7374 (patch) | |
tree | d3b890827e5e766e80c1844b8e043e4b4aab074d /llvm/tools/llvm-mc/llvm-mc.cpp | |
parent | 931b107364adbad262b696ee2b50a100f7c2f6e9 (diff) | |
download | bcm5719-llvm-5560a4cfbd6c4c8632f9b7662aa9fe477bbc7374.tar.gz bcm5719-llvm-5560a4cfbd6c4c8632f9b7662aa9fe477bbc7374.zip |
Use raw_pwrite_stream in the object writer/streamer.
The ELF object writer will take advantage of that in the next commit.
llvm-svn: 234950
Diffstat (limited to 'llvm/tools/llvm-mc/llvm-mc.cpp')
-rw-r--r-- | llvm/tools/llvm-mc/llvm-mc.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/llvm/tools/llvm-mc/llvm-mc.cpp b/llvm/tools/llvm-mc/llvm-mc.cpp index 58fe233fce1..6a8b49373df 100644 --- a/llvm/tools/llvm-mc/llvm-mc.cpp +++ b/llvm/tools/llvm-mc/llvm-mc.cpp @@ -439,6 +439,8 @@ int main(int argc, char **argv) { if (!Out) return 1; + std::unique_ptr<buffer_ostream> BOS; + raw_pwrite_stream *OS = &Out->os(); std::unique_ptr<MCStreamer> Str; std::unique_ptr<MCInstrInfo> MCII(TheTarget->createMCInstrInfo()); @@ -460,7 +462,7 @@ int main(int argc, char **argv) { CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU); } - auto FOut = llvm::make_unique<formatted_raw_ostream>(Out->os()); + auto FOut = llvm::make_unique<formatted_raw_ostream>(*OS); Str.reset(TheTarget->createAsmStreamer( Ctx, std::move(FOut), /*asmverbose*/ true, /*useDwarfDirectory*/ true, IP, CE, MAB, ShowInst)); @@ -469,10 +471,16 @@ int main(int argc, char **argv) { Str.reset(TheTarget->createNullStreamer(Ctx)); } else { assert(FileType == OFT_ObjectFile && "Invalid file type!"); + + if (!Out->os().supportsSeeking()) { + BOS = make_unique<buffer_ostream>(Out->os()); + OS = BOS.get(); + } + MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU); - Str.reset(TheTarget->createMCObjectStreamer(TheTriple, Ctx, *MAB, Out->os(), - CE, *STI, RelaxAll, + Str.reset(TheTarget->createMCObjectStreamer(TheTriple, Ctx, *MAB, *OS, CE, + *STI, RelaxAll, /*DWARFMustBeAtTheEnd*/ false)); if (NoExecStack) Str->InitSections(true); |