This patch adds a new method to SBValue, GetValueAsAddress(), which will take the uint64_t value in the SBValue and run it through the ABI's FixAddress method to clear any TBI/MTE/ptrauth bits on AArch64 targets. Script authors may want access to both the actual uint64_t value, and the address that will be accessed, in an SBValue, so I added a new method in addition to GetValueAsUnsigned to provide this.
I currently have SBValue::GetValueAsAddress NOT perform a type check, and possibly I should have it check the type's IsPointerType() before doing this, but at the same time if the script/driver is calling this method, it's probably best to just do that.
There's also changes to methods like ValueObject::CreateValueObjectFromAddress so we can get SBValue::Dereference and such to behave correct when you have an SBValue created from a signed pointer.
I have the attached test case set to run on any AArch64 system; on Darwin we do the same pointer stripping on any process regardless if it is using pointer auth (that is, for both "arm64" and "arm64e"). On Linux, a non-ptrauth process may not have an address mask and this test may fail because the bits I mask into the top nibble in the test program are not removed by GetValueAsAddress(). I'm not sure exactly, but I can remove this test from running on Linux, or add a check for isAArch64PAuth or something. This program never actually dereferences this pointer value with bits in the high nibble set, it's only set up for lldb to manipulate.
We've used this API inside Apple for a bit and it has worked well for our API users; of course if there is consensus that it should be done differently we'll find a way to handle that internally.
Nit: no braces around single life if for consistency with lines 935 and 393.