I am currently using IAR for developing a Secure and Non Secure application on an STM32U575.
I am calling a function on the secure app from the non-secure app. The function has an added __attribute__( ( cmse_nonsecure_entry ) ) to it which are required for secure entry functions.
Upon examining the disassembly of the instruction the entry function doesnt have a Secure Gateway (SG) instruction but instead tagged as "DC32".
This causes a Bus Fault error as expected since the program wasnt able to transition from non-secure to secure without the SG instruction.
There seems to be no problem with the linker files and the compiler options.
Would anyone be able to know what the problem is here?
Hi RenanI work in the Arm DS team here at Arm.This forum is for users of the Arm Development Studio tools. For assistance with IAR products, please contact IAR directly:https://www.iar.com/supportThe opcode for the SG instruction is 0xE97FE97F, which is the same as you see at 0xC030010. So it looks like the IAR tools are generating an SG instruction correctly, but it is being displayed as data in the debugger rather than as an instruction.Sorry, I can't explain why a data abort is occurring, but I suggest that you check the MPU is setup correctly to allow access to instructions around 0xC030010.Hope this helpsStephen
Thank you for your help. I turns out I am debugging in ARM mode when it was compiled in Thumb mode.
I am currently able to see the correct instructions but still I am encountering bus errors when a PUSH instruction is executed
This instruction occurs when I am calling a function, which is inside the secure project, from the cmse_nonsecure_entry function.
The CFSR shows he following bits set
The BFAR shows this:
This immediately occurs after the Push instruction
Hi RenanA fault when executing a PUSH is often caused by the Stack Pointer not being initialized correctly, so check the value of SP before the PUSH. Another reason might be that the stack region is outside of any valid MPU regions, so check the MPU setup too.As I wrote before, this forum is for users of the Arm Development Studio tools. For assistance with IAR products, please contact IAR directly: https://www.iar.com/supportStephen
Thank you Stephen!
Your point regarding the Stack region became the clue I need to fix this. Turns out I failed to setup the secure side stack in the RTOS that I was using.