summaryrefslogtreecommitdiff
path: root/lldb
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2018-11-10 22:44:06 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2018-11-10 22:44:06 +0000
commit6bce2105c78fbb7128ddfc16a74cec418a6f52b1 (patch)
tree5d9d2caa22eb2a534e2df37114806c1b7493a308 /lldb
parent5a7184b15b721d2513ce0c4585b336dde152510f (diff)
Extract construction of DataBufferLLVM into FileSystem
This moves construction of data buffers into the FileSystem class. Like some of the previous refactorings we don't translate the path yet because the functionality hasn't been landed in LLVM yet. Differential revision: https://reviews.llvm.org/D54272
Diffstat (limited to 'lldb')
-rw-r--r--lldb/include/lldb/Host/FileSystem.h17
-rw-r--r--lldb/include/lldb/Utility/DataBufferLLVM.h8
-rw-r--r--lldb/source/API/SBSection.cpp3
-rw-r--r--lldb/source/Commands/CommandObjectMemory.cpp2
-rw-r--r--lldb/source/Core/SourceManager.cpp4
-rw-r--r--lldb/source/Host/common/FileSystem.cpp38
-rw-r--r--lldb/source/Host/common/Host.cpp2
-rw-r--r--lldb/source/Host/linux/Host.cpp3
-rw-r--r--lldb/source/Interpreter/OptionValueFileSpec.cpp4
-rw-r--r--lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp6
-rw-r--r--lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp5
-rw-r--r--lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp3
-rw-r--r--lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp5
-rw-r--r--lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp5
-rw-r--r--lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp8
-rw-r--r--lldb/source/Symbol/ObjectFile.cpp14
-rw-r--r--lldb/source/Utility/DataBufferLLVM.cpp28
-rw-r--r--lldb/unittests/Process/minidump/MinidumpParserTest.cpp12
18 files changed, 94 insertions, 73 deletions
diff --git a/lldb/include/lldb/Host/FileSystem.h b/lldb/include/lldb/Host/FileSystem.h
index 730cbd2a421..2122860a5f6 100644
--- a/lldb/include/lldb/Host/FileSystem.h
+++ b/lldb/include/lldb/Host/FileSystem.h
@@ -11,6 +11,7 @@
#define liblldb_Host_FileSystem_h
#include "lldb/Host/File.h"
+#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/FileSpec.h"
#include "lldb/Utility/Status.h"
@@ -94,6 +95,12 @@ public:
bool IsDirectory(const llvm::Twine &path) const;
/// @}
+ /// Returns whether the given path is local to the file system.
+ /// @{
+ bool IsLocal(const FileSpec &file_spec) const;
+ bool IsLocal(const llvm::Twine &path) const;
+ /// @}
+
/// Make the given file path absolute.
/// @{
std::error_code MakeAbsolute(llvm::SmallVectorImpl<char> &path) const;
@@ -106,6 +113,16 @@ public:
void Resolve(FileSpec &file_spec);
/// @}
+ //// Create memory buffer from path.
+ /// @{
+ std::shared_ptr<DataBufferLLVM> CreateDataBuffer(const llvm::Twine &path,
+ uint64_t size = 0,
+ uint64_t offset = 0);
+ std::shared_ptr<DataBufferLLVM> CreateDataBuffer(const FileSpec &file_spec,
+ uint64_t size = 0,
+ uint64_t offset = 0);
+ /// @}
+
/// Call into the Host to see if it can help find the file.
bool ResolveExecutableLocation(FileSpec &file_spec);
diff --git a/lldb/include/lldb/Utility/DataBufferLLVM.h b/lldb/include/lldb/Utility/DataBufferLLVM.h
index d76582cbf47..533b7777083 100644
--- a/lldb/include/lldb/Utility/DataBufferLLVM.h
+++ b/lldb/include/lldb/Utility/DataBufferLLVM.h
@@ -23,16 +23,11 @@ class Twine;
namespace lldb_private {
+class FileSystem;
class DataBufferLLVM : public DataBuffer {
public:
~DataBufferLLVM();
- static std::shared_ptr<DataBufferLLVM>
- CreateSliceFromPath(const llvm::Twine &Path, uint64_t Size, uint64_t Offset);
-
- static std::shared_ptr<DataBufferLLVM>
- CreateFromPath(const llvm::Twine &Path);
-
uint8_t *GetBytes() override;
const uint8_t *GetBytes() const override;
lldb::offset_t GetByteSize() const override;
@@ -40,6 +35,7 @@ public:
char *GetChars() { return reinterpret_cast<char *>(GetBytes()); }
private:
+ friend FileSystem;
/// Construct a DataBufferLLVM from \p Buffer. \p Buffer must be a valid
/// pointer.
explicit DataBufferLLVM(std::unique_ptr<llvm::WritableMemoryBuffer> Buffer);
diff --git a/lldb/source/API/SBSection.cpp b/lldb/source/API/SBSection.cpp
index 9da5d170da9..7193857d128 100644
--- a/lldb/source/API/SBSection.cpp
+++ b/lldb/source/API/SBSection.cpp
@@ -14,7 +14,6 @@
#include "lldb/Core/Section.h"
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Utility/DataBuffer.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/DataExtractor.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/StreamString.h"
@@ -166,7 +165,7 @@ SBData SBSection::GetSectionData(uint64_t offset, uint64_t size) {
else
file_size = 0;
}
- auto data_buffer_sp = DataBufferLLVM::CreateSliceFromPath(
+ auto data_buffer_sp = FileSystem::Instance().CreateDataBuffer(
objfile->GetFileSpec().GetPath(), file_size, file_offset);
if (data_buffer_sp && data_buffer_sp->GetByteSize() > 0) {
DataExtractorSP data_extractor_sp(
diff --git a/lldb/source/Commands/CommandObjectMemory.cpp b/lldb/source/Commands/CommandObjectMemory.cpp
index 6cec77785d3..27761585a76 100644
--- a/lldb/source/Commands/CommandObjectMemory.cpp
+++ b/lldb/source/Commands/CommandObjectMemory.cpp
@@ -1361,7 +1361,7 @@ protected:
size_t length = SIZE_MAX;
if (item_byte_size > 1)
length = item_byte_size;
- auto data_sp = DataBufferLLVM::CreateSliceFromPath(
+ auto data_sp = FileSystem::Instance().CreateDataBuffer(
m_memory_options.m_infile.GetPath(), length,
m_memory_options.m_infile_offset);
if (data_sp) {
diff --git a/lldb/source/Core/SourceManager.cpp b/lldb/source/Core/SourceManager.cpp
index 58c414b4346..41bc0d85792 100644
--- a/lldb/source/Core/SourceManager.cpp
+++ b/lldb/source/Core/SourceManager.cpp
@@ -442,7 +442,7 @@ void SourceManager::File::CommonInitializer(const FileSpec &file_spec,
}
if (m_mod_time != llvm::sys::TimePoint<>())
- m_data_sp = DataBufferLLVM::CreateFromPath(m_file_spec.GetPath());
+ m_data_sp = FileSystem::Instance().CreateDataBuffer(m_file_spec);
}
uint32_t SourceManager::File::GetLineOffset(uint32_t line) {
@@ -520,7 +520,7 @@ void SourceManager::File::UpdateIfNeeded() {
if (curr_mod_time != llvm::sys::TimePoint<>() &&
m_mod_time != curr_mod_time) {
m_mod_time = curr_mod_time;
- m_data_sp = DataBufferLLVM::CreateFromPath(m_file_spec.GetPath());
+ m_data_sp = FileSystem::Instance().CreateDataBuffer(m_file_spec);
m_offsets.clear();
}
}
diff --git a/lldb/source/Host/common/FileSystem.cpp b/lldb/source/Host/common/FileSystem.cpp
index a9ed5bd1847..95b453073cc 100644
--- a/lldb/source/Host/common/FileSystem.cpp
+++ b/lldb/source/Host/common/FileSystem.cpp
@@ -135,6 +135,16 @@ bool FileSystem::IsDirectory(const FileSpec &file_spec) const {
return IsDirectory(file_spec.GetPath());
}
+bool FileSystem::IsLocal(const Twine &path) const {
+ bool b;
+ m_fs->isLocal(path, b);
+ return b;
+}
+
+bool FileSystem::IsLocal(const FileSpec &file_spec) const {
+ return IsLocal(file_spec.GetPath());
+}
+
void FileSystem::EnumerateDirectory(Twine path, bool find_directories,
bool find_files, bool find_other,
EnumerateDirectoryCallbackType callback,
@@ -218,6 +228,34 @@ void FileSystem::Resolve(FileSpec &file_spec) {
file_spec.SetIsResolved(true);
}
+std::shared_ptr<DataBufferLLVM>
+FileSystem::CreateDataBuffer(const llvm::Twine &path, uint64_t size,
+ uint64_t offset) {
+ const bool is_volatile = !IsLocal(path);
+
+ std::unique_ptr<llvm::WritableMemoryBuffer> buffer;
+ if (size == 0) {
+ auto buffer_or_error =
+ llvm::WritableMemoryBuffer::getFile(path, -1, is_volatile);
+ if (!buffer_or_error)
+ return nullptr;
+ buffer = std::move(*buffer_or_error);
+ } else {
+ auto buffer_or_error = llvm::WritableMemoryBuffer::getFileSlice(
+ path, size, offset, is_volatile);
+ if (!buffer_or_error)
+ return nullptr;
+ buffer = std::move(*buffer_or_error);
+ }
+ return std::shared_ptr<DataBufferLLVM>(new DataBufferLLVM(std::move(buffer)));
+}
+
+std::shared_ptr<DataBufferLLVM>
+FileSystem::CreateDataBuffer(const FileSpec &file_spec, uint64_t size,
+ uint64_t offset) {
+ return CreateDataBuffer(file_spec.GetPath(), size, offset);
+}
+
bool FileSystem::ResolveExecutableLocation(FileSpec &file_spec) {
// If the directory is set there's nothing to do.
const ConstString &directory = file_spec.GetDirectory();
diff --git a/lldb/source/Host/common/Host.cpp b/lldb/source/Host/common/Host.cpp
index 65534b9b551..2cc3f296388 100644
--- a/lldb/source/Host/common/Host.cpp
+++ b/lldb/source/Host/common/Host.cpp
@@ -565,7 +565,7 @@ Status Host::RunShellCommand(const Args &args, const FileSpec &working_dir,
"shell command output is too large to fit into a std::string");
} else {
auto Buffer =
- DataBufferLLVM::CreateFromPath(output_file_spec.GetPath());
+ FileSystem::Instance().CreateDataBuffer(output_file_spec);
if (error.Success())
command_output_ptr->assign(Buffer->GetChars(),
Buffer->GetByteSize());
diff --git a/lldb/source/Host/linux/Host.cpp b/lldb/source/Host/linux/Host.cpp
index 35a03f4b161..5bb62a4c3b9 100644
--- a/lldb/source/Host/linux/Host.cpp
+++ b/lldb/source/Host/linux/Host.cpp
@@ -31,7 +31,6 @@
#include "lldb/Host/Host.h"
#include "lldb/Host/HostInfo.h"
#include "lldb/Host/linux/Support.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/DataExtractor.h"
using namespace lldb;
@@ -125,7 +124,7 @@ static bool IsDirNumeric(const char *dname) {
static ArchSpec GetELFProcessCPUType(llvm::StringRef exe_path) {
Log *log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST);
- auto buffer_sp = DataBufferLLVM::CreateSliceFromPath(exe_path, 0x20, 0);
+ auto buffer_sp = FileSystem::Instance().CreateDataBuffer(exe_path, 0x20, 0);
if (!buffer_sp)
return ArchSpec();
diff --git a/lldb/source/Interpreter/OptionValueFileSpec.cpp b/lldb/source/Interpreter/OptionValueFileSpec.cpp
index 92b49002387..735a7d86334 100644
--- a/lldb/source/Interpreter/OptionValueFileSpec.cpp
+++ b/lldb/source/Interpreter/OptionValueFileSpec.cpp
@@ -14,7 +14,6 @@
#include "lldb/Interpreter/CommandCompletions.h"
#include "lldb/Interpreter/CommandInterpreter.h"
#include "lldb/Utility/Args.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/State.h"
using namespace lldb;
@@ -114,7 +113,8 @@ const lldb::DataBufferSP &OptionValueFileSpec::GetFileContents() {
const auto file_mod_time = FileSystem::Instance().GetModificationTime(m_current_value);
if (m_data_sp && m_data_mod_time == file_mod_time)
return m_data_sp;
- m_data_sp = DataBufferLLVM::CreateFromPath(m_current_value.GetPath());
+ m_data_sp =
+ FileSystem::Instance().CreateDataBuffer(m_current_value.GetPath());
m_data_mod_time = file_mod_time;
}
return m_data_sp;
diff --git a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
index 26fec938838..1ec1a42562f 100644
--- a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
@@ -40,7 +40,6 @@
#include "lldb/Target/Thread.h"
#include "lldb/Utility/Args.h"
#include "lldb/Utility/ConstString.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/RegisterValue.h"
#include "lldb/Utility/RegularExpression.h"
@@ -2544,7 +2543,7 @@ bool RenderScriptRuntime::LoadAllocation(Stream &strm, const uint32_t alloc_id,
}
// Read file into data buffer
- auto data_sp = DataBufferLLVM::CreateFromPath(file.GetPath());
+ auto data_sp = FileSystem::Instance().CreateDataBuffer(file.GetPath());
// Cast start of buffer to FileHeader and use pointer to read metadata
void *file_buf = data_sp->GetBytes();
@@ -3085,7 +3084,8 @@ bool RSModuleDescriptor::ParseRSInfo() {
const addr_t size = info_sym->GetByteSize();
const FileSpec fs = m_module->GetFileSpec();
- auto buffer = DataBufferLLVM::CreateSliceFromPath(fs.GetPath(), size, addr);
+ auto buffer =
+ FileSystem::Instance().CreateDataBuffer(fs.GetPath(), size, addr);
if (!buffer)
return false;
diff --git a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
index 347870ec231..ae7409352c5 100644
--- a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
+++ b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
@@ -33,7 +33,6 @@ typedef struct ar_hdr {
#include "lldb/Host/FileSystem.h"
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Utility/ArchSpec.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/Stream.h"
#include "lldb/Utility/Timer.h"
@@ -313,7 +312,7 @@ ObjectContainer *ObjectContainerBSDArchive::CreateInstance(
// file gets updated by a new build while this .a file is being used for
// debugging
DataBufferSP archive_data_sp =
- DataBufferLLVM::CreateSliceFromPath(file->GetPath(), length, file_offset);
+ FileSystem::Instance().CreateDataBuffer(*file, length, file_offset);
if (!archive_data_sp)
return nullptr;
@@ -468,7 +467,7 @@ size_t ObjectContainerBSDArchive::GetModuleSpecifications(
if (!archive_sp) {
set_archive_arch = true;
data_sp =
- DataBufferLLVM::CreateSliceFromPath(file.GetPath(), file_size, file_offset);
+ FileSystem::Instance().CreateDataBuffer(file, file_size, file_offset);
if (data_sp) {
data.SetData(data_sp, 0, data_sp->GetByteSize());
archive_sp = Archive::ParseAndCacheArchiveForFile(
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index 37ee0843182..597bbf2c7de 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -33,7 +33,6 @@
#include "lldb/Target/Platform.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/Target.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/Status.h"
#include "lldb/Utility/Timer.h"
@@ -1170,7 +1169,7 @@ const char *PlatformDarwin::GetDeveloperDirectory() {
xcode_dir_path.append("/usr/share/xcode-select/xcode_dir_path");
temp_file_spec.SetFile(xcode_dir_path, FileSpec::Style::native);
auto dir_buffer =
- DataBufferLLVM::CreateFromPath(temp_file_spec.GetPath());
+ FileSystem::Instance().CreateDataBuffer(temp_file_spec.GetPath());
if (dir_buffer && dir_buffer->GetByteSize() > 0) {
llvm::StringRef path_ref(dir_buffer->GetChars());
// Trim tailing newlines and make sure there is enough room for a null
diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
index 70a1e55628e..f6bae274d5e 100644
--- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
+++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
@@ -23,7 +23,6 @@
#include "lldb/Target/Target.h"
#include "lldb/Target/UnixSignals.h"
#include "lldb/Utility/DataBufferHeap.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/State.h"
@@ -61,8 +60,8 @@ lldb::ProcessSP ProcessElfCore::CreateInstance(lldb::TargetSP target_sp,
// the header extension.
const size_t header_size = sizeof(llvm::ELF::Elf64_Ehdr);
- auto data_sp = DataBufferLLVM::CreateSliceFromPath(crash_file->GetPath(),
- header_size, 0);
+ auto data_sp = FileSystem::Instance().CreateDataBuffer(
+ crash_file->GetPath(), header_size, 0);
if (data_sp && data_sp->GetByteSize() == header_size &&
elf::ELFHeader::MagicBytesMatch(data_sp->GetBytes())) {
elf::ELFHeader elf_header;
diff --git a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp
index 6234c5c5bd7..5533dac80bf 100644
--- a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp
+++ b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp
@@ -29,7 +29,6 @@
#include "lldb/Target/Target.h"
#include "lldb/Target/Thread.h"
#include "lldb/Utility/DataBuffer.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/State.h"
@@ -67,8 +66,8 @@ lldb::ProcessSP ProcessMachCore::CreateInstance(lldb::TargetSP target_sp,
lldb::ProcessSP process_sp;
if (crash_file) {
const size_t header_size = sizeof(llvm::MachO::mach_header);
- auto data_sp =
- DataBufferLLVM::CreateSliceFromPath(crash_file->GetPath(), header_size, 0);
+ auto data_sp = FileSystem::Instance().CreateDataBuffer(
+ crash_file->GetPath(), header_size, 0);
if (data_sp && data_sp->GetByteSize() == header_size) {
DataExtractor data(data_sp, lldb::eByteOrderLittle, 4);
diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
index f1691de7fe8..269a16285d1 100644
--- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
+++ b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
@@ -21,7 +21,6 @@
#include "lldb/Target/SectionLoadList.h"
#include "lldb/Target/Target.h"
#include "lldb/Target/UnixSignals.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/LLDBAssert.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/State.h"
@@ -101,8 +100,8 @@ lldb::ProcessSP ProcessMinidump::CreateInstance(lldb::TargetSP target_sp,
lldb::ProcessSP process_sp;
// Read enough data for the Minidump header
constexpr size_t header_size = sizeof(MinidumpHeader);
- auto DataPtr =
- DataBufferLLVM::CreateSliceFromPath(crash_file->GetPath(), header_size, 0);
+ auto DataPtr = FileSystem::Instance().CreateDataBuffer(crash_file->GetPath(),
+ header_size, 0);
if (!DataPtr)
return nullptr;
@@ -114,7 +113,8 @@ lldb::ProcessSP ProcessMinidump::CreateInstance(lldb::TargetSP target_sp,
if (header == nullptr)
return nullptr;
- auto AllData = DataBufferLLVM::CreateSliceFromPath(crash_file->GetPath(), -1, 0);
+ auto AllData =
+ FileSystem::Instance().CreateDataBuffer(crash_file->GetPath(), -1, 0);
if (!AllData)
return nullptr;
diff --git a/lldb/source/Symbol/ObjectFile.cpp b/lldb/source/Symbol/ObjectFile.cpp
index bd94ec0ad8c..d56acd230c3 100644
--- a/lldb/source/Symbol/ObjectFile.cpp
+++ b/lldb/source/Symbol/ObjectFile.cpp
@@ -19,7 +19,6 @@
#include "lldb/Target/Target.h"
#include "lldb/Utility/DataBuffer.h"
#include "lldb/Utility/DataBufferHeap.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/RegularExpression.h"
#include "lldb/Utility/Timer.h"
@@ -75,8 +74,8 @@ ObjectFile::FindPlugin(const lldb::ModuleSP &module_sp, const FileSpec *file,
// container plug-ins can use these bytes to see if they can parse this
// file.
if (file_size > 0) {
- data_sp =
- DataBufferLLVM::CreateSliceFromPath(file->GetPath(), 512, file_offset);
+ data_sp = FileSystem::Instance().CreateDataBuffer(file->GetPath(),
+ 512, file_offset);
data_offset = 0;
}
}
@@ -120,8 +119,8 @@ ObjectFile::FindPlugin(const lldb::ModuleSP &module_sp, const FileSpec *file,
}
// We failed to find any cached object files in the container plug-
// ins, so lets read the first 512 bytes and try again below...
- data_sp = DataBufferLLVM::CreateSliceFromPath(archive_file.GetPath(),
- 512, file_offset);
+ data_sp = FileSystem::Instance().CreateDataBuffer(
+ archive_file.GetPath(), 512, file_offset);
}
}
}
@@ -209,7 +208,8 @@ size_t ObjectFile::GetModuleSpecifications(const FileSpec &file,
lldb::offset_t file_offset,
lldb::offset_t file_size,
ModuleSpecList &specs) {
- DataBufferSP data_sp = DataBufferLLVM::CreateSliceFromPath(file.GetPath(), 512, file_offset);
+ DataBufferSP data_sp =
+ FileSystem::Instance().CreateDataBuffer(file.GetPath(), 512, file_offset);
if (data_sp) {
if (file_size == 0) {
const lldb::offset_t actual_file_size =
@@ -682,5 +682,5 @@ void ObjectFile::RelocateSection(lldb_private::Section *section)
DataBufferSP ObjectFile::MapFileData(const FileSpec &file, uint64_t Size,
uint64_t Offset) {
- return DataBufferLLVM::CreateSliceFromPath(file.GetPath(), Size, Offset);
+ return FileSystem::Instance().CreateDataBuffer(file.GetPath(), Size, Offset);
}
diff --git a/lldb/source/Utility/DataBufferLLVM.cpp b/lldb/source/Utility/DataBufferLLVM.cpp
index 713c3c2814e..a31b5b76d2e 100644
--- a/lldb/source/Utility/DataBufferLLVM.cpp
+++ b/lldb/source/Utility/DataBufferLLVM.cpp
@@ -27,34 +27,6 @@ DataBufferLLVM::DataBufferLLVM(
DataBufferLLVM::~DataBufferLLVM() {}
-std::shared_ptr<DataBufferLLVM>
-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<DataBufferLLVM>(
- new DataBufferLLVM(std::move(*Buffer)));
-}
-
-std::shared_ptr<DataBufferLLVM>
-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<DataBufferLLVM>(
- new DataBufferLLVM(std::move(*Buffer)));
-}
-
uint8_t *DataBufferLLVM::GetBytes() {
return reinterpret_cast<uint8_t *>(Buffer->getBufferStart());
}
diff --git a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp
index cf4873fbc4f..0ada7740a91 100644
--- a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp
+++ b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp
@@ -16,9 +16,9 @@
#include "Plugins/Process/minidump/RegisterContextMinidump_x86_64.h"
#include "TestingSupport/TestUtilities.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Target/MemoryRegionInfo.h"
#include "lldb/Utility/ArchSpec.h"
-#include "lldb/Utility/DataBufferLLVM.h"
#include "lldb/Utility/DataExtractor.h"
#include "lldb/Utility/FileSpec.h"
#include "llvm/ADT/ArrayRef.h"
@@ -38,9 +38,13 @@ using namespace minidump;
class MinidumpParserTest : public testing::Test {
public:
+ void SetUp() override { FileSystem::Initialize(); }
+
+ void TearDown() override { FileSystem::Terminate(); }
+
void SetUpData(const char *minidump_filename) {
std::string filename = GetInputFilePath(minidump_filename);
- auto BufferPtr = DataBufferLLVM::CreateSliceFromPath(filename, -1, 0);
+ auto BufferPtr = FileSystem::Instance().CreateDataBuffer(filename, -1, 0);
ASSERT_NE(BufferPtr, nullptr);
llvm::Optional<MinidumpParser> optional_parser =
MinidumpParser::Create(BufferPtr);
@@ -54,7 +58,7 @@ public:
void InvalidMinidump(const char *minidump_filename, uint64_t load_size) {
std::string filename = GetInputFilePath(minidump_filename);
auto BufferPtr =
- DataBufferLLVM::CreateSliceFromPath(filename, load_size, 0);
+ FileSystem::Instance().CreateDataBuffer(filename, load_size, 0);
ASSERT_NE(BufferPtr, nullptr);
llvm::Optional<MinidumpParser> optional_parser =
@@ -89,7 +93,7 @@ TEST_F(MinidumpParserTest, GetThreadListNotPadded) {
// after the thread count.
SetUpData("thread-list-not-padded.dmp");
llvm::ArrayRef<MinidumpThread> thread_list;
-
+
thread_list = parser->GetThreads();
ASSERT_EQ(2UL, thread_list.size());
EXPECT_EQ(0x11223344UL, thread_list[0].thread_id);