【问题标题】:clang - error: non-ASM statement in naked function is not supportedclang - 错误:不支持裸函数中的非 ASM 语句
【发布时间】:2018-04-29 05:18:44
【问题描述】:
$ clang --version
clang version 5.0.0 (tags/RELEASE_500/final)  

.

CC ../../py/nlrthumb.c
../../py/nlrthumb.c:79:5: error: non-ASM statement in naked function is not supported
    return 0; // needed to silence compiler warning

为什么 Clang 不支持non-ASM statement in naked function

这在gcc 上运行良好。

mailing list explains it as

裸函数没有序言或结语,所以这样做 内联汇编以外的任何东西的代码生成将完全 命中或错过。

那么gcc怎么能做到呢?

【问题讨论】:

标签: clang inline-assembly llvm-clang


【解决方案1】:

我应该把它写成答案而不是评论。问题是:

为什么 Clang 不支持裸函数中的非 ASM 语句?这在 gcc 上运行良好。

答案是这个在 gcc 中可以正常工作。引用 gcc docsnaked 属性:

只有基本的 asm 语句可以安全地包含在裸函数中。虽然使用扩展 asm 或基本 asm 和 C 代码的混合似乎可以工作,但不能依赖它们可靠地工作并且不受支持。

如果有一个不那么模棱两可的方式来表达这一点,我想不出。

请注意,虽然上面的特定链接适用于 ARM(我猜 OP 正在使用它),但我相信相同的文本适用于支持 naked 的所有平台。

【讨论】:

  • GCC 可能会抛出错误,而不是允许它知道不可靠支持的东西。
  • @MichaelPetch - 没错。所以这里的问题并不是真正的“为什么这在 gcc 而不是 clang 中有效?”更多的是“为什么 gcc 没有给出与 clang 对这种不受支持的用法相同的信息丰富的编译器错误?”这可能不是 OP 想要听到的,但它确实存在。
  • @DavidWohlferd 我只是想要清晰。这个答案提供了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
相关资源
最近更新 更多