【问题标题】:Qemu - invalid opcodeQemu - 无效的操作码
【发布时间】:2014-03-28 04:35:15
【问题描述】:

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

  1. 在 QEMU 中运行代码(公平地说,我实际上没有尝试过任何其他模拟器/硬件)

  2. 代码使用 -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?

【问题讨论】:

    标签: kernel clang qemu


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-09
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2011-07-23
      • 2015-07-31
      相关资源
      最近更新 更多