<div dir="ltr"><div>> IS this what is going on? If so, just give lldb the executable file:</div><div><br></div><div>No. I initiated lldb with the arguments "--arch vliw-unknown-unknown workplace/app.elf". But I haven't mentioned in my previous mail.</div>
<div><br></div><div>$lldb</div><div>(lldb) log enable gdb-remote packets</div><div>(lldb) target create --arch vliw-unknown-unknown workplace/app.elf</div><div>Current executable set to 'workplace/app.elf' (vliw).</div>
<div>(lldb) process connect --plugin gdb-remote connect://localhost:51000</div><div><   1> send packet: +</div><div>history[1] tid=0xb1cbe9d0 <   1> send packet: +</div><div><  19> send packet: $QStartNoAckMode#b0</div>
<div><   1> read packet: +</div><div><   4> read packet: $#00</div><div><   1> send packet: +</div><div><  26> send packet: $QThreadSuffixSupported#e4</div><div><   1> read packet: +</div><div>
<   4> read packet: $#00</div><div><   1> send packet: +</div><div><  27> send packet: $QListThreadsInStopReply#21</div><div><   1> read packet: +</div><div><   4> read packet: $#00</div><div>
<   1> send packet: +</div><div><  13> send packet: $qHostInfo#9b</div><div><   1> read packet: +</div><div><  84> read packet: $cputype:201;cpusubtype:-2;ostype:unknown;vendor:unknown;endian:little;ptrsize:4;#90</div>
<div><   1> send packet: +</div><div><  10> send packet: $vCont?#49</div><div><   1> read packet: +</div><div><  15> read packet: $vCont[;c;s]#0e</div><div><   1> send packet: +</div><div><  27> send packet: $qVAttachOrWaitSupported#38</div>
<div><   1> read packet: +</div><div><   4> read packet: $#00</div><div><   1> send packet: +</div><div><   6> send packet: $qC#b4</div><div><   1> read packet: +</div><div><br></div><div><   7> read packet: $QC0#c4</div>
<div><   1> send packet: +</div><div>(lldb) process launch</div><div><br></div><div>I debugged lldb to check the "ProcessGDBRemote::DoLaunch()" method. But the execution didn't reach this function for the above said communication.</div>
<div><br></div><div>Actually after the "process connect" the state is set to "eStateConnected". So the "process launch" should call the "DoLaunch()" method of "gdb-remote" process plugin. But lldb hangs on the last line of the following code snip. </div>
<div><br></div><div>(snip start)</div><div><span class="" style="white-space:pre">        </span>if (error.Success())</div><div><span class="" style="white-space:pre">       </span>{</div><div><span class="" style="white-space:pre">  </span>    const char *archname = exe_module->GetArchitecture().GetArchitectureName();</div>
<div><br></div><div><span class="" style="white-space:pre">   </span>    //result.AppendMessageWithFormat ("Process %llu launched: '%s' (%s)\n", process->GetID(), filename, archname);</div><div><span class="" style="white-space:pre">    </span>    result.SetDidChangeProcessState (true);</div>
<div><span class="" style="white-space:pre">    </span>    if (m_options.launch_info.GetFlags().Test(eLaunchFlagStopAtEntry) == false)</div><div><span class="" style="white-space:pre">    </span>    {</div><div><span class="" style="white-space:pre">              </span>result.SetStatus (eReturnStatusSuccessContinuingNoResult);</div>
<div><span class="" style="white-space:pre">            </span>StateType state = process->WaitForProcessToStop (NULL);</div><div>(snip end)</div><div>file: lldb/source/Commands/CommandObjectProcess.cpp</div><div>method: CommandObjectProcessLaunch::DoExecute()</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Aug 22, 2013 at 10:21 PM, Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">You probably didn't give LLDB a file with "target create". If you look at the "ProcessGDBRemote::DoLaunch (...)" function, it gets the object file from the target's executable module to ensure there is something to launch:<br>

<br>
<br>
    ObjectFile * object_file = exe_module->GetObjectFile();<br>
    if (object_file)<br>
    {<br>
<br>
        ... send 'A' packet<br>
<br>
    }<br>
<br>
<br>
It really doesn't make sense to run a program that has no executable and has no arguments. If you have a simulator that is debugging something already, then you must reply with a non-zero PID to the "qC" packet. Below your packets were:<br>

<div class="im"><br>
<   6> send packet: $qC#b4<br>
<   1> read packet: +<br>
<   7> read packet: $QC0#c4<br>
<   1> send packet: +<br>
<br>
</div>This is telling us, we are connected, but aren't debugging anything yet. There is a bug in LLDB right now if this is the case where we aren't propagating an error back from Process::Launch() correctly stating the 'A' packet can't be sent without a valid executable.<br>

<br>
IS this what is going on? If so, just give lldb the executable file:<br>
<br>
(lldb) target create --arch <ARCH> /path/to/local/copy/of/sim/exe/a.out<br>
<div class="im HOEnZb">(lldb) process connect --plugin gdb-remote connect://localhost:51000<br>
<br>
</div><div class="HOEnZb"><div class="h5">On Aug 21, 2013, at 10:14 PM, chansarav <<a href="mailto:chansarav@gmail.com">chansarav@gmail.com</a>> wrote:<br>
<br>
> Thanks for the reply.<br>
><br>
> I enabled the packet logging in LLDB.<br>
><br>
> (lldb) log enable gdb-remote packets<br>
> (lldb) process connect --plugin gdb-remote connect://localhost:51000<br>
> <   1> send packet: +<br>
> history[1] tid=0xb1d819d0 <   1> send packet: +<br>
> <  26> send packet: $QThreadSuffixSupported#e4<br>
> <   1> read packet: +<br>
> <   4> read packet: $#00<br>
> <   1> send packet: +<br>
> <  27> send packet: $QListThreadsInStopReply#21<br>
> <   1> read packet: +<br>
> <   7> read packet: $E01#a6<br>
> <   1> send packet: +<br>
> <  10> send packet: $vCont?#49<br>
> <   1> read packet: +<br>
> <  15> read packet: $vCont[;c;s]#0e<br>
> <   1> send packet: +<br>
> <  27> send packet: $qVAttachOrWaitSupported#38<br>
> <   1> read packet: +<br>
><br>
> <   6> send packet: $qC#b4<br>
> <   1> read packet: +<br>
> <   7> read packet: $QC0#c4<br>
> <   1> send packet: +<br>
> (lldb) run<br>
><br>
> After this lldb just hangs. lldb doesn't send any packet after the 'run' command. I debugged by inserting a breakpoint in lldb's code which sends the 'A' packet. And that breakpoint was not hit.<br>

><br>
><br>
><br>
> On Wed, Aug 21, 2013 at 10:31 PM, Greg Clayton <<a href="mailto:gclayton@apple.com">gclayton@apple.com</a>> wrote:<br>
> The "process launch" command should send the 'A' packet, and it is waiting for a stop reply response from the 'A' packet. Try enabling the packet logging in LLDB:<br>
><br>
> (lldb) log enable gdb-remote packets<br>
> (lldb) process connect ...<br>
> (lldb) run<br>
><br>
> My guess is that the 'A' packet isn't responding with a stop reply packet.<br>
><br>
> On Aug 21, 2013, at 7:47 AM, chansarav <<a href="mailto:chansarav@gmail.com">chansarav@gmail.com</a>> wrote:<br>
><br>
> > Hi,<br>
> ><br>
> > I am connecting lldb with my simulator through 'gdb-remote' process plugin. After extablishing the connection, I want to issue the 'process launch' command in lldb which should send the arguments packet 'A' to simulator asking it to launch the program.<br>

> ><br>
> > I am facing the problem while issuing the 'process launch' command in lldb. When I give the 'process launch' command, lldb hangs and there is no communication with simulator. When I debugged with gdb, I got the backtrace as follows:<br>

> ><br>
> > #2  0xb6703a6f in lldb_private::Condition::Wait (this=0x8077dac, mutex=..., abstime=0x0, timed_out=0xbfffaa9f) at /home/chandra/llvm-3.1/tools/lldb/source/Host/common/Condition.cpp:92<br>
> > #3  0xb662768d in lldb_private::Predicate<bool>::WaitForValueEqualTo (this=0x8077d90, value=true, abstime=0x0, timed_out=0xbfffaa9f) at /home/chandra/llvm-3.1/tools/lldb/source/Core/../../include/lldb/Host/Predicate.h:317<br>

> > #4  0xb662b03f in lldb_private::Listener::WaitForEventsInternal (this=0x8077d3c, timeout=0x0, broadcaster=0xadb0179c, broadcaster_names=0x0, num_broadcaster_names=0, event_type_mask=3, event_sp=...) at /home/chandra/llvm-3.1/tools/lldb/source/Core/Listener.cpp:409<br>

> > #5  0xb662b1f7 in lldb_private::Listener::WaitForEventForBroadcasterWithType (this=0x8077d3c, timeout=0x0, broadcaster=0xadb0179c, event_type_mask=3, event_sp=...) at /home/chandra/llvm-3.1/tools/lldb/source/Core/Listener.cpp:440<br>

> > #6  0xb69421ec in lldb_private::Process::WaitForStateChangedEvents (this=0xadb01788, timeout=0x0, event_sp=...) at /home/chandra/llvm-3.1/tools/lldb/source/Target/Process.cpp:1069<br>
> > #7  0xb6941f2c in lldb_private::Process::WaitForProcessToStop (this=0xadb01788, timeout=0x0) at /home/chandra/llvm-3.1/tools/lldb/source/Target/Process.cpp:977<br>
> > #8  0xb6587d98 in CommandObjectProcessLaunch::DoExecute (this=0x80813d0, launch_args=..., result=...) at /home/chandra/llvm-3.1/tools/lldb/source/Commands/CommandObjectProcess.cpp:220<br>
> > #9  0xb672c999 in lldb_private::CommandObjectParsed::Execute (this=0x80813d0, args_string=0xb4d667bc "", result=...) at /home/chandra/llvm-3.1/tools/lldb/source/Interpreter/CommandObject.cpp:856<br>
> > #10 0xb67215d3 in lldb_private::CommandInterpreter::HandleCommand (this=0x8077fc8, command_line=0x883a614 "process launch", lazy_add_to_history=lldb_private::eLazyBoolYes, result=...,<br>
> >     override_context=0x0, repeat_on_empty_command=true, no_context_switching=false) at /home/chandra/llvm-3.1/tools/lldb/source/Interpreter/CommandInterpreter.cpp:1571<br>
> > #11 0xb64e0ced in lldb::SBCommandInterpreter::HandleCommand (this=0xbfffc2cc, command_line=0x883a614 "process launch", result=..., add_to_history=true) at /home/chandra/llvm-3.1/tools/lldb/source/API/SBCommandInterpreter.cpp:97<br>

> > #12 0x0805a103 in Driver::HandleIOEvent (this=0xbfffec7c, event=...) at /home/chandra/llvm-3.1/tools/lldb/tools/driver/Driver.cpp:996<br>
> > #13 0x0805b516 in Driver::MainLoop (this=0xbfffec7c) at /home/chandra/llvm-3.1/tools/lldb/tools/driver/Driver.cpp:1430<br>
> > #14 0x0805bbf2 in main (argc=4, argv=0xbfffede4, envp=0xbfffedf8) at /home/chandra/llvm-3.1/tools/lldb/tools/driver/Driver.cpp:1562<br>
> ><br>
> > Though I am analyzing on this, Can someone help me in finding out what goes wrong while trying to launch a program in simulator through 'gdb-remote' process plugin?<br>
> ><br>
> ><br>
> > Following is the communication between lldb and simulator for the "process connect --plugin gdb-remote connect://localhost:51000" command.<br>
> ><br>
> > Send Packet: QStartNoAckMode: 15 chars<br>
> > Read Packet:<br>
> > Send Packet: QThreadSuffixSupported: 22 chars<br>
> > Read Packet:<br>
> > Send Packet: QListThreadsInStopReply: 23 chars<br>
> > Read Packet: E01<br>
> > Send Packet: qHostInfo: 9 chars<br>
> > Read Packet: cputype:201;cpusubtype:-2;ostype:unknown;vendor:unknown;endian:little;ptrsize:4;<br>
> > Send Packet: vCont?: 6 chars<br>
> > Read Packet: vCont[;c;s]<br>
> > Send Packet: qVAttachOrWaitSupported: 23 chars<br>
> > Read Packet:<br>
> > Send Packet: qC: 2 chars<br>
> > Read Packet: QC0<br>
> ><br>
> > LLDB sets the status as connected after this communication.<br>
> > (snip start)<br>
> >     if (pid == LLDB_INVALID_PROCESS_ID)<br>
> >     {<br>
> >         // We don't have a valid process ID, so note that we are connected<br>
> >         // and could now request to launch or attach, or get remote process<br>
> >         // listings...<br>
> >         SetPrivateState (eStateConnected);<br>
> >     }<br>
> > (snip end)<br>
> > function: ProcessGDBRemote::DoConnectRemote ()<br>
> ><br>
> > Thanks,<br>
> > Chandra Kumar R.<br>
> > _______________________________________________<br>
> > lldb-dev mailing list<br>
> > <a href="mailto:lldb-dev@cs.uiuc.edu">lldb-dev@cs.uiuc.edu</a><br>
> > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>