2011-10-07 1 views
2

ARM 어셈블리를 사용하여 여러 보조 프로세서 레지스터에 액세스하려고합니다. 내가안드로이드에서 MRC 또는 MCR 명령어를 실행할 때 ILL_ILLOPC (잘못된 연산 코드) 가져 오기

mcr p15, #1, r1, c1, c0 

또는

mrc p15, #0, r0, c1, c0 

과 같이있을 때마다 뭔가가 불법 (존재하지 않는, 내가 가정) 작업 코드 (명령어)를 받고 있음을 의미 signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 80400d00 오류를 얻을. 몇 가지 가능성이 있습니다. mrcmcr 명령어 자체는 불법이지만 불만없이 컴파일됩니다. 이것이 특권 모드 문제라면, 대신 ILL_PRVOPC SIGILL이 표시 될 것으로 예상됩니다.

또 다른 가능성은 mrcmcr (구문은 MRC{2}<c><q> <coproc>, #<opc1>, <Rt>, <CRn>, <CRm>)의 일부인 opcode가 잘못된 것일 수 있습니다. 가능한 opcode 시도했지만 여전히 동일한 오류 및 동일한 스택 덤프 가져 오는 중입니다.

Android에서 일반적으로 지침을 허용합니까, 아니면 내가 잘못하고있는 것입니까? 내가 디버깅 할 때 알아둬야 할 것이 있습니까?

답변

4

사실은 불충분 한 프로 라이져 때문입니다. 사용자 모드에서 그렇게 할 수 없으면 SIGILL/ILL_ILLOPC로 변환 된 정의되지 않은 명령어 예외가 발생합니다. grep -Hr PRVOPC <path-to-linux-kernel>/arch/arm은 아무것도 산출하지 않으며, ILLOPC에 대해 동일한 작업을 수행하면 do_undefinstr()에 도착하게됩니다.

관련 문제