| //===- 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> |
| |
| 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 (!buffer_or_error) { |
| 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); |
| m_pMemoryBuffer = |
| llvm::MemoryBuffer::getMemBuffer(mem, |
| /*BufferName*/ "NaN", |
| /*RequiresNullTerminator*/ false); |
| } |
| |
| 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(); |
| } |
| |
| } // namespace mcld |