我遇到了意外的"无效操作码"在我的内核代码中引发的异常,仅在以下情况下出现:
在QEMU中运行代码(公平地说,我还没有尝试过任何其他仿真器/硬件)
代码使用-O2或更高版本编译。如果使用-O0或-O1编译,则不会引发异常。
显然clang正在输出一些qemu不支持的操作码,但我不确定如何解决这个问题。如果可能的话,我想避免使用较低的优化级别进行编译。
相关代码似乎相当无害 - 它只是填充位图数组中的值:
for (uint32_t i = 0; i < kNumBitmapEntries; i++) {
if (i > map_index) {
bitmaps[i] = ~0;
} else {
bitmaps[i] = 0;
}
}
有没有办法启用/添加生成的操作码到qemu?
答案 0 :(得分:0)
clang生成的指令要求SSE2在启用之前启用。对于遇到类似问题的任何人,可以按照SSE article on the osdev.org wiki。
启用SSE说明