[MC] MCDwarfLineAddr::Encode: use SmallVectorImpl instead of raw_ostream. NFC
Similar to D145791: most call sites need a SmallString, but have to provide a
raw_svector_ostream wrapper with unneeded abstraction and overhead:
raw_ostream::write =(inlinable)=> flush_tied_then_write (unneeded TiedStream check) =(virtual function call)=> raw_svector_ostream::write_impl ==> SmallVector append(ItTy in_start, ItTy in_end) (range; less efficient then push_back).
Just use SmallVectorImpl to simplify and optimize code. Unfortunately most call
sites use SmallString, so we have to use SmallVectorImpl<char> instead of
<uint8_t> to avoid large refactoring.
GitOrigin-RevId: 49488490d195591bfc90daef111cd7293f8c80aa
diff --git a/lib/DWARFLinker/DWARFStreamer.cpp b/lib/DWARFLinker/DWARFStreamer.cpp
index 1593ea6..ebd54f7 100644
--- a/lib/DWARFLinker/DWARFStreamer.cpp
+++ b/lib/DWARFLinker/DWARFStreamer.cpp
@@ -655,9 +655,9 @@
if (Rows.empty()) {
// We only have the dummy entry, dsymutil emits an entry with a 0
// address in that case.
- MCDwarfLineAddr::Encode(*MC, Params, std::numeric_limits<int64_t>::max(), 0,
- EncodingOS);
- MS->emitBytes(EncodingOS.str());
+ MCDwarfLineAddr::encode(*MC, Params, std::numeric_limits<int64_t>::max(), 0,
+ EncodingBuffer);
+ MS->emitBytes(EncodingBuffer);
LineSectionSize += EncodingBuffer.size();
MS->emitLabel(LineEndSym);
return;
@@ -735,8 +735,8 @@
int64_t LineDelta = int64_t(Row.Line) - LastLine;
if (!Row.EndSequence) {
- MCDwarfLineAddr::Encode(*MC, Params, LineDelta, AddressDelta, EncodingOS);
- MS->emitBytes(EncodingOS.str());
+ MCDwarfLineAddr::encode(*MC, Params, LineDelta, AddressDelta, EncodingBuffer);
+ MS->emitBytes(EncodingBuffer);
LineSectionSize += EncodingBuffer.size();
EncodingBuffer.resize(0);
Address = Row.Address.Address;
@@ -753,9 +753,9 @@
MS->emitULEB128IntValue(AddressDelta);
LineSectionSize += 1 + getULEB128Size(AddressDelta);
}
- MCDwarfLineAddr::Encode(*MC, Params, std::numeric_limits<int64_t>::max(),
- 0, EncodingOS);
- MS->emitBytes(EncodingOS.str());
+ MCDwarfLineAddr::encode(*MC, Params, std::numeric_limits<int64_t>::max(),
+ 0, EncodingBuffer);
+ MS->emitBytes(EncodingBuffer);
LineSectionSize += EncodingBuffer.size();
EncodingBuffer.resize(0);
Address = -1ULL;
@@ -765,9 +765,9 @@
}
if (RowsSinceLastSequence) {
- MCDwarfLineAddr::Encode(*MC, Params, std::numeric_limits<int64_t>::max(), 0,
- EncodingOS);
- MS->emitBytes(EncodingOS.str());
+ MCDwarfLineAddr::encode(*MC, Params, std::numeric_limits<int64_t>::max(), 0,
+ EncodingBuffer);
+ MS->emitBytes(EncodingBuffer);
LineSectionSize += EncodingBuffer.size();
EncodingBuffer.resize(0);
}