labath added a comment.

In D98822#2658426 <https://reviews.llvm.org/D98822#2658426>, @mgorny wrote:

> In D98822#2658252 <https://reviews.llvm.org/D98822#2658252>, @labath wrote:
>
>> In D98822#2646052 <https://reviews.llvm.org/D98822#2646052>, @mgorny wrote:
>>
>>> It includes refactoring clone/fork/vfork event monitoring into a single 
>>> function. Right now, only forks are supported — the handler creates a local 
>>> `NativeProcessLinux` instance (@labath, any suggestions how to make this 
>>> less hacky?), duplicates parent's breakpoints into it (just like the child 
>>> gets parent's memory) and uses it to clear these breakpoints and detach the 
>>> child process.
>>
>> I don't find this particularly hacky. However, I have doubts about the 
>> breakpoint clearing aspect. If we add that now, I think it will be tricky to 
>> move that process to the client in the future (how will the client know 
>> whether the breakpoints were auto-removed?) Given that  breakpoints in 
>> forked process have been borked since forever, I don't see harm in keeping 
>> that broken for a little while longer. Even a client with extremely limited 
>> of multiple processes (like the one we had in mind) should not have a 
>> problem with sending the appropriate `z` packets before it detaches. This 
>> patch could still come first (it's great that you've separated that out) -- 
>> it just needs to ensure that there are no breakpoints in the child path 
>> which would need clearing.
>
> Actually, that's not a problem at all. If client doesn't indicate 
> `fork-events` support via `qSupported`, we handle breakpoints server-side. If 
> it does, we deliver `fork` stop reason and then the client is responsible for 
> dealing with breakpoints.

Yeah, but then we have to maintain two copies of breakpoint-unsetting code in 
perpetuity.  Given that we've managed to come this far with this being 
completely broken, I think we can wait a little longer until the client support 
is in place.

>> Btw, have you by any chance looked at how gdb determines which clone()s 
>> constitute a new thread?
>
> If I read the code correctly, GDB always assumes `PTRACE_EVENT_CLONE` is a 
> new thread, and does not support spawning processes via it.

Ah, cute. I guess someone should let them know about this (and maybe also tell 
kernel folks that differentiating cloned processes is really hard). :)


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D98822/new/

https://reviews.llvm.org/D98822

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to