On 09/09, Frank Ch. Eigler wrote:
>
> Oleg Nesterov <o...@redhat.com> writes:
>
> > [...]
> > But, Jan. Implementing the memory writes does not mean breakpoints
> > automatically start to work!
>
> It approximately should though.
>
> > Yes, gdb writes cc, and yes the tracee reports SIGTRAP. But after
> > that "continue" does nothing except "$c", and the tracee naturally
> > gets SIGILL. I expected that, since ugdb doesn't even know the code
> > was changed, gdb should write the original byte back before continue,
> > but this doesn't happen.
>
> In normal all-stop mode,

Currently ugdb only supports non-stop

> gdb does normally replace the old
> instruction, in order to single-step over it with the 's' packet.

Yes, probably single-stepping is needed... I am still trying to
understand how this works with gdbserver, but I see vCont:s packets.

> Perhaps you're testing some buggy non-stop aspect that only works
> with 'Z' breakpoint management packets?

No. Just a trivial test-case which printfs in a loop.

> A fuller packet trace
> would help explain.

Please see below. But the only important part is:

        $M4005ba,1:cc                   <------- set bp
        $c                              <------- resume

of course, this can't work.

Full trace:

        => qSupported:multiprocess+
        <= PacketSize=400;QStartNoAckMode+;QNonStop+;multiprocess+;QPassS...
        => QStartNoAckMode
        <= OK
        => !
        <= OK
        => Hgp0.0
        <= E01
        => QNonStop:1
        <= OK
        => qfThreadInfo
        <= E01
        => ?
        <= OK
        => qSymbol::
        <=
        => vAttach;95b
        <= OK
        => qfThreadInfo
        <= mp95b.95b
        => qsThreadInfo
        <= l
        => Hgp95b.95b
        <= OK
        => vCont?
        <= vCont;t
        => vCont;t:p95b.-1
        <= OK
        <= %Stop:T00thread:p95b.95b;
        => vStopped
        <= OK
        => g
        <= fcfdffffffffffff90ad5329ff7f0000ffffffffffffffff00000000000000...
        => m600880,8
        <= 403c6d7d007f0000
        => m7f007d6d3c48,8
        <= 00106d7d007f0000
        => m7f007d6d1000,28
        <= 0000000000000000f6e04c7d007f0000e80760000000000080156d7d007f00...
        => m7f007d6d1580,28
        <= 00f0ef29ff7f0000f6e04c7d007f000050f45f29ff7f000000c06c7d007f00...
        => m7f007d4ce0f4,4
        <= 090a0069
        => m7f007d6cc000,28
        <= 0030167d007f0000781f6d7d007f0000400b4b7d007f0000e8346d7d007f00...
        => m7f007d6d1f78,4
        <= 2f6c6962
        => m7f007d6d1f7c,4
        <= 2f6c6962
        => m7f007d6d1f80,4
        <= 632e736f
        => m7f007d6d1f84,4
        <= 2e360000
        => m7f007d6d34e8,28
        <= 00704b7d007f00000002400000000000082e6d7d007f000000000000000000...
        => m400200,4
        <= 2f6c6962
        => m400204,4
        <= 2f6c642d
        => m400208,4
        <= 6c696e75
        => m40020c,4
        <= 782d7838
        => m400210,4
        <= 362d3634
        => m400214,4
        <= 2e736f2e
        => m400218,4
        <= 32000000
        => m7f007d6d3c40,4
        <= 01000000
        => m7f007d6d3c48,8
        <= 00106d7d007f0000
        => m7f007d6d3c50,8
        <= c04e4c7d007f0000
        => Z0,7f007d4c4ec0,1
        <=
        => m7f007d4c4ec0,1
        <= f3
        => X7f007d4c4ec0,0:
        <=
        => M7f007d4c4ec0,1:cc
        <= OK
        => m600880,8
        <= 403c6d7d007f0000
        => m7f007d6d3c48,8
        <= 00106d7d007f0000
        => m7f007d6d1000,28
        <= 0000000000000000f6e04c7d007f0000e80760000000000080156d7d007f00...
        => m7f007d6d1580,28
        <= 00f0ef29ff7f0000f6e04c7d007f000050f45f29ff7f000000c06c7d007f00...
        => m7f007d4ce0f4,4
        <= 090a0069
        => m7f007d6cc000,28
        <= 0030167d007f0000781f6d7d007f0000400b4b7d007f0000e8346d7d007f00...
        => m7f007d6d1f78,4
        <= 2f6c6962
        => m7f007d6d1f7c,4
        <= 2f6c6962
        => m7f007d6d1f80,4
        <= 632e736f
        => m7f007d6d1f84,4
        <= 2e360000
        => m7f007d6d34e8,28
        <= 00704b7d007f00000002400000000000082e6d7d007f000000000000000000...
        => m400200,4
        <= 2f6c6962
        => m400204,4
        <= 2f6c642d
        => m400208,4
        <= 6c696e75
        => m40020c,4
        <= 782d7838
        => m400210,4
        <= 362d3634
        => m400214,4
        <= 2e736f2e
        => m400218,4
        <= 32000000
        => m7f007d6d3c40,4
        <= 01000000
        => vCont;t:p95b.-1
        <= OK
        => m7f007d201f40,1
        <= 48
        => m7f007d201f40,1
        <= 48
        => g
        <= fcfdffffffffffff90ad5329ff7f0000ffffffffffffffff00000000000000...
        => m7f007d201f40,1
        <= 48
        => m7f007d201f40,1
        <= 48
        => m40056c,12
        <= 554889e5e8e3feffff89c6ba07000000bfdc
        => m40056c,1
        <= 55
        => m40056d,3
        <= 4889e5
        => m40056c,12
        <= 554889e5e8e3feffff89c6ba07000000bfdc
        => m40056c,1
        <= 55
        => m40056d,3
        <= 4889e5
        => m4005ba,1
        <= e8
        => m4005ba,1
        <= e8

