B3.3 __attribute__((cmse_nonsecure_call)) function attribute
Declares a non-secure function type
A call to a function that switches state from Secure to Non-secure is called a
non-secure function call. A non-secure function call can only happen through
function pointers. This is a consequence of separating secure and non-secure code
into separate executable files.
A non-secure function type must only be used as a base type of a pointer.
Example
#include <arm_cmse.h>
typedef void __attribute__((cmse_nonsecure_call)) nsfunc(void);
void default_callback(void) { … }
// fp can point to a secure function or a non-secure function
nsfunc *fp = (nsfunc *) default_callback; // secure function pointer
void __attribute__((cmse_nonsecure_entry)) entry(nsfunc *callback) {
fp = cmse_nsfptr_create(callback); // non-secure function pointer
}
void call_callback(void) {
if (cmse_is_nsfptr(fp)){
fp(); // non-secure function call
}
else {
((void (*)(void)) fp)(); // normal function call
}
}
Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers of your data.