2014-03-28 2 views
0

나는 단지이 때 나타나는 것으로, 내 커널 코드에서 제기되고 예상치 못한 "잘못된 연산 코드"예외가 발생했습니다 : (공정하게의 Qemu 잘못된 연산 코드

  1. 는 QEMU에서 코드를 실행, 나는 천국 ' t 실제로 다른 에뮬레이터/하드웨어 시도)

  2. 코드가 -O2 이상으로 컴파일됩니다. -O0 또는 -O1로 컴파일되면 예외가 발생하지 않습니다.

물론 clang은 qemu가 지원하지 않는 일부 opcode를 출력하고 있지만이 문제를 해결하는 방법은 확실하지 않습니다. 가능하다면 더 낮은 최적화 수준으로 컴파일하는 것을 피하고 싶습니다.

관련 코드

상당히 무해한 것 - 그것은 단지 비트 맵의 ​​배열에 값을 채우고 :

for (uint32_t i = 0; i < kNumBitmapEntries; i++) { 
    if (i > map_index) { 
     bitmaps[i] = ~0; 
    } else { 
     bitmaps[i] = 0; 
    } 
} 

옵 코드는 QEMU에 생성되는 추가/사용 할 수있는 방법이 있나요?

답변

0

clang에 의해 생성되는 명령어는 사용하기 전에 SSE2이 활성화되어야합니다. 유사한 문제가 발생하는 사용자는 을 따라 SSE 지침을 사용하도록 설정할 수 있습니다.