1//===- MemoryArea.cpp -----------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include "mcld/Support/MemoryArea.h" 10#include "mcld/Support/MsgHandling.h" 11 12#include <llvm/Support/ErrorOr.h> 13 14#include <cassert> 15#include <system_error> 16 17namespace mcld { 18 19//===--------------------------------------------------------------------===// 20// MemoryArea 21//===--------------------------------------------------------------------===// 22MemoryArea::MemoryArea(llvm::StringRef pFilename) { 23 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer> > buffer_or_error = 24 llvm::MemoryBuffer::getFile(pFilename, 25 /*FileSize*/ -1, 26 /*RequiresNullTerminator*/ false); 27 if (!buffer_or_error) { 28 fatal(diag::fatal_cannot_read_input) << pFilename.str(); 29 } 30 m_pMemoryBuffer = std::move(buffer_or_error.get()); 31} 32 33MemoryArea::MemoryArea(const char* pMemBuffer, size_t pSize) { 34 llvm::StringRef mem(pMemBuffer, pSize); 35 m_pMemoryBuffer = 36 llvm::MemoryBuffer::getMemBuffer(mem, 37 /*BufferName*/ "NaN", 38 /*RequiresNullTerminator*/ false); 39} 40 41llvm::StringRef MemoryArea::request(size_t pOffset, size_t pLength) { 42 return llvm::StringRef(m_pMemoryBuffer->getBufferStart() + pOffset, pLength); 43} 44 45size_t MemoryArea::size() const { 46 return m_pMemoryBuffer->getBufferSize(); 47} 48 49} // namespace mcld 50