Hi Ryan,
I made changes to StopInfo recently to add the stack, r238323. I'll have a closer look at this and see if I can figure out what's going on.
 Thanks for bringing this up.

Best,
 Ewan


On 01/06/2015 18:09, Ryan Brown wrote:
I can't reproduce the server crash at the moment, but it was crashing immediately at process launch, so I don't think attaching to it would work.

I think I found the other problem.
ProcessGDBRemote now has a stack of stop infos.
RefreshStateAfterStop loops through them and calls SetThreadStopInfo, which in turn calls UpdateThreadListIfNecessary. But what if these stop infos have different thread lists? Which do you believe? Currently the first update succeeds and then the others seem to be ignored because the stop info hasn't changed.

So ignoring the threads for the 2nd stop packet is part of the problem. But why are there two in the first place? ProcessGDBRemote::DoLaunch calls SetLastStopPacket which pushes the packet onto the stack. But then it directly calls SetThreadStopInfo, bypassing RefreshStateAfterStop. So the packet stays on the stack and gets processed again along with the next stop packet.

-- Ryan Brown

On Mon, Jun 1, 2015 at 3:35 AM, Pavel Labath <lab...@google.com <mailto:lab...@google.com>> wrote:

    Hello,

    I'm not really sure what is going on, but I don't think the problem is
    in the server component. The server reports the correct register
    values. You say your plugin does not do anything which should change
    the registers (and the packet log confirms this), so it looks like the
    corruption happens in LLDB. I'm afraid I don't know enough about the
    client to know what is the problem, but it seems like you are hitting
    some kind of a race there. Possibly you are reading the register
    values before they have been populated (possibly even before the whole
    thread list is populated, which could explain why you are getting
    inconsistent thread counts).

    On 29 May 2015 at 17:15, Ryan Brown <rib...@google.com
    <mailto:rib...@google.com>> wrote:
    > It seemed like this is the way to connect to an already running
    gdbserver. I
    > was trying to see the output of gdb server to see why it was
    crashing.
    > Although I suppose the "OS or CPU not supported!" message might
    just mean I
    > started lldb-server with the wrong args and not the real problem.
    Yeah, debugging the server is not very easy. I usually just attach to
    a running instance, or load the resulting core file. As I said, this
    looks like a client issue, but it should still not crash the server.
    If you encounter a server crash (without using "process connect"), I
    would be interested in it and can probably fix it.


    > Here's a log from one session:
    >

    <snip>

    > < 588> read packet:
    >
    
$T05thread:5cdf;name:vc.test;threads:5cd5,5cdb,5cdc,5cdd,5cde,5cdf,5ce0,5ce1,5ce2,5ce3;00:883e4c08c2000000;01:0000000000000000;02:401a0008c2000000;03:90d3950000000000;04:0000000000000000;05:683f4c08c2000000;06:78d5ab0000000000;07:083e4c08c2000000;08:2e8d685500000000;09:0700000000000000;0a:403d053600000000;0b:7b00000000000000;0c:1100000000000000;0d:7cc4950000000000;0e:0800000000000000;0f:0000000000000000;10:79f1490000000000;11:4602000000000000;12:3300000000000000;13:0000000000000000;14:0000000000000000;15:2b00000000000000;16:0000000000000000;17:0000000000000000;reason:breakpoint;#14
    This is the packet notifying the client you've hit a breakpoint. It
    also provides the values of the general purpose registers. The values
    seem reasonable here.
    After this, you are only doing memory read commands, and these should
    not affect the registers.


    > (lldb) register read
    > General Purpose Registers:
    >        rax = 0x0000000000000000
    >        rbx = 0x0000000000000000
    >        rcx = 0x0000000000000000
    >        rdx = 0x0000000000000000
    >        rdi = 0x0000000000000000
    >        rsi = 0x0000000000000000
    >        rbp = 0x0000000000000000
    >        rsp = 0x00007fffffffdde0
    >         r8 = 0x0000000000000000
    >         r9 = 0x0000000000000000
    >        r10 = 0x0000000000000000
    >        r11 = 0x0000000000000000
    >        r12 = 0x0000000000000000
    >        r13 = 0x0000000000000000
    >        r14 = 0x0000000000000000
    >        r15 = 0x0000000000000000
    >        rip = 0x00007ffff7ddb2d0
    >     rflags = 0x0000000000000200
    >         cs = 0x0000000000000033
    >         fs = 0x0000000000000000
    >         gs = 0x0000000000000000
    >         ss = 0x000000000000002b
    >         ds = 0x0000000000000000
    >         es = 0x0000000000000000
    "register read" does not need to issue any new server commands, since
    it thinks the register values have already been provided. However, it
    seems they got corrupted on their way...


    hope this helps,
    pl




_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

--
Ewan Crawford
Codeplay Software Ltd
45 York Place, Edinburgh, EH1 3HP
Tel: 0131 466 0503
Fax: 0131 557 6600
Website: http://www.codeplay.com
Twitter: https://twitter.com/codeplaysoft

This email and any attachments may contain confidential and /or privileged 
information and is for use by the addressee only. If you are not the intended 
recipient, please notify Codeplay Software Ltd immediately and delete the 
message from your computer. You may not copy or forward it,or use or disclose 
its contents to any other person. Any views or other information in this 
message which do not relate to our business are not authorized by Codeplay 
software Ltd, nor does this message form part of any contract unless so stated.
As internet communications are capable of data corruption Codeplay Software Ltd 
does not accept any responsibility for any changes made to this message after 
it was sent. Please note that Codeplay Software Ltd does not accept any 
liability or responsibility for viruses and it is your responsibility to scan 
any attachments.
Company registered in England and Wales, number: 04567874
Registered office: 81 Linkfield Street, Redhill RH1 6BY

_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to