blob: e42765891c84794db3ff844c0ea48cb40541ef57 [file] [log] [blame]
Zachary Turner3f4a4b32017-02-24 18:56:49 +00001//===--- 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/Core/DataBufferLLVM.h"
11
12#include "lldb/Host/FileSpec.h"
13#include "llvm/Support/FileSystem.h"
14#include "llvm/Support/MemoryBuffer.h"
15
16using namespace lldb_private;
17
18DataBufferLLVM::DataBufferLLVM(std::unique_ptr<llvm::MemoryBuffer> MemBuffer)
19 : Buffer(std::move(MemBuffer)) {
20 assert(Buffer != nullptr &&
21 "Cannot construct a DataBufferLLVM with a null buffer");
22}
23
24DataBufferLLVM::~DataBufferLLVM() {}
25
26std::shared_ptr<DataBufferLLVM>
27DataBufferLLVM::CreateFromPath(llvm::StringRef Path, uint64_t Size,
28 uint64_t Offset) {
29 // If the file resides non-locally, pass the volatile flag so that we don't
30 // mmap it.
31 bool Volatile = !llvm::sys::fs::is_local(Path);
32
33 auto Buffer = llvm::MemoryBuffer::getFileSlice(Path, Size, Offset, Volatile);
34 if (!Buffer)
35 return nullptr;
36 return std::shared_ptr<DataBufferLLVM>(
37 new DataBufferLLVM(std::move(*Buffer)));
38}
39
40std::shared_ptr<DataBufferLLVM>
41DataBufferLLVM::CreateFromFileSpec(const FileSpec &F, uint64_t Size,
42 uint64_t Offset) {
43 return CreateFromPath(F.GetPath(), Size, Offset);
44}
45
46uint8_t *DataBufferLLVM::GetBytes() {
47 return const_cast<uint8_t *>(GetBuffer());
48}
49
50const uint8_t *DataBufferLLVM::GetBytes() const { return GetBuffer(); }
51
52lldb::offset_t DataBufferLLVM::GetByteSize() const {
53 return Buffer->getBufferSize();
54}
55
56const uint8_t *DataBufferLLVM::GetBuffer() const {
57 return reinterpret_cast<const uint8_t *>(Buffer->getBufferStart());
58}