Получение ILL_ILLOPC (недопустимый код операции) при попытке выполнить инструкции MRC или MCR на Android - PullRequest
3 голосов
/ 07 октября 2011

Я использую ARM Assembly, пытаясь получить доступ к нескольким регистрам сопроцессора.Всякий раз, когда у меня есть что-то вроде

mcr p15, #1, r1, c1, c0

или

mrc p15, #0, r0, c1, c0

, я получаю signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 80400d00 ошибку, которая означает, что что-то получает недопустимый (я полагаю, несуществующий) код операции (инструкция).Есть несколько возможностей.Сами инструкции mrc и mcr могут быть недопустимыми, но код компилируется без нареканий.Если бы это была проблема привилегированного режима, я бы ожидал увидеть ILL_PRVOPC SIGILL.

Другая возможность состоит в том, что код операции, который является частью mrc и mcr (синтаксис MRC{2}<c><q> <coproc>, #<opc1>, <Rt>, <CRn>, <CRm>) может быть незаконным.Я пробовал возможные коды операций, но все равно получаю ту же ошибку и тот же дамп стека.

Обычно ли в Android разрешены инструкции или это неправильно?Что-нибудь еще, что я должен смотреть, чтобы отладить?

1 Ответ

5 голосов
/ 08 октября 2011

Это действительно из-за недостаточных провинций. Вы не можете сделать это из пользовательского режима, это вызывает исключение Undefined Instruction, которое переводится в SIGILL / ILL_ILLOPC. grep -Hr PRVOPC <path-to-linux-kernel>/arch/arm ничего не дает, а то же самое для ILLOPC даст вам do_undefinstr().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...