Index: src/PNaClTranslator.cpp |
diff --git a/src/PNaClTranslator.cpp b/src/PNaClTranslator.cpp |
index d0b099db28489a12f20f7522c5b597ccacc50854..2ff57c190cf22694ed768572ca05f46f5f447e7f 100644 |
--- a/src/PNaClTranslator.cpp |
+++ b/src/PNaClTranslator.cpp |
@@ -2992,43 +2992,27 @@ bool TopLevelParser::ParseBlock(unsigned BlockID) { |
namespace Ice { |
-void PNaClTranslator::translate(const std::string &IRFilename) { |
- ErrorOr<std::unique_ptr<MemoryBuffer>> ErrOrFile = |
- MemoryBuffer::getFileOrSTDIN(IRFilename); |
- if (std::error_code EC = ErrOrFile.getError()) { |
- errs() << "Error reading '" << IRFilename << "': " << EC.message() << "\n"; |
- ErrorStatus.assign(EC.value()); |
- return; |
- } |
- |
- std::unique_ptr<MemoryBuffer> MemBuf(ErrOrFile.get().release()); |
- translateBuffer(IRFilename, MemBuf.get()); |
-} |
- |
void PNaClTranslator::translateBuffer(const std::string &IRFilename, |
Derek Schuff
2015/03/06 21:56:05
so is translatebuffer still used now that it's not
jvoung (off chromium)
2015/03/06 22:34:53
translateBuffer is being used by:
subzero/unittes
|
MemoryBuffer *MemBuf) { |
- if (MemBuf->getBufferSize() % 4 != 0) { |
- errs() << IRFilename |
- << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; |
- ErrorStatus.assign(EC_Bitcode); |
- return; |
- } |
+ std::unique_ptr<MemoryObject> MemObj(getNonStreamedMemoryObject( |
+ reinterpret_cast<const unsigned char *>(MemBuf->getBufferStart()), |
+ reinterpret_cast<const unsigned char *>(MemBuf->getBufferEnd()))); |
+ translate(IRFilename, std::move(MemObj)); |
+} |
- const unsigned char *BufPtr = (const unsigned char *)MemBuf->getBufferStart(); |
- const unsigned char *HeaderPtr = BufPtr; |
- const unsigned char *EndBufPtr = BufPtr + MemBuf->getBufferSize(); |
+void PNaClTranslator::translate(const std::string &IRFilename, |
+ std::unique_ptr<MemoryObject> &&MemObj) { |
// Read header and verify it is good. |
NaClBitcodeHeader Header; |
- if (Header.Read(HeaderPtr, EndBufPtr) || !Header.IsSupported()) { |
+ if (Header.Read(MemObj.get()) || !Header.IsSupported()) { |
errs() << "Invalid PNaCl bitcode header.\n"; |
ErrorStatus.assign(EC_Bitcode); |
return; |
} |
// Create a bitstream reader to read the bitcode file. |
- NaClBitstreamReader InputStreamFile(BufPtr, EndBufPtr, |
- Header.getHeaderSize()); |
+ NaClBitstreamReader InputStreamFile(MemObj.release(), Header.getHeaderSize()); |
NaClBitstreamCursor InputStream(InputStreamFile); |
TopLevelParser Parser(*this, InputStream, ErrorStatus); |
@@ -3047,6 +3031,12 @@ void PNaClTranslator::translateBuffer(const std::string &IRFilename, |
<< "\n"; |
ErrorStatus.assign(EC_Bitcode); |
} |
+ if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { |
+ errs() << IRFilename |
+ << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; |
+ ErrorStatus.assign(EC_Bitcode); |
+ return; |
+ } |
} |
} // end of namespace Ice |