https://github.com/clayborg commented:

Thinking about this some more here are my thoughts: both `ObjectFile::PeekData` 
and `PostMoretemProcess::PeekMemory` should have a way to say "I am not 
implemented".  Using either a llvm::Expected or std::optional. If 
`ObjectFile::PeekData` returns unimplemented, we need to fall back to 
`ObjectFile::CopyData`. If `PostMoretemProcess::PeekMemory` returns 
unimplemented, we need to fall back to standard 
`PostMoretemProcess::ReadMemory`. The main reason being: some core files are 
too large to mmap into memory and at some point we need to be able to not load 
the entire core file at once. If we don't load the entire core file, then we 
need to allow `PostMoretemProcess::PeekMemory` to succeed for areas it does 
have mapped into the process, and fail for areas where it can't. If we build in 
the fallback stuff as mentioned, then this all continues to work.

So the main idea is: if either ObjectFile or PostMortemProcess can return a 
reference to the data in the Peek calls, then should as long as they have this 
data mapped into the LLDB address space and can hand out a pointer to the data. 
If they can't, we should fall back to something that can copy the data into a 
buffer as mentioned with `CopyData` or `ReadMemory`. Core files or object files 
might compress up their data, in which case we wouldn't be able to hande out a 
buffer from calls to Peek, but we would need to unzip the buffer into the 
buffer supplied by CopyData and ReadMemory on the fly.

https://github.com/llvm/llvm-project/pull/102536
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to