<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hi,</div><div><br></div><div>I recently started debugging early OS boot stages. I mainly do it by using a VM with a gdbstub (I use both vmware and qemu). I am using lldb with the "gdb-remote" command to connect to the stub.<br></div><div><br></div><div>The one thing that is really missing is the ability to read/write to physical memory addresses.</div><div>I looked a bit at the gdb protocol and it only supports 'm' and 'M' for reading and writing to virtual memory, and nothing for physical memory.</div><div><br></div><div>So I suggest we add a new extensions to the gdb protocol:</div><div>QReadPhysicalMemory - works just like 'm', but with physical memory.</div><div>
QWritePhysicalMemory - works just like 'M', but with physical memory. <br></div><div><br></div><div>I am willing to work on adding support for this in lldb and in qemu. In fact, the qemu part was so easy and straightforward, that I already have a <a href="https://github.com/DanielShaulov/qemu/pull/1">branch ready with the change.</a></div><div><br></div><div>The lldb part is a bit more tricky. At the core, changing 
ProcessGDBRemote.cpp:2776, writing¬†
<span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-s"><span class="gmail-pl-pds gmail-x gmail-x-first"></span><span class="gmail-x">"QReadPhysicalMemory"</span><span class="gmail-pl-pds gmail-x gmail-x-last"></span></span></span> instead of 'm', is enough to change ALL the reads to physical memory. But we don't want that. So we need to add a new flag to CommandObjectMemoryRead, and pass it in CommandObjectMemory.cpp:669, then pass the flag to Process::ReadMemory. Here it gets a bit tricky, since Process::ReadMemory has a cache, so we can't just pass the flag to ReadMemoryFromInferior, we need to have a separate cache for it.</div><div>I guess I need a similar change for physical writes, but haven't yet looked at the code flow.<br></div><div><br></div><div>This will take a bit of time to write, so I wanted to make sure that it's the right way to go before starting.<br></div><div><br></div><div>So, my questions are:</div><div>1. Is this the best way to implement what I want in lldb?</div><div>2. Is this a change that the lldb community will accept?<br></div><div>3. I know it's the wrong place to ask, but does anyone know how accepting the qemu community will be with the patch? Have they ever accepted patches aimed at making lldb work better with the gdbstub, or is it strictly for debugging with gdb proper?</div><div><br></div><div>Thanks, Daniel.<br></div><br></div></div></div></div></div></div></div>