int main(void) { uint32_t sr; printf("Init syscall handler.\n\r"); overwriteSYSCALL(); // Configure the assertion fabric printf("Enabling the assertion fabric.\n\r"); setAttackEnables(0); disableFabric(); enableFabric(); // Go to user mode printf("Going to user mode.\n\r"); sr = getSPR(SPR_SR); sr = sr & 0xfffffffe; setSPR(SPR_SR, sr); // Do some stuff printf("Waiting.\n\r"); busyWait(); // Trigger attack printf("Triggering attack.\n\r"); setAttackEnables(1 << 7); // Do some stuff printf("Waiting.\n\r"); busyWait(); printf("Syscall enter.\n\r"); asm volatile( "l.sys 1234" ); printf("Syscall exit.\n\r"); // Do some stuff printf("Waiting.\n\r"); busyWait(); // Test printf("EEAR = %x.\n\r", getSPR(SPR_EEAR_BASE)); if(getSPR(SPR_EEAR_BASE) != 0xdeadbeef) printf("DEFENSE SUCCESS\n\r"); else printf("DEFENSE FAILURE\n\r"); // Exit printf("Exit.\n\r"); return 0; }
int main(void) { unsigned int sr; // Configure the assertion fabric printf("Configuring assertion fabric.\n\r"); disableFabric(); configureFabric(); enableFabric(); // Go to user mode printf("Going to user mode.\n\r"); sr = getSPR(SPR_SR); sr = sr & 0xfffffffe; setSPR(SPR_SR, sr); // Do some stuff printf("Waiting.\n\r"); busyWait(); // Trigger attack printf("Triggering attack.\n\r"); setSPR(SPR_PCCR(3), 0x80000000); setSPR(SPR_PCCR(3), 0x00000000); // Do some stuff printf("Waiting.\n\r"); busyWait(); // Test if((getSPR(SPR_SR) & 0x1) == 0) printf("DEFENSE SUCCESS\n\r"); else printf("DEFENSE FAILURE\n\r"); // Exit printf("Exit.\n\r"); return 0; }