//===--- DataBufferLLVM.cpp -------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "lldb/Utility/DataBufferLLVM.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" #include // for assert #include // for move using namespace lldb_private; DataBufferLLVM::DataBufferLLVM( std::unique_ptr MemBuffer) : Buffer(std::move(MemBuffer)) { assert(Buffer != nullptr && "Cannot construct a DataBufferLLVM with a null buffer"); } DataBufferLLVM::~DataBufferLLVM() {} std::shared_ptr DataBufferLLVM::CreateSliceFromPath(const llvm::Twine &Path, uint64_t Size, uint64_t Offset) { // If the file resides non-locally, pass the volatile flag so that we don't // mmap it. bool IsVolatile = !llvm::sys::fs::is_local(Path); auto Buffer = llvm::WritableMemoryBuffer::getFileSlice(Path, Size, Offset, IsVolatile); if (!Buffer) return nullptr; return std::shared_ptr( new DataBufferLLVM(std::move(*Buffer))); } std::shared_ptr DataBufferLLVM::CreateFromPath(const llvm::Twine &Path) { // If the file resides non-locally, pass the volatile flag so that we don't // mmap it. bool IsVolatile = !llvm::sys::fs::is_local(Path); auto Buffer = llvm::WritableMemoryBuffer::getFile(Path, -1, IsVolatile); if (!Buffer) return nullptr; return std::shared_ptr( new DataBufferLLVM(std::move(*Buffer))); } uint8_t *DataBufferLLVM::GetBytes() { return reinterpret_cast(Buffer->getBufferStart()); } const uint8_t *DataBufferLLVM::GetBytes() const { return reinterpret_cast(Buffer->getBufferStart()); } lldb::offset_t DataBufferLLVM::GetByteSize() const { return Buffer->getBufferSize(); }