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?