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?