We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi
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)
Hi Pete,
This is a bug in GCC. I think clang's codegen is correct. So either you can try to use clang or you can temporarily work around this using inline asm until GCC's codegen is fixed.
Thanks a lot for reporting this. Hope that helps.
Alex
Hi Alex, thanks. Let me know if you want me to raise a ticket (somewhere) to record the issue.