On Wed, 2022-01-12 at 11:22 -0800, Jim Ingham wrote:
> 
> > On Jan 12, 2022, at 4:28 AM, Pavel Labath <pa...@labath.sk> wrote:
> > 
> > I kinda like the cleanliness (of the design, not the implementation) of a 
> > $siginfo variable, but you're right that implementing it would be tricky (I 
> > guess we'd have to write the struct info the process memory somewhere and 
> > then read it back when the expression completes).
> > 
> > I don't expect that users will frequently want to modify the siginfo 
> > structure. I think the typical use case would be to inspect the struct 
> > fields (maybe in a script -- we have one user wanting to do that) to 
> > understand more about the nature of the stop/crash.
> > 
> > With that in mind, I don't have a problem with a separate command, but I 
> > don't think that the "platform" subtree is a good fit for this. I mean, I 
> > am sure the (internal) Platform class will be involved in interpreting the 
> > data, but all of the platform _commands_ have something to do with the 
> > system as a whole (moving files around, listing processes, etc.) and not a 
> > specific process. I think this would belong under the "thread" subtree, 
> > since the signal is tied to a specific thread.
> 
> Platform seemed appropriate to me because this is a platform specific 
> feature; some platforms don’t support siginfo at all…. But I’m fine with 
> thread too.
> 
> > 
> > Due to the scripting use case, I am also interested in being able to 
> > inspect the siginfo struct through the SB API -- the expression approach 
> > would (kinda) make that possible, while a brand new command doesn't 
> > (without extra work). So, I started thinking whether this be exposed there. 
> > We already kinda expose the si_signo field via GetStopReasonDataAtIndex(0) 
> > (and it even happens to be the first siginfo field), but I don't think we 
> > would want to expose all fields in that manner.
> > 
> 
> Why not something like:
> 
> SBValue
> SBThread::GetSiginfo();
> 
> That returns an SBValue with the siginfo type and the data filled in from the 
> gdb-remote packet.  If the platform didn’t support this you’d just get an 
> SBValue with the error set saying “not supported” or whatever.
> 
> If you have all the types of the members to hand it’s easy to cons up an 
> SBValue from the data you got from the stub.  An SBValue is exactly what 
> you’d get back from the expression parser anyway, so from the client’s 
> perspective this would be just as good.  And printing the SBValue and doing 
> logic on its members are all well supported.  
> 
> If we can’t always get our hands on the siginfo type, we will have to cons 
> that type up by hand.  But we would have had to do that if we were 
> implementing this feature in the expression parser anyway, and we already 
> hand-make types to hand out in SBValues for a bunch of the synthetic child 
> providers already, so that’s a well trodden path.
> 
> You could even make a ValueObjectSiginfo to back the SBValue you hand out 
> which implements “SetValueFromCString” through the gdb-remote protocol 
> interface, so writing back to the siginfo through this interface would be 
> natural.
> 

Well, it all makes sense to me.  It should also make the implementation
somewhat easier, as I can focus on getting siginfo_t parser with unit
tests first, and then work on the additional commands.

-- 
Best regards,
Michał Górny

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

Reply via email to