<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Apr 29, 2020, at 9:28 PM, Rui Hong <<a href="mailto:hongrui16@mails.ucas.ac.cn" class="">hongrui16@mails.ucas.ac.cn</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">Hi LLDB devs,</div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">First<font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span class="Apple-converted-space"> </span>I<span class="Apple-converted-space"> </span><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">would like to express my appreciation and thanks to you all especially<span class="Apple-converted-space"> </span></span></font><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">Greg Clayton and Ted Woodward! Your advice and guidance are quite useful for me!</span></font></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><br class=""></span></font></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">I've been working on other lldb problems and resume solving the "remote loading" issue now. I now fully understand the "remote connection/execution"(what happens after<span class="Apple-converted-space"> </span></span></font><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">gdb-remote and how 'c' or 's' controls the<span class="Apple-converted-space"> </span></span></font><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">execution</span></font>) and the only problem is how to load the program. My simulator starts this way :    ./sim --port 1234    It do not do the "loading program" job when specified with<span class="Apple-converted-space"> </span></span></font><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">--port right now. In order to fit the old GDB style, I prefer to still let lldb to do the "</span></font></span></font><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">loading binary" job.</span></font></span></font></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><br class=""></span></font></span></font></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">To provide more information about my memory architecture : logically, the memory is a whole(one address space), but divided into PM(program memory, starting at address 0x0) and DM(data<span class="Apple-converted-space"> </span></span></font></span></font><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">memory, starting at address 0x80000000</span></font></span></font>). When loading program, the .text section should be loaded into PM and the .data section should be loaded into DM, and nothing more. And yes, only<span class="Apple-converted-space"> </span></span></font></span></font><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">one executable.</span></font></span></font></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><br class=""></span></font></span></font></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">I've tried<span class="Apple-converted-space"> </span></span></font></span></font><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">"target modules load --load"(I'm using lldb 7.0.1 and it implemented this command),</span></font></span></font></div></div></blockquote><div><br class=""></div><div>That LLDB is really old. I would highly recommend building top of tree LLDB for any real work.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""> but the sections to load are not loadable(not<span class="Apple-converted-space"> </span></span></font></span></font><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">PT_LOAD) and triggers no RSP package exchange. </span></font></span></font></div></div></blockquote><div><br class=""></div><div>Are you not building your ELF file correctly? Why are there no PT_LOAD program headers? I would suggest fixing this?</div><br class=""><blockquote type="cite" class=""><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">So I tried "memory write --infile", it triggers a "qMemoryRegionInfo:0" packet to query memory region info and a "M" packet to write memory, but these two packet are not supported by my simulator right now. My<span class="Apple-converted-space"> </span></span></font></span></font><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">simulator supports "X" packet not "M"! When using with the old GDB, "load" command in GDB triggers a few "X" packets</span></font></span></font></div></div></blockquote><div><br class=""></div>So did you extract the section contents yourself into separate files so you can load the memory using "memory write --infile"? qMemoryRegionInfo is not required, so your stub can respond with "$#00" which means unsupported. This is there for people that have flash memory as someone implemented the ability to write to flash with some fancy packets (see ProcessGDBRemote::DoWriteMemory(...) for details).<br class=""><blockquote type="cite" class=""><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><br class=""></span></font></span></font></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">So I want to know:</span></font></span></font></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">1. How to let lldb send "X"<span class="Apple-converted-space"> </span></span></font></span></font><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">packet(perhaps a command) and where is the corresponding code located?(to let my simulator support "M" packet is also OK, but using the existing code that handles "X" packet is much easier)</span></font></span></font></span></font></span></font></div></div></blockquote><div><br class=""></div>We support the x packet, but right now it is hooked up only for memory reads since not a lot of clients do large memory writes. In order for the "x" packet for memory reads to be used, we try and detect if it is supported for "x" packet (binary memory read) by sending a "x0,0" packet. if "OK" is returned we say it is supported. So you will need to modify:</div><div><br class=""></div><div>size_t ProcessGDBRemote::DoWriteMemory(addr_t addr, const void *buf, size_t size, Status &error);<br class=""></div><div><br class=""></div><div>in ProcessGDBRemote.cpp to try the "X" packet once, and if "$#00" is returned, set a bool in the ProcessGDBRemote class to know to not try and use the "X" packet again. You will see a mixture of some packets being directly sent by ProcessGDBRemote, and some are put into the GDBRemoteCommunicationClient class and an accessor is called to try and send the packet. I would suggest making a function:</div><div><br class=""></div><div>size_t GDBRemoteCommunicationClient::WriteMemory(addr_t addr, const void *buf, size_t size, Status &error);</div><div><br class=""></div><div>And have the GDBRemoteCommunicationClient keep track of wether the X packet is supported and always use it if it is. </div><div><br class=""></div><div>So the flow is:</div><div>1 - add a new instance variable to GDBRemoteCommunicationClient:</div><div>     LazyBool m_supports_X = eLazyBoolCalculate;</div><div><br class=""></div><div>LazyBool is an enum:</div><div><br class=""></div><div>enum LazyBool { eLazyBoolCalculate = -1, eLazyBoolNo = 0, eLazyBoolYes = 1 };</div><div><br class=""></div><div>2 - Add a new size_t GDBRemoteCommunicationClient::WriteMemory(addr_t addr, const void *buf, size_t size, Status &error) function:</div><div><br class=""></div><div>size_t GDBRemoteCommunicationClient::WriteMemory(addr_t addr, const void *buf, size_t size, Status &error) {</div><div>  if (m_supports_X != eLazyBoolNo) {</div><div>    // Make packet and try sending the X packet</div><div>    StreamString packet;</div>    StringExtractorGDBRemote response;<br class="">    packet.PutChar('X');<div class="">    ... // Fill in all of the args and the binary bytes<br class="">    if (SendPacketAndWaitForResponse(packet.GetString(), response, false) == PacketResult::Success) {</div><div class="">      if (response.IsUnsupportedResponse())</div><div class=""><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_supports_X = eLazyBoolNo;</div>      else if (response.IsOKResponse())<br class="">        return size;<br class="">      else</div><div class="">        return 0;<br class="">    }<br class="">  }</div><div class="">  // Make and send the 'M' packet just like in ProcessGDBRemote::DoWriteMemory(...)</div><div class=""><br class=""></div><div class="">3 - Modify ProcessGDBRemote::DoWriteMemory() to call the new GDBRemoteCommunicationClient::WriteMemory() function.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">2. What's the actual difference between<span class="Apple-converted-space"> </span></span></font></span></font></span></font></span></font><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">"X"<span class="Apple-converted-space"> </span></span></font></span></font><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">packet and<span class="Apple-converted-space"> </span></span></font></span></font></span></font></span></font></span></font></span></font></span></font></span></font><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">"M" packet?(I can't see any<span class="Apple-converted-space"> </span></span></font></span></font></span></font></span></font><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">difference between them, from the packet specification on GDB website.</span></font></span></font></span></font></span></font></span></font></span></font></span></font></span></font><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span class="Apple-converted-space"> </span>"X" packet is "X addr,length:XX…" and<span class="Apple-converted-space"> </span></font><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">"M" packe</span></font></span></font></span></font></span></font></font><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">t is "M addr,length:XX…", I thought even the data<span class="Apple-converted-space"> </span></font><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">"XX…"<span class="Apple-converted-space"> </span></font>seems to be encoded in the same way:<span class="Apple-converted-space"> </span></font><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">two hexadecimal digits per byte, or perhaps I was wrong?)</font></div></div></blockquote><div><br class=""></div>"M" packets sends bytes as a hex ASCII string (each byte takes two hex ASCII characters) and the "X" packet is binary with some escaping for bytes that conflict with the special characters in the GDB remote protocol, see this for binary data:</div><div><br class=""></div><div><a href="https://sourceware.org/gdb/current/onlinedocs/gdb/Overview.html#Binary-Data" class="">https://sourceware.org/gdb/current/onlinedocs/gdb/Overview.html#Binary-Data</a></div><div><br class=""></div><div><br class=""></div><div><br class=""></div><div><blockquote type="cite" class=""><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">3. Is letting my simulator support "</font><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">qMemoryRegionInfo</span></font></span></font>" packet enough to make lldb send the correct "X" or "M" packets?(extract .text and .data sections from my<span class="Apple-converted-space"> </span></font><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><font style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">executable and send them to PM and DM address</span></font></span></font>es)</font></div></div></blockquote><div><br class=""></div><div>qMemoryRegionInfo allows the debugger to figure things out about memory. We currently don't support the "X" packet, so you will need to add that yourself as mentioned above. Right now "M" packets will be used.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">*4. by the way, does GDB has similar command like "</font><font __editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class="">log enable gdb-remote packets" in lldb to print all the RSP packet exchange?<br class=""></font></div></div></blockquote><div><br class=""></div>Not sure, I would hope so. Try "apropos log" in GDB maybe?</div><div><br class=""></div><div>So you can either implement the "X" packet in LLDB, or fix your GDB server to support the "M" packet. Up to you.</div><div><br class=""></div><div>If you have an ELF file that you are using as your executable and want me to take a look, make it available via some sharing on the web and I can look at it. Most people will run fully linked executables (these tend to have PT_LOAD segments) when they run on a simuilator, not an unlinked object file (these tend to not have PT_LOAD segments). It shouldn't be too hard to get a statically linked executable with the right ELF program headers (PT_LOAD) so that you can use the --load option.</div><div><br class=""></div><div>Greg</div><div><br class=""><blockquote type="cite" class=""><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class=""><div class="">Kind regards,</div><div class="">Rui</div><font editorwarp__="1" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""><span style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;" class=""></span></font></div><div style="caret-color: rgb(0, 0, 0); font-family: Menlo-Regular; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><div class=""><br class=""></div><div class=""><br class=""></div><div style="font-size: 12px; font-family: "Arial Narrow"; padding: 2px 0px;" class="">------------------ Original ------------------</div><div style="font-size: 12px; background-color: rgb(239, 239, 239); padding: 8px; background-position: initial initial; background-repeat: initial initial;" class=""><div class=""><b class="">From:</b> "Greg Clayton"<<a href="mailto:clayborg@gmail.com" class="">clayborg@gmail.com</a>>;</div><div class=""><b class="">Date:</b> Mon, Apr 20, 2020 01:31 PM</div><div class=""><b class="">To:</b> "Rui Hong"<<a href="mailto:hongrui16@mails.ucas.ac.cn" class="">hongrui16@mails.ucas.ac.cn</a>>;<wbr class=""></div><div class=""><b class="">Cc:</b> "lldb-dev"<<a href="mailto:lldb-dev@lists.llvm.org" class="">lldb-dev@lists.llvm.org</a>>;<wbr class=""></div><div class=""><b class="">Subject:</b> Re: [lldb-dev] LLDB problems on remote debugging</div></div><div class=""><br class=""></div><br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Apr 16, 2020, at 2:30 AM, Rui Hong via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org" class="">lldb-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">Hi LLDB devs,<div class=""><br class=""></div><div class="">I'm working on porting LLDB to work with an existing simulator(which has GDB stub, remote debugging). This simulator used to work with GDB. When using with GDB, the target file(ELF) is loaded by GDB comma<font editorwarp__="1" class="" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;">nd "load" or "remote put".</font></div><div class=""><font editorwarp__="1" class="" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;">From a LLVM talk project which is very similar to my project, their<span class="Apple-converted-space"> </span></font>target file is loaded by the simulator itself(   ./sim a.out   , something like that), and lldb sets breakpoint, use "gdb-remote" command to connect to the simulator, the program starts to run immediately and stop at the breakpoint.</div><div class="">I can't find any lldb command that is equal to "load" in GDB. And right now when I use "gdb-remote" to connect lldb to my simulator, lldb has command line output "Process 10115 stopped,thread #1, stop reason = signal SIGTRAP,frame #0: 0xffffffffffffffff". Does this mean the program has already started to run? I haven't loaded the binary.</div><div class=""><br class=""></div><div class="">To sum my questions:</div><div class="">1. Does lldb has similar command like "load/<font editorwarp__="1" class="" style="display: inline; font-size: 14px; font-family: Verdana; background-color: rgba(0, 0, 0, 0); font-weight: 400; font-style: normal;">remote put</font>" in GDB?</div></div></blockquote><div class=""><br class=""></div>Yes: "target modules load" with the --load option. Te be fair the Ted Woodward, this code didn't exist when he was bringing up his simulator way back when, but it was later added by someone.</div><div class=""><br class=""></div><div class="">The "target modules load --load --file /path/to/file" can be used to load an ELF file as a dynamic loader would load the ELF file: it will only load the program headers that are PT_LOAD. You can also use the "--set-pc-to-entry" option to this command to set the PC to the entry point that is specified in the ELF file. For this to work, you ELF file has to be statically linked and all addresses should be correct in the file itself.</div><div class=""><br class=""></div><div class="">If you want to just blast an entire ELF file into memory and not only load PT_LOAD segments, then you can use "memory write --infile /path/to/binfile <addr>".</div><div class=""><br class=""></div><div class="">Hopefully "target modules load --load" will work for you.</div><div class=""><br class=""></div><div class="">The code for this command is in CommandObjectTarget.cpp in CommandObjectTargetModulesLoad::DoExecute() if the second "if (load)" statement (line CommandObjectTarget.cpp :2827 for me). What it does is it will ask the ObjectFile for the file you are loading in the command (ObjectFileELF) about what its "loadables" are:</div><div class=""><br class=""></div><div class="">std::vector<ObjectFile::LoadableData> loadables(objfile->GetLoadableData(*target));<br class=""></div><div class=""><br class=""></div><div class="">So as long as this function returns what you are interested in loading, then you should be good.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><div class=""><div class="">2. Does "gdb-remote" command in lldb do the "loading binary" job?</div></div></blockquote><div class=""><br class=""></div><div class="">It the invocation _can_ do the loading, but it really depends on the GDB server. Typically there are a few ways to use GDB server:</div><div class=""><br class=""></div><div class="">1 - have _it_ launch the program for you:</div><div class="">   $ gdbserver [options] -- /path/to/a.out arg1 arg2 arg2</div><div class="">2 - just launch a GDB server which you will connect to</div><div class="">   $ gdbserver [options]</div><div class="">3 - have gdb server attach to a process for you:</div><div class="">   $ gdbserver [options] --pid 123</div><div class=""><br class=""></div><div class="">When LLDB attaches to a GDB server, it will ask it if it has a process with some GDB remote packets, and if it has one, it is good to go and start debugging (solution 1 and 3 above). If it doesn't, it can send a launch ("A" packet) or attach packet to attach to a process or wait for one (solution 2 above).</div><div class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div class="">3. Will the program start to run immediately after "gdb-remote" command in lldb?</div></div></blockquote><div class=""><br class=""></div>If you have a GDB server, it will have the process stopped because the simple packet send/response doesn't allow it to receive a packet if the process is running. So usually a GDB server will start off stopped and the debugger can auto continue or stop at this entry point (process launch --stop-at-entry 1).</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="">4. Do I have to let my simulator to load the binary by itself?<br class=""></div></div></blockquote><div class=""><br class=""></div>This is really up to your workflow and how complex your simulator is. If you are only ever loading one executable, then it might be easier to just have your simulator do this launching and stop your simulation right at the entry point and have the GDB server it vends respond to LLDB with information about the process. If you don't have a real process ID, make sure your GDB server makes one up (like process ID of 1). If you want to see the packet traffic, then you can do this prior to sending the "gdb-remote <port>" command in lldb:</div><div class=""><br class=""></div><div class="">(lldb) log enbable -f /tmp/packets.txt gdb-remote packets</div><div class="">(lldb) gdb-remote 1234</div><div class=""><br class=""></div><div class="">We have extended our GDB remote server with new packets. So be sure to read up on what your GDB server _can_ provide, not mandatory, but many of these packets are useful and can provide detailed information to ensure LLDB selects the right targets and plug-ins. Details are in the LLDB code at:</div><div class=""><br class=""></div><div class="">lldb/docs/lldb-gdb-remote.txt</div><div class=""><br class=""></div><div class="">If you want to see how these are used, try debugging on a mac or linux and look at the packet log to see how a debug session goes.</div><div class=""><br class=""></div><div class="">Tricky things you might need to do:</div><div class="">- make sure your GDB server details the registers that are available for your architecture. This can happen with the xmlRegisters response to the qSupported packet that will follow up with a packet that asks your GDB server for full details on your register for your emulated CPU. It can be very handy to ensure this has all of the info that is needed and allows your simulator to emulate different chips seamlessly. If your stub doesn't support this, consider adding that support. If your stub doesn't support his packet, then you will need to create a register definition python file and set the following setting:</div><div class=""><br class=""></div><div class="">(lldb) setting set plugin.process.gdb-remote.target-definition-file /path/to/<arch>_target_definition.py</div><div class=""><br class=""></div><div class="">Example files are available in the LLDB sources with a "_target_definition.py" suffix. For example:</div><div class=""><br class=""></div><div class="">lldb/examples/python/x86_64_target_definition.py</div><div class=""><br class=""></div><div class="">- there are also some packets that allow your GDB server to specify where files ended up being loaded. Full blown OS plug-ins will end up using dynamic loader plug-ins that interface with the process to figure out where shared libraries have been loaded. Your GDB server can respond to the "qXfer:libraries-svr4:read" packet to tell LLDB where any files have been loaded. If you just have one file, then using "target modules load --load --file /path/to/a.out" should work and nothing more is needed.</div><div class=""><br class=""></div><div class="">Let us know how things go!</div><div class=""><br class=""></div><div class="">Greg</div><div class=""><blockquote type="cite" class=""><div class=""><div class=""><br class=""></div><div class="">Kind regards,</div><div class="">Rui</div><div class=""><br class=""></div>_______________________________________________<br class="">lldb-dev mailing list<br class=""><a href="mailto:lldb-dev@lists.llvm.org" class="">lldb-dev@lists.llvm.org</a><br class=""><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a></div></blockquote></div></div></div></blockquote></div><br class=""></div></body></html>