Kernel Qemu-无效操作码

Kernel Qemu-无效操作码,kernel,clang,qemu,Kernel,Clang,Qemu,我在内核代码中遇到意外的“无效操作码”异常,该异常仅在以下情况下出现: 在QEMU中运行代码(公平地说,我实际上没有尝试过任何其他模拟器/硬件) 代码是用-O2或更高版本编译的。如果使用-O0或-O1编译,则不会引发异常 显然,clang正在输出一些qemu不支持的操作码,但我不确定如何解决这个问题。如果可能的话,我希望避免使用较低的优化级别进行编译 相关代码似乎相当无害-它只是在位图数组中填充值: for (uint32_t i = 0; i < kNumBitmapEntries; i

我在内核代码中遇到意外的“无效操作码”异常,该异常仅在以下情况下出现:

  • 在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;
        }
    }
    
    (uint32\u t i=0;i{ 如果(i>map\u索引){ 位图[i]=~0; }否则{ 位图[i]=0; } }
    是否有办法启用/添加正在生成到qemu的操作码?

    clang生成的指令需要先启用,然后才能使用。对于遇到类似问题的任何人,SSE指令可以通过以下方式启用