I have been porting the Morello compartments demo to Debian linux, cross-compiling with g++ and link with LLVM lld.
I have noticed this attempts to use cheri_pcc_get() to build a capability with same bounds/permissions/tag/flag as the PCC, however in Linux hybrid-cap for me this will only read the address part.
Is this the expected behaviour of cheri_pcc_get() in hybrid?This built-in is being compiled to ADRP <reg> by the gcc compiler. According to the Morello architecture reference, in hybrid then ADRP will only read the offset or value which would seem to make sense. A quick check with clang suggests the builtin is being compiled in the same way.So, this would mean that one of the following is true:
What say you?
ThanksPete(P.S: The port was made to work by using cheri_ddc_get() since that also covers the whole memory range, although that seems a bit of a cludge)