Su un core ARM Cortex A9, è necessario eseguire istruzioni privilegiate in modo che il codice non privilegiato possa utilizzare i contatori delle prestazioni. Ad esempio con questo codice in linea GCC, che dovrebbe essere eseguito in un kernel:
/* Allow access to perf counter */
__asm__ __volatile__ ("\tMCR p15, 0, %0, C9, C14, 0\n" :: "r" (1));
/* Turn off counter overflow interrupts */
__asm__ __volatile__ ("\tMCR p15, 0, %0, C9, C14, 2\n" :: "r" (0x8000000f));
Se l'accesso non è abilitato, i programmi utente che tentano di accedere al contatore di cicli ricevono un'eccezione "istruzione illegale" e, naturalmente, i programmi utente non possono eseguire la sequenza di abilitazione.
La mia domanda è, c'è qualche motivo di sicurezza per proteggere i contatori?
Tutto quello che posso pensare è che in un ambiente di tipo informatico fidato, il codice non privilegiato potrebbe ottenere informazioni di temporizzazione molto precise sulle chiamate ad un certo codice sensibile alla sicurezza.
Voglio ottenere quante più informazioni possibile prima di aggiungere tale codice al codice di avvio di un kernel che i clienti integreranno nei prodotti finali che hanno requisiti di sicurezza rigorosi.