[PATCH] D95478: [llvm-objcopy][NFC][Wasm] Do not use internal buffer while writing into the output.

Alexey Lapshin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 26 13:05:09 PST 2021


avl created this revision.
avl added reviewers: dschuff, rupprecht, grimar, alexshap, dblaikie.
Herald added subscribers: abrachet, sunfish, sbc100.
Herald added a reviewer: jhenderson.
avl requested review of this revision.
Herald added subscribers: MaskRay, aheejin.
Herald added a project: LLVM.

This patch is follow-up for D91028 <https://reviews.llvm.org/D91028>. It implements direct writing into the
output stream for wasm.

Depends on D91028 <https://reviews.llvm.org/D91028>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D95478

Files:
  llvm/tools/llvm-objcopy/wasm/Writer.cpp


Index: llvm/tools/llvm-objcopy/wasm/Writer.cpp
===================================================================
--- llvm/tools/llvm-objcopy/wasm/Writer.cpp
+++ llvm/tools/llvm-objcopy/wasm/Writer.cpp
@@ -55,28 +55,21 @@
 }
 
 Error Writer::write() {
-  size_t TotalSize = finalize();
-  std::unique_ptr<WritableMemoryBuffer> Buf =
-      WritableMemoryBuffer::getNewMemBuffer(TotalSize);
-  if (!Buf)
-    return createStringError(llvm::errc::not_enough_memory, Twine(TotalSize));
+  finalize();
 
   // Write the header.
-  uint8_t *Ptr = reinterpret_cast<uint8_t *>(Buf->getBufferStart());
-  Ptr = std::copy(Obj.Header.Magic.begin(), Obj.Header.Magic.end(), Ptr);
-  support::endian::write32le(Ptr, Obj.Header.Version);
-  Ptr += sizeof(Obj.Header.Version);
+  Out.write(Obj.Header.Magic.data(), Obj.Header.Magic.size());
+  uint32_t Version;
+  support::endian::write32le(&Version, Obj.Header.Version);
+  Out.write((const char *)&Version, sizeof(Version));
 
   // Write each section.
   for (size_t I = 0, S = SectionHeaders.size(); I < S; ++I) {
-    Ptr = std::copy(SectionHeaders[I].begin(), SectionHeaders[I].end(), Ptr);
-    ArrayRef<uint8_t> Contents = Obj.Sections[I].Contents;
-    Ptr = std::copy(Contents.begin(), Contents.end(), Ptr);
+    Out.write(SectionHeaders[I].data(), SectionHeaders[I].size());
+    Out.write((const char *)Obj.Sections[I].Contents.data(),
+              Obj.Sections[I].Contents.size());
   }
 
-  // TODO: Implement direct writing to the output stream
-  // TODO: (without intermediate memory buffer Buf).
-  Out.write(Buf->getBufferStart(), Buf->getBufferSize());
   Out.flush();
   return Error::success();
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D95478.319397.patch
Type: text/x-patch
Size: 1660 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210126/95697a04/attachment.bin>


More information about the llvm-commits mailing list