On Fri, Oct 21, 2016 at 3:30 PM, Greg Clayton <gclay...@apple.com> wrote:
>
>> On Oct 21, 2016, at 1:03 PM, Francis Ricci via lldb-dev 
>> <lldb-dev@lists.llvm.org> wrote:
>>
>> Hi all,
>>
>> I'm looking to add Platform::LaunchGDBServer() to the SBPlatform API,
>> but it requires two return values - an lldb::pid_t and a string url.
>> Internally, we just pass by reference, but we can't do that in the
>> API. Any suggestions on how to do this, since we can't pass primitives
>> by reference from Python?
>>
>> My current thinking was to use the pid_t as the return value, and then
>> figure out a way to communicate the string information as an "out"
>> function parameter. Ideas there included using an SBStream&, as the
>> GetDescription() functions do, but that doesn't seem optimal.
>>
>> In standard Python, we'd just use a tuple return value, but I don't
>> see any way to do that using the swig interface.
>>
>> The reasoning behind adding this API function is to prevent the
>> platform-mode GdbRemote tests from launching the gdbserver using an
>> 'A' packet instead of the standard 'qLaunchGDBServer' packet.
>
> I am still unclear as to why you want this? An lldb-server that is launched 
> in platform mode shouldn't use the 'A' packet at all.

Right. The problem is that our test suite (specifically the
lldb-server tests) uses the 'A' packet to spawn the inferior for
lldb-server's which are launched in platform mode.

> Can you elaborate on why you need this more? Why do we need to prevent it 
> from using an 'A' packet in the first place? What is leading to this 
> happening?

gdbremote_testcase.py, in launch_debug_monitor, calls
self.spawnSubprocess() on the lldb-server exe.

This in turn calls _RemoteProcess.launch() in lldbtest.py, which calls
lldb.remote_platform.Launch(), which will use the 'A' packet, with the
path to the lldb-server.

I think this is broken, and the qLaunchGDBServer packet should be used
instead. The problem is that there currently isn't a good way to use
this packet from the Python API.

It is somewhat odd to me that the platform-mode lldb-server even
accepts the 'A' packet, but it appears to, given that the `Handle_A`
method is contained in `GDBRemoteCommunicationServerCommon` and not
`GDBRemoteCommunicationServerLLGS`.

>  Why do you want to launch on manually?

As far as I know, the lldb-server tests send packets manually in
general, since they don't run with the full lldb, and just a python
stub to test the remote protocols.
_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to