DataBufferLLVM.cpp revision 317032
1//===--- DataBufferLLVM.cpp -------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "lldb/Utility/DataBufferLLVM.h" 11 12#include "llvm/ADT/Twine.h" 13#include "llvm/Support/FileSystem.h" 14#include "llvm/Support/MemoryBuffer.h" 15 16#include <assert.h> // for assert 17#include <type_traits> // for move 18 19using namespace lldb_private; 20 21DataBufferLLVM::DataBufferLLVM(std::unique_ptr<llvm::MemoryBuffer> MemBuffer) 22 : Buffer(std::move(MemBuffer)) { 23 assert(Buffer != nullptr && 24 "Cannot construct a DataBufferLLVM with a null buffer"); 25} 26 27DataBufferLLVM::~DataBufferLLVM() {} 28 29std::shared_ptr<DataBufferLLVM> 30DataBufferLLVM::CreateSliceFromPath(const llvm::Twine &Path, uint64_t Size, 31 uint64_t Offset, bool Private) { 32 // If the file resides non-locally, pass the volatile flag so that we don't 33 // mmap it. 34 if (!Private) 35 Private = !llvm::sys::fs::is_local(Path); 36 37 auto Buffer = llvm::MemoryBuffer::getFileSlice(Path, Size, Offset, Private); 38 if (!Buffer) 39 return nullptr; 40 return std::shared_ptr<DataBufferLLVM>( 41 new DataBufferLLVM(std::move(*Buffer))); 42} 43 44std::shared_ptr<DataBufferLLVM> 45DataBufferLLVM::CreateFromPath(const llvm::Twine &Path, bool NullTerminate, bool Private) { 46 // If the file resides non-locally, pass the volatile flag so that we don't 47 // mmap it. 48 if (!Private) 49 Private = !llvm::sys::fs::is_local(Path); 50 51 auto Buffer = llvm::MemoryBuffer::getFile(Path, -1, NullTerminate, Private); 52 if (!Buffer) 53 return nullptr; 54 return std::shared_ptr<DataBufferLLVM>( 55 new DataBufferLLVM(std::move(*Buffer))); 56} 57 58uint8_t *DataBufferLLVM::GetBytes() { 59 return const_cast<uint8_t *>(GetBuffer()); 60} 61 62const uint8_t *DataBufferLLVM::GetBytes() const { return GetBuffer(); } 63 64lldb::offset_t DataBufferLLVM::GetByteSize() const { 65 return Buffer->getBufferSize(); 66} 67 68const uint8_t *DataBufferLLVM::GetBuffer() const { 69 return reinterpret_cast<const uint8_t *>(Buffer->getBufferStart()); 70} 71