15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MemoryArea.cpp -----------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/MemoryArea.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/MsgHandling.h" 110dea6bc96bb52346737966839ac68644f7939f58Stephen Hines 120dea6bc96bb52346737966839ac68644f7939f58Stephen Hines#include <llvm/Support/ErrorOr.h> 1387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <cassert> 150dea6bc96bb52346737966839ac68644f7939f58Stephen Hines#include <system_error> 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===--------------------------------------------------------------------===// 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// MemoryArea 2167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===--------------------------------------------------------------------===// 2237b74a387bb3993387029859c2d9d051c41c724eStephen HinesMemoryArea::MemoryArea(llvm::StringRef pFilename) { 2337b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer> > buffer_or_error = 2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::MemoryBuffer::getFile(pFilename, 2537b74a387bb3993387029859c2d9d051c41c724eStephen Hines /*FileSize*/ -1, 26551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines /*RequiresNullTerminator*/ false); 2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines if (!buffer_or_error) { 28551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines fatal(diag::fatal_cannot_read_input) << pFilename.str(); 29551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 300dea6bc96bb52346737966839ac68644f7939f58Stephen Hines m_pMemoryBuffer = std::move(buffer_or_error.get()); 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3337b74a387bb3993387029859c2d9d051c41c724eStephen HinesMemoryArea::MemoryArea(const char* pMemBuffer, size_t pSize) { 3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines llvm::StringRef mem(pMemBuffer, pSize); 3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pMemoryBuffer = 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::MemoryBuffer::getMemBuffer(mem, 3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines /*BufferName*/ "NaN", 3887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /*RequiresNullTerminator*/ false); 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesllvm::StringRef MemoryArea::request(size_t pOffset, size_t pLength) { 4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines return llvm::StringRef(m_pMemoryBuffer->getBufferStart() + pOffset, pLength); 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4537b74a387bb3993387029859c2d9d051c41c724eStephen Hinessize_t MemoryArea::size() const { 4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines return m_pMemoryBuffer->getBufferSize(); 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines 4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 50