【发布时间】:2014-03-28 04:35:15
【问题描述】:
我在内核代码中遇到了意外的“无效操作码”异常,该异常仅在以下情况下出现:
在 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?
【问题讨论】: