On Wed, Oct 12, 2016 at 03:55:18PM +0200, Claudio Imbrenda wrote: > On 12/10/16 15:15, David Hildenbrand wrote: > >>> + for (cx = 0; ccpus && ccpus[cx]; cx++) { > >>> + cpu_single_step(cpu, 0); > > > > This looks suspicious > > why? we set all cpus to single step, since that is the default, and then > we clear the single-step property from all CPUs that should be restarted > in normal mode, then we restart all CPUs. Those in single-step will > indeed only perform one single step, the others will run freely (at > least until the first single-step CPU stops again).
actually I was more concerned about calling it on "cpu" in a loop. GDB will: - single step one thread only (stopping all other) - use vCont as default. So this means quite some ioctls on every step with some VCPUs. I doubt that it will really be a problem (e.g. for GDB single stepping instead of setting breakpoints when returning froma function), but still I want to have it said. (we actually only need 1 ioctl but call quite a lot). > > >>> + } > >>> + CPU_FOREACH(cpu) { > >>> + cpu_resume(cpu); > >>> + } > > > > Claudio, did you have a look at how s->c_cpu is used later on? I remember > > that we > > have to take care of some query reply packages. > > yes, that's set by the H packet and used by the c,s,m,etc packets. vCont > ignores it and doesn't change it > (see here https://sourceware.org/gdb/onlinedocs/gdb/Packets.html ) I remember something different (also having to do with clients detaching and re-attaching). Will have a look at the code when I have time.