MemoryArea.cpp revision 551ae4ebd3e9d137ea668fb83ae4a55b8cfba451
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#include <llvm/Support/system_error.h> 12 13#include <cassert> 14 15using namespace mcld; 16 17//===--------------------------------------------------------------------===// 18// MemoryArea 19//===--------------------------------------------------------------------===// 20MemoryArea::MemoryArea(llvm::StringRef pFilename) 21{ 22 llvm::error_code ec = 23 llvm::MemoryBuffer::getFile(pFilename, m_pMemoryBuffer, /*FileSize*/ -1, 24 /*RequiresNullTerminator*/ false); 25 if (ec != llvm::errc::success) { 26 fatal(diag::fatal_cannot_read_input) << pFilename.str(); 27 } 28} 29 30MemoryArea::MemoryArea(const char* pMemBuffer, size_t pSize) 31{ 32 llvm::StringRef mem(pMemBuffer, pSize); 33 llvm::MemoryBuffer* buffer = 34 llvm::MemoryBuffer::getMemBuffer(mem, /*BufferName*/ "NaN", 35 /*RequiresNullTerminator*/ false); 36 assert(buffer != NULL); 37 m_pMemoryBuffer.reset(buffer); 38} 39 40llvm::StringRef MemoryArea::request(size_t pOffset, size_t pLength) 41{ 42 return llvm::StringRef(m_pMemoryBuffer->getBufferStart() + pOffset, pLength); 43} 44 45size_t MemoryArea::size() const 46{ 47 return m_pMemoryBuffer->getBufferSize(); 48} 49