(gdb) b BP.c:13
Breakpoint 1 at 0x4005ba: file BP.c, line 13.

        => M4005ba,1:cc
        <= OK

gdb writes "int 3".

(gdb) c
Continuing.

        => QPassSignals:e;10;14;17;1a;1b;1c;21;24;25;4c;
        <= OK
        => Hcp95b.95b
        <= OK
        => c
        <= OK
        <= %Stop:T05thread:p95b.95b;

the tracee hits this bp and reports SIGTRAP

        => vStopped
        <= OK
        => g
        <= 00000000000000000006400000000000401f207d007f000000000000000000...
        => P10=ba05400000000000
        <=
        => G00000000000000000006400000000000401f207d007f00000000000000000...
        <=
        => m4005ba,1
        <= cc
        => m4005ba,1
        <= cc
        => g
        <= 00000000000000000006400000000000401f207d007f000000000000000000...
        => m4005bb,1
        <= 99
        => m4005bb,1
        <= 99

Breakpoint 1, main () at BP.c:13
13                      printf("THREE %d %d\n\n", getpid(), __LINE__);
(gdb) c
Continuing.

        => c
        <= OK

gdb just resumes the tracee,

        <= %Stop:T04thread:p95b.95b;

and of course it gets SIGILL after "int 3"

        => vStopped
        <= OK
        => g
        <= 00000000000000000006400000000000401f207d007f000000000000000000...
        => m4005bc,1
        <= fe
        => m4005bc,1
        <= fe
        => g
        <= 00000000000000000006400000000000401f207d007f000000000000000000...
        => m4005bc,1
        <= fe
        => m4005bc,1
        <= fe
        => qTStatus
        <= T0
        => M4005ba,1:e8
        <= OK
        => M7f007d4c4ec0,1:f3
        <= OK
        => D;95b
        <= OK
        => qTStatus
        <= T0

Reply via email to