Re: [PATCH] [gdbserver] Disable conditional breakpoints on no-hardware-single-step targets

Yao Qi
2015-05-01T14:18:21Z

Antoine Tremblay <antoine.tremblay@ericsson.com> writes:

>> note that the comments are no longer valid as C library can be compiled
>> in thumb mode.
>
> Could we update the comments at the same time ?...

Yes, we can. Everyone can post patches here to fix bugs and mistakes in
the source. In fact, this part of code needs some changes, we start
to compile C library in thumb mode in the last several years, and use
the kernel new enough to support tracing clones. IMO, that is why we
don't see anything wrong while the code is not 100% correct.

>>
>> When GDBserver steps over a breakpoint in arm mode function, which
>> returns to thumb mode, GDBserver will insert arm mode breakpoint by
>> mistake and the program will crash. GDBserver alone is unable to
>> determine the arm/thumb mode given a PC address. See how GDB does
>> it in arm-tdep.c:arm_pc_is_thumb.
>>
>> After thinking about how to teach GDBserver inserting right breakpoint
>> (arm or thumb) for a while, I reconsider it from a different direction
>> that it may be unreasonable to run target-side conditional breakpoint for
>> targets without hardware single step. Pedro also pointed this out here
>> https://sourceware.org/ml/gdb-patches/2015-04/msg00337.html
>>
>
> I'm looking into teaching gdbserver about inserting the right
> breakpoint and possibly software single-step like this post :
> https://sourceware.org/ml/gdb/2012-10/msg00077.html wanted to do...
>
> It would also fix the problem where we would step-over other breakpoints...
>
> But it does seems very complex to say the least, I'm still early in my
> investigation but if you could share your thoughts on how you came to
> think of it as unreasonable to fix arm-mode and possibly the
> single-stepping it would be appreciated ?

I think we've got some conclusions in the url above that it is
complicated to do software-single step in GDBserver, not only calculating
the next pc, but also handling execution control after software single
step is involved.

--
Yao (齐尧)