jrtc27 wrote:

> Why can't we just declare that the "generic" address-space must always be 0? 
> The specific numbers we use for address-spaces are completely arbitrary 
> anyway.

https://github.com/CTSRD-CHERI/llvm-project/issues/621 is what I wrote up for 
CHERI LLVM, but is a bit terse if you don't know about CHERI details. In 
essence, for us downstream in CHERI LLVM, we have two ABIs: hybrid and purecap. 
Hybrid is your standard pointers-are-integers ABI, with the ability to annotate 
select pointers as instead being capabilities. AS0 is used for integer 
pointers, as the default thing and to follow upstream, and AS200 is used for 
capability pointers as the new special thing. When it comes to purecap, *all* 
pointers are to be capabilities. We could change AS0 to be a capability in that 
scenario, but now the backend becomes a lot more complicated, because what 
address space means what is changing based on the ABI. So instead we leave AS0 
as meaning integer pointers (currently no syntax for them in CHERI C as they're 
not that useful, but they work fine in IR) and AS200 as meaning capability 
pointers, but that means AS0 can't be used for `void *` any more, which gets 
annoying with things like libcall handling code, where we have various hacks.

https://github.com/llvm/llvm-project/pull/88182
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to