It seems to be caused by the corrupted or wrong CPSR restored on return from exception. NuttX restores the context using code like this: msr spsr, r1 GCC translates this to: msr spsr_fc, r1 As a result, not all SPSR fields are updated on exception return. This should be: msr spsr_fsxc, r1 This bug has been fixed by Heesub Shin in: 343243c7c0de3d0696fa19c08d8d81e8d6cf0a1c Change-Id: Ibc64db7bceecd0fb6ef39284fb5bc467f5603e2e