android assembly arm

Obteniendo ILL_ILLOPC(opcode ilegal) al intentar ejecutar instrucciones MRC o MCR en Android



assembly arm (1)

De hecho, se debe a provileges insuficientes. No puede hacer eso desde el modo de usuario, causa una excepción de Instrucción indefinida que se traduce a SIGILL / ILL_ILLOPC. grep -Hr PRVOPC <path-to-linux-kernel>/arch/arm no produce nada, mientras que hacer lo mismo para ILLOPC te llevará a do_undefinstr() .

Estoy usando ARM Assembly tratando de acceder a varios registros de coprocesador. Cada vez que tengo algo como

mcr p15, #1, r1, c1, c0

o

mrc p15, #0, r0, c1, c0

signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 80400d00 error signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 80400d00 , lo que significa que algo está obteniendo un código de operación (instrucción) ilegal (inexistente, supongo). Hay varias posibilidades. Las instrucciones mrc y mcr pueden ser ilegales, pero el código se compila sin quejas. Si esto fuera un problema de modo privilegiado, esperaría ver un ILL_PRVOPC SIGILL en su lugar.

Otra posibilidad es que el código de operación que es una parte de mrc y mcr (la sintaxis es MRC{2}<c><q> <coproc>, #<opc1>, <Rt>, <CRn>, <CRm> ) podría ser ilegal. He intentado códigos de operación posibles, pero sigo recibiendo el mismo error y el mismo volcado de pila.

¿Android generalmente permite instrucciones o es algo que estoy haciendo que está mal? ¿Algo más que debería estar buscando para depurar?