//===- MemoryArea.cpp -----------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include <mcld/Support/MemoryArea.h> #include <mcld/Support/MsgHandling.h> #include <llvm/Support/ErrorOr.h> #include <cassert> #include <system_error> using namespace mcld; //===--------------------------------------------------------------------===// // MemoryArea //===--------------------------------------------------------------------===// MemoryArea::MemoryArea(llvm::StringRef pFilename) { llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> buffer_or_error = llvm::MemoryBuffer::getFile(pFilename, /*FileSize*/ -1, /*RequiresNullTerminator*/ false); if (std::error_code ec = buffer_or_error.getError()) { (void) ec; fatal(diag::fatal_cannot_read_input) << pFilename.str(); } m_pMemoryBuffer = std::move(buffer_or_error.get()); } MemoryArea::MemoryArea(const char* pMemBuffer, size_t pSize) { llvm::StringRef mem(pMemBuffer, pSize); llvm::MemoryBuffer* buffer = llvm::MemoryBuffer::getMemBuffer(mem, /*BufferName*/ "NaN", /*RequiresNullTerminator*/ false); assert(buffer != NULL); m_pMemoryBuffer.reset(buffer); } llvm::StringRef MemoryArea::request(size_t pOffset, size_t pLength) { return llvm::StringRef(m_pMemoryBuffer->getBufferStart() + pOffset, pLength); } size_t MemoryArea::size() const { return m_pMemoryBuffer->getBufferSize(); }