Can we just extend llvm's mapped_file_region to support a boolean Writable flag?
On Wed, Nov 15, 2017 at 8:03 AM Pavel Labath via Phabricator < revi...@reviews.llvm.org> wrote: > labath created this revision. > Herald added subscribers: krytarowski, arichardson, aprantl, emaste. > > We sometimes need to write to the object file we've mapped into memory, > generally to apply relocations to debug info sections. We've had that > ability before, but with the introduction of DataBufferLLVM, we have > lost it, as the underlying llvm class (MemoryBuffer) only supports > read-only mappings. The way DataBufferLLVM implemented writable buffers > was through the Private=true flag, which causes the file contents to be > read into a malloc()ed buffer. > > This wasn't a problem then, since we weren't aware of any cases where we > need to relocate the debug info, and we just always set Private=false > for the cases where we mmapped the full object file. This has changed in > https://reviews.llvm.org/D38142, where needed to relocate the FreeBSD > kernel, and we've flipped > the private flag to true, without even realising the full impact of > that. (The impact is significant slowdown in debug info loading and a > huge number of dirty pages). > > This (not particularly elegant) commit tries to restore the performance > and bring down memory usage by bringing back the private copy-on-write > file mappings. It does this by falling back to the lower-level llvm > primitive (mapped_file_region), which supports this type of mappings. > Unfortunately, this primitive does not support non-mmapped regions, so > for volatile regions I have to still use the MemoryBuffer class. > > I have also removed the "Private" argument to DataBufferLLVM factory > functions -- what it really meant was "read-only", but we generally > assume all our databuffers are writable. If we ever want to have > read-only buffers, we can bring it back with an appropriate name. > > > https://reviews.llvm.org/D40079 > > Files: > include/lldb/Utility/DataBufferLLVM.h > source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp > source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp > source/Utility/DataBufferLLVM.cpp > >
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits