I’m not sure why I can not trigger SVC exception second time in my program.
Here is my SVC hander:
void default_svc_call_handler(void){
__asm(
".global SVC_Handler_Mainn"
"TST lr, #4n"
"ITE EQn"
"MRSEQ r0, MSPn"
"MRSNE r0, PSPn"
"BL SVC_Handler_Mainn"
);
}
__attribute__((used, noinline)) void SVC_Handler_Main( unsigned int *svc_args )
{
unsigned int svc_number;
/*
* Stack contains:
* r0, r1, r2, r3, r12, r14, the return address and xPSR
* First argument (r0) is svc_args[0]
*/
svc_number = ( ( char * )svc_args[ 6 ] )[ -2 ] ;
switch( svc_number )
{
case 0: /* EnablePrivilegedMode */
__set_CONTROL( __get_CONTROL() & ~0x1 ) ;
break;
case 1: /* DisablePrivilegedMode */
__set_CONTROL( __get_CONTROL() | 0x1 ) ;
break;
default: /* unknown SVC */
break;
}
}
I used __asm("SVC #0);
for the 1st call (SVC handler is triggered). However, I can’t trigger SVC second time.
How can I make sure the SVC handler is triggered?
New contributor
Phu Duong is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.