Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: src/IceCompileServer.cpp

Issue 1190413004: Allow pnacl-sz to be compiled to textual bitcode records. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix nits. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« Makefile.standalone ('K') | « Makefile.standalone ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceCompileServer.cpp
diff --git a/src/IceCompileServer.cpp b/src/IceCompileServer.cpp
index d4048e9464fafaa35c406517ed31f239422882b4..066dcd63c62a2561eb8f2fa1b06bee4f6f39e737 100644
--- a/src/IceCompileServer.cpp
+++ b/src/IceCompileServer.cpp
@@ -15,6 +15,10 @@
#include <iostream>
#include <thread>
+#ifdef INPUT_IS_TEXTUAL_BITCODE
Jim Stichnoth 2015/06/21 07:09:34 Can this be included unconditionally? (maybe with
Karl 2015/06/22 19:52:02 Done.
+#include "llvm/Bitcode/NaCl/NaClBitcodeMungeUtils.h"
+#endif
+
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/raw_os_ostream.h"
#include "llvm/Support/Signals.h"
@@ -31,6 +35,52 @@ namespace Ice {
namespace {
+#ifdef INPUT_IS_TEXTUAL_BITCODE
Jim Stichnoth 2015/06/21 07:09:34 Would it be possible to define TextDataStreamer ev
Karl 2015/06/22 19:52:02 Done.
+#if PNACL_BROWSER_TRANSLATOR
+#error Can not define INPUT_IS_TEXTUAL_BITCODE when building browswer translator
+#endif
+
+// Define a SmallVector backed buffer as a data stream, so that it
+// can hold the generated binary version of the textual bitcode in the
+// input file.
+class TextDataStreamer : public llvm::DataStreamer {
+public:
+ TextDataStreamer() {}
+ ~TextDataStreamer() final {}
+ static TextDataStreamer *create(const IceString &Filename, std::string *Err);
+ size_t GetBytes(unsigned char *Buf, size_t Len) final;
+private:
+ llvm::SmallVector<char, 1024> BitcodeBuffer;
+ size_t Cursor = 0;
+};
+
+TextDataStreamer *TextDataStreamer::create(const IceString &Filename,
+ std::string *Err) {
+ TextDataStreamer *Streamer = new TextDataStreamer();
+ llvm::raw_string_ostream ErrStrm(*Err);
+ if (std::error_code EC = llvm::readNaClRecordTextAndBuildBitcode(
+ Filename, Streamer->BitcodeBuffer, &ErrStrm)) {
+ ErrStrm << "Error: " << EC.message() << "\n";
+ ErrStrm.flush();
+ delete Streamer;
+ return nullptr;
+ }
+ ErrStrm.flush();
+ return Streamer;
+}
+
+size_t TextDataStreamer::GetBytes(unsigned char *Buf, size_t Len) {
+ if (Cursor >= BitcodeBuffer.size())
+ return 0;
+ if (Cursor + Len > BitcodeBuffer.size())
+ Len = BitcodeBuffer.size() - Cursor;
+ for (size_t i = 0; i < Len; ++i)
+ Buf[i] = BitcodeBuffer[Cursor + i];
+ Cursor += Len;
+ return Len;
+}
+#endif
+
std::unique_ptr<Ostream> makeStream(const IceString &Filename,
std::error_code &EC) {
if (Filename == "-") {
@@ -100,7 +150,12 @@ void CLCompileServer::run() {
IceString StrError;
std::unique_ptr<llvm::DataStreamer> InputStream(
- llvm::getDataFileStreamer(ExtraFlags.getIRFilename(), &StrError));
+#ifdef INPUT_IS_TEXTUAL_BITCODE
Jim Stichnoth 2015/06/21 07:09:34 Hopefully you could use this instead? INPUT_IS_TE
Karl 2015/06/22 19:52:01 Done.
+ TextDataStreamer::create(ExtraFlags.getIRFilename(), &StrError)
+#else
+ llvm::getDataFileStreamer(ExtraFlags.getIRFilename(), &StrError)
+#endif
+ );
if (!StrError.empty() || !InputStream) {
llvm::SMDiagnostic Err(ExtraFlags.getIRFilename(),
llvm::SourceMgr::DK_Error, StrError);
« Makefile.standalone ('K') | « Makefile.standalone ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698