When compiling code using LLVM in normal mode without pure-capability, I was curious as to why the printf function used capability registers? I found this out when I was trying to use the printf function in EL2 which didn't work and fell over on an instruction using capability registers. I then realised I needed to switch on the 'enable morello instructions' bit for EL2 which is turned off by default in the _start code.
So I have a general question as to why capability registers are used when compiling for normal mode without pure-capability switched on? I'm using Development Studio, with target set to Morello. Under what condition by the compiler does it decide to use these registers?
Many thanks for the detailed explanation!