summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-mc/llvm-mc.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-04-14 22:14:34 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-04-14 22:14:34 +0000
commit5560a4cfbd6c4c8632f9b7662aa9fe477bbc7374 (patch)
treed3b890827e5e766e80c1844b8e043e4b4aab074d /llvm/tools/llvm-mc/llvm-mc.cpp
parent931b107364adbad262b696ee2b50a100f7c2f6e9 (diff)
downloadbcm5719-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.cpp14
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);
OpenPOWER on IntegriCloud