jasonmolenda added a comment.

Hi Omair, sorry for the delay in looking at this.  It seems like we have two 
overlapping patches here, @justincohen  patch in 
https://reviews.llvm.org/D98886 and this one.

I'm not convinced that we'll see a target where we have noncontiguous bits used 
for addressing (the best reason for using a mask), but Justin points out that 
Linux ARM's NT_ARM_PAC_MASK (gettable by ptrace PTRACE_GETREGSET) is expressed 
as a mask (and googling around, it looks like you can have a different mask for 
code pointers and data pointers, so Process would really need to store both, 
but it may be that for crashpad only the code mask needs to be tracked in 
Process).

lldb needs to allow for users to set the number of bits used for addressing in 
terms of a number -- 52 in your example -- but given that Linux wants to give 
us a mask via the ptrace call, I think we should preserve and use that mask.  
Darwin's API also provide the value in terms of the number of bits used for 
addressing, and as a user setting I think that's the most natural way of 
handling it and we should allow it.  But internal to Process, we should convert 
this to a CodeAddress mask and down in the ABI's where we support AArch v8.3 
ptrauth, we use bit 55 to clear/set the non-addressing high bits.

Omair, Justin, what do you think here?  I don't think it's especially hard to 
accept this in terms of # of bits OR a mask, and we should use the more general 
internal rep in lldb.  Another alternative would be "the mask should be 
converted to the # of bits in addressing and stored in Process in those terms".

(Honestly the idea of an address mask makes me nervous all over - if the rule 
is "take bit 55 and set all non-addressing bits to 0 or 1 depending on that", 
then we're implicitly saying "the mask only masks off high bits".  If it ever 
masked off bit 0, for instance, on a code address, then we're going to set that 
to 0 or 1 when we set/clear non-addressing bits?  Obviously not.  So it's not 
REALLY a mask, is it, it's just the # of bits used for addressing in another 
more flexible format that you can't actually flex or it all breaks. :)


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

https://reviews.llvm.org/D99944

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

Reply via email to