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