【问题标题】:Why does Clang generate ud2 opcode on OSX?为什么 Clang 在 OSX 上生成 ud2 操作码?
【发布时间】:2014-02-03 13:59:28
【问题描述】:

这可能类似于这里的一个问题: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,所以看起来优化有点不对劲。

任何帮助将不胜感激。

【问题讨论】:

  • 这个问题比 Stackoverflow 更适合Clang developer's mailing listLLVM bugtracker。话虽如此,请尝试将您的代码减少到 SSCCE,并将其发布到邮件列表或 bugtracker。然后,可以解决此问题的人将拥有解决问题所需的一切。

标签: macos assembly clang


【解决方案1】:

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

所以我怀疑编译器发出了一些警告,您忽略或抑制了这些警告。尝试在命令行中添加-Wall -Werror

【讨论】:

  • 我通过修复警告解决了一个这样的问题。我将进行一次新的警告扫描,看看其他问题是否消失。
猜你喜欢
  • 2012-06-23
  • 2016-01-19
  • 2020-10-16
  • 1970-01-01
  • 2019-09-22
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
相关资源
最近更新 更多