为什么Clang在OSX上生成ud2操作码?

时间:2014-02-03 13:59:28

标签: macos assembly clang

这可能类似于这里的一个问题:What's the purpose of the UD2 opcode in the Linux kernel?但是,我在OSX上得到这个而不是在Linux上,并且不知道在哪里查看它是否与BUG相同(那里提到的宏。

我的OSX版本中的一些版本构建只会崩溃,这与ud2操作码有关,并且想知道什么会导致clang生成它们。这是一个例子:

COMMON_UI::BackProject3DPosition(UTILITYLIB::TVECTOR<float, 3u> const&, UTILITYLIB::TVECTOR<float, 3u> const&) const:
0x1e0705c:  pushl  %ebp
0x1e0705d:  movl   %esp, %ebp
0x1e0705f:  ud2    
0x1e07061:  nop    

这只发生在-O2,而不是-O1,所以看起来好像很容易出错。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我不是100%确定clang,但gcc有时会插入ud2来标记代码区域,这些代码区域会显示未定义的行为,因此不应该执行。但是,它会在这种情况下发出警告。

所以我怀疑编译器会发出一些忽略或抑制的警告。尝试将-Wall -Werror添加到命令行。