En un núcleo ARM Cortex A9, se deben ejecutar instrucciones privilegiadas para que el código sin privilegios pueda usar contadores de rendimiento. Por ejemplo, con este código en línea GCC, que debería ejecutarse en un núcleo:
/* 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));
Si el acceso no está habilitado, los programas de usuario que intentan acceder al contador de ciclos reciben una excepción de "instrucción ilegal" y, por supuesto, los programas de usuario no pueden ejecutar la secuencia de habilitación.
Mi pregunta es, ¿existe alguna razón de seguridad para proteger los contadores?
Todo lo que puedo pensar es que en un entorno de tipo informático confiable, un código sin privilegios podría obtener información de tiempo muy precisa sobre las llamadas a algún código sensible a la seguridad.
Quiero obtener toda la información que pueda antes de agregar dicho código al código de inicio de un núcleo que los clientes integrarán en los productos finales que tienen estrictos requisitos de seguridad.