[PATCH 0/2] Fix x86 debug registers on FreeBSD with threads
John Baldwin
jhb@FreeBSD.org
Fri Jul 1 14:58:00 GMT 2016
On 7/1/16 9:02 AM, Pedro Alves wrote:
> On 06/28/2016 11:55 PM, John Baldwin wrote:
>> The pan-BSD x86 debug register support code was only setting the
>> debug registers on the current LWP identified by inferior_ptid.
>> This fixes the code to set the debug registers on all of the LWPs
>> belonging to the current inferior on each change.
>
> Looks good to me.
>
> Spotted a missing space in:
>
> ALL_NON_EXITED_THREADS(thread)
Fixed in pushed version, thanks.
>> One question I have is that the amd64 x86 debug register code was
>> invoking x86_cleanup_dregs in the mourn_inferior target op, but
>> the x86 linux native code calls this in the post_startup_inferior
>> target op instead. Any ideas as to why they are different?
>
> Not sure. Probably history, or maybe to be sure to paper over
> potential problems from the "inferior exit/dies/detached" end missing
> clearing the reg state. OTOH, I think target_post_startup_inferior
> isn't called for attach.
> Note that mourn_inferior isn't called in some cases. Some targets call
> it from within their to_detach and to_kill target methods, but that's
> not guaranteed. I think that linux-nat.c doesn't call it from its
> to_detach, but OTOH, when you get there, watchpoints had better have
> been removed from the target already. But maybe there's a problem
> as follow-fork time, not sure. Note that the linux native code
> also calls x86_forget_process directly through linux_nat_forget_process.
Hmm, it seems that for FreeBSD at least mourn_inferior is only called
from inf_ptrace_kill() and not from detach either. I'll have to think
about this more. On the surface it would seem that mourn_inferior
could at least use x86_forget_process to only discard state for the
process going away rather than discarding the entire list.
--
John Baldwin
More information about the Gdb-patches
mailing list