aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2011-04-18 20:54:46 +0000
committerEli Friedman <eli.friedman@gmail.com>2011-04-18 20:54:46 +0000
commit50ebe53353f6870e913f7715d6d4fc5a1f5bedd6 (patch)
tree70df5b1fbef32a1fdc51869c38e2e78f28a06d53
parent3f3bf9387b75f4c932e4c59bd7af719d26ae4b99 (diff)
downloadexternal_llvm-50ebe53353f6870e913f7715d6d4fc5a1f5bedd6.zip
external_llvm-50ebe53353f6870e913f7715d6d4fc5a1f5bedd6.tar.gz
external_llvm-50ebe53353f6870e913f7715d6d4fc5a1f5bedd6.tar.bz2
malloc elimination: it's a bad idea to use raw_svector_ostream on a
small heap-allocated SmallString because it unconditionally forces a malloc. (Revised version of r129688, with the necessary flush() call.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129716 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/MC/MCObjectStreamer.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/MC/MCObjectStreamer.cpp b/lib/MC/MCObjectStreamer.cpp
index ef22eaa..bd7de57 100644
--- a/lib/MC/MCObjectStreamer.cpp
+++ b/lib/MC/MCObjectStreamer.cpp
@@ -191,8 +191,11 @@ void MCObjectStreamer::EmitInstruction(const MCInst &Inst) {
void MCObjectStreamer::EmitInstToFragment(const MCInst &Inst) {
MCInstFragment *IF = new MCInstFragment(Inst, getCurrentSectionData());
- raw_svector_ostream VecOS(IF->getCode());
+ SmallString<128> Code;
+ raw_svector_ostream VecOS(Code);
getAssembler().getEmitter().EncodeInstruction(Inst, VecOS, IF->getFixups());
+ VecOS.flush();
+ IF->getCode().append(Code.begin(), Code.end());
}
static const MCExpr *BuildSymbolDiff(MCContext &Context,