Qemu - 操作码无效

时间:2014-03-28 04:35:15

标签: kernel clang qemu

我遇到了意外的"无效操作码"在我的内核代码中引发的异常,仅在以下情况下出现:

  1. 在QEMU中运行代码(公平地说,我还没有尝试过任何其他仿真器/硬件)

  2. 代码使用-O2或更高版本编译。如果使用-O0或-O1编译,则不会引发异常。

  3. 显然clang正在输出一些qemu不支持的操作码,但我不确定如何解决这个问题。如果可能的话,我想避免使用较低的优化级别进行编译。

    相关代码似乎相当无害 - 它只是填充位图数组中的值:

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

    有没有办法启用/添加生成的操作码到qemu?

1 个答案:

答案 0 :(得分:0)

clang生成的指令要求SSE2在启用之前启用。对于遇到类似问题的任何人,可以按照SSE article on the osdev.org wiki

启用SSE说明