aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Expression/IRExecutionUnit.cpp
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2022-04-01 15:59:18 -0700
committerJonas Devlieghere <jonas@devlieghere.com>2022-04-05 13:46:37 -0700
commitfc54427e76c89e567390dd4a1d64a65568f4ec26 (patch)
treed785373d3b04cb1cee280af9da4d7f510dbeaef0 /lldb/source/Expression/IRExecutionUnit.cpp
parent4169650537622ef278b4d62ef5fb37aeb0ee9f4e (diff)
downloadllvm-fc54427e76c89e567390dd4a1d64a65568f4ec26.tar.gz
llvm-fc54427e76c89e567390dd4a1d64a65568f4ec26.tar.bz2
llvm-fc54427e76c89e567390dd4a1d64a65568f4ec26.zip
[lldb] Refactor DataBuffer so we can map files as read-only
Currently, all data buffers are assumed to be writable. This is a problem on macOS where it's not allowed to load unsigned binaries in memory as writable. To be more precise, MAP_RESILIENT_CODESIGN and MAP_RESILIENT_MEDIA need to be set for mapped (unsigned) binaries on our platform. Binaries are mapped through FileSystem::CreateDataBuffer which returns a DataBufferLLVM. The latter is backed by a llvm::WritableMemoryBuffer because every DataBuffer in LLDB is considered to be writable. In order to use a read-only llvm::MemoryBuffer I had to split our abstraction around it. This patch distinguishes between a DataBuffer (read-only) and WritableDataBuffer (read-write) and updates LLDB to use the appropriate one. rdar://74890607 Differential revision: https://reviews.llvm.org/D122856
Diffstat (limited to 'lldb/source/Expression/IRExecutionUnit.cpp')
-rw-r--r--lldb/source/Expression/IRExecutionUnit.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/lldb/source/Expression/IRExecutionUnit.cpp b/lldb/source/Expression/IRExecutionUnit.cpp
index 91b92f1ba300..49fa72f7112d 100644
--- a/lldb/source/Expression/IRExecutionUnit.cpp
+++ b/lldb/source/Expression/IRExecutionUnit.cpp
@@ -151,7 +151,8 @@ Status IRExecutionUnit::DisassembleFunction(Stream &stream,
return ret;
}
- lldb::DataBufferSP buffer_sp(new DataBufferHeap(func_range.second, 0));
+ lldb::WritableDataBufferSP buffer_sp(
+ new DataBufferHeap(func_range.second, 0));
Process *process = exe_ctx.GetProcessPtr();
Status err;