[英]Extended asm with goto, including an example from the gcc docs, fails to compile
[英]Trying to port GCC specific asm goto to Clang
我一直试图将一些GNU扩展转换为实际的标准C,因此它将在clang上运行,知道标准C而不是GNU扩展,我有点亏。
__asm__ (goto("1:"
STATIC_KEY_INITIAL_NOP
".pushsection __jump_table, \"aw\" \n\t"
_ASM_ALIGN "\n\t"
_ASM_PTR "1b, %l[l_yes], %c0 \n\t"
".popsection \n\t"
: : "i" (key) : : l_yes););
我试图把它变成实际的asm,但还没有成功。
如果你很好奇,这是我刚刚建立在clang上的内核的一部分,除了那一部分。
您似乎在编译arch / x86 / include / asm / jump_label.h时遇到问题 。 整个代码段是为了支持“跳转标签修补”。 一个新功能非常有用,允许调试(打印日志等)在禁用调试时具有接近零的开销。
您遇到的实现取决于gcc(v4.5),它添加了一个新的asm goto
语句 ,允许分支到标签。
作为正确编译Linux内核的快速解决方案,您可以在内核配置中禁用CONFIG_JUMP_LABEL
。 此配置选项用于在编译器不支持asm goto
时禁用优化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.