[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