尝试将 GCC 特定的 asm goto 移植到 Clang

2024-04-18

我一直在尝试将一些 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););

我尝试将其转换为实际的汇编,但尚未成功。

如果你好奇的话,除了这一部分之外,这是我即将在 clang 上构建的内核的一部分。


您似乎在编译时遇到问题拱门/x86/include/asm/jump_label.h http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/include/asm/jump_label.h。整个代码片段是为了启用对“跳转标签修补”的支持。一项非常有用的新功能,可以在禁用调试时允许调试(打印日志等),开销接近于零。

你遇到的实现取决于 gcc(v4.5),它添加了一个新的asm goto陈述 http://gcc.gnu.org/ml/gcc-patches/2009-07/msg01556.html允许分支到标签。

看起来Clang/LLVM asm goto http://llvm.org/bugs/show_bug.cgi?id=9295.

作为让 Linux 内核正确编译的快速修复方法,您可以禁用CONFIG_JUMP_LABEL在你的内核配置中。该配置选项用于在编译器不支持时禁用优化asm goto适当地。


Update: 初步支持asm goto was 在 v9.0.0 中添加到 Clang https://github.com/llvm/llvm-project/commit/1634b4bc934d67cb5fa356a925ba8efca2259f12.

初步支持asm goto语句(GNU C 扩展)已 添加用于控制从内联汇编到标签的流程。主要消费者为 这个构造是 Linux 内核 (CONFIG_JUMP_LABEL=y) 和 glib。有 Clang 的集成汇编器中仍然存在一些不受支持的极端情况, 如果转换器。请针对您遇到的任何问题提出错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试将 GCC 特定的 asm goto 移植到 Clang 的相关文章

随机推荐

  • 如何解决类似 fb 的框上的 HTML5 验证错误?

    如何解决与 Facebook Like 按钮相关的 HTML 5 验证错误 这是来自验证引擎的文本 第 3170 行 第 261 列 元素名称fb like box不能表示为 XML 1 0 rue border color stream
  • FileSink、StringSink、Filesource、StringSource Crypto++ 之间有什么区别

    我正在读取图像 对其进行加密 然后解密 目标是最终循环并记录该过程完成所需的时间 目前我所拥有的它读取文件 然后加密它 加密它 然后根据恢复的数据创建另一个文件 我不需要用解密的图片创建另一个文件 以前我一直在使用StringSource
  • 碳场所格式和衰落

    如何将区域设置设置为带有格式的碳 我有日期 setlocale LC TIME ru RU UTF 8 Carbon setLocale ru dt Carbon now gt formatLocalized d M 我得到了一个月 25日
  • 在AngularJS中使用包含base64数据的变量加载图像src

    使用包含变量加载图像base64AngularJS 中的数据 我正在尝试找到从包含的变量加载图像源的正确方法base64编码图像数据 例如使用从画布中提取toDataURL 起初我只是尝试这样 img src image dataURL 其
  • Web 应用程序可以使用个人电话发送短信吗

    我有一个客户每月发送大约 5000 条 SMS 消息 他们目前正在 iPhone 上执行此操作 方法是将消息实际输入到手机中 我认为这些信息相当重复 并且通常是针对群体的 他们不使用在线消息网关的原因纯粹是成本 我们可以在澳大利亚使用网关
  • 动态创建 iframe 并为其附加 onload 事件

    我动态创建了一个 iframe 并添加了src归因于它 然后我将此 iframe 附加到页面正文中 知道我想附上onload向 iframe 发送事件以读取 iframe 内容 有人可以建议我该怎么做吗 frame document cre
  • 并发写入向量

    我知道可以同时读取std vector没有 坏 后果 因为这个操作可以被认为是线程安全的 但对于写操作却不能这样说 但是 我想知道这是否并不总是正确的 例如考虑到我的特定情况 我有一个std vector
  • 如何在不更改 equals 和 hashcode 的情况下插入集合

    我正在寻找建议 我有一个Person具有字符串firstName和字符串lastName的类 当我试图插入具有相同字符串的列表值时 例如 set add new Person firstName lastName set add new P
  • 代表当前登录到单独 Web 客户端的用户从 API 访问 MS Graph

    我正在开发一个 API ASP NET Core 可以通过单独托管的 Web 客户端 React 访问 两者都作为应用程序服务托管在 azure 上 客户端应用程序必须具有基于azure Ad的身份验证 单租户 最好由基于aad的azure
  • Bash:向带有空格的字符串添加额外的单引号

    当我尝试将参数作为变量传递给 bash 中的任何命令时 如果变量值有空格 我可以看到 bash 添加了额外的引号 我正在创建一个文件 some file txt 并将其添加到变量 file 中 我正在使用 file 并将其存储在另一个变量
  • 是否有必要将每个 ManagementObject 都处理掉?

    我注意到ManagementObject is IDisposable 但它也是从ManagementClass GetInstances and ManagementObjectSearcher Get 这是否意味着我需要处理遇到的每个对
  • MongoDB 将我的数据库自动设置为“测试”。如何改变呢?

    mongoose connect process env DATABASE URL useNewUrlParser true const MyModel mongoose model mymodel new Schema name Stri
  • WebBrowser 控件:“指定的转换无效。”

    我使用 WebBrowser 控件导航到 WordPress 博客的登录页面 页面加载正常 但每当我尝试从线程访问 WebBrowser 时 我得到一个特定的强制转换无效的异常 另外 在调试时 一切都会冻结大约 5 秒 调试时 我尝试访问控
  • 为什么 SpringJUnit4ClassRunner.withAfterClasses 方法会出现神秘的 MultipleFailureException 错误消息

    为什么我的 Spring 测试设置失败并出现以下不太有用的错误消息 感谢所有建议 JUnit 输出 java lang NoClassDefFoundError org junit runners model MultipleFailure
  • Jquery/Ajax cookie pt2

    继上一个问题之后 上一个问题 https stackoverflow com questions 3916829 jquery ajax cookie 如果检测到 cookie 我似乎无法 触发 ajax 调用 cookie 肯定已设置 并
  • 表单中 PHP 复选框的内爆数组

    我已经查看了内爆数组的多个示例 但无法弄清楚为什么我看不到是否选中了多个复选框 我能否获得有关需要添加哪些代码以及在哪里添加的帮助 谢谢 PHP 代码 to email protected cdn cgi l email protectio
  • 离散连续概率分布

    认识到这可能是一个统计问题和编码问题 假设我使用 Distributions jl 创建了一个正态分布 using Distributions mydist Normal 0 0 2 有没有一种好的 直接的方法可以离散化这样的分布以获得 P
  • 使用包阴影符号

    例如 我有这个包定义 它遮蔽了 COMMON LISP LISTEN defpackage shadows use common lisp shadow listen export listen 然后我想使用另一个包中的这个包 比如说 de
  • 创建反应应用程序不拾取 .env 文件?

    我在用创建反应应用程序 https github com facebookincubator create react app引导我的应用程序 我添加了两个 env files env development and env product
  • 尝试将 GCC 特定的 asm goto 移植到 Clang

    我一直在尝试将一些 GNU 扩展转换为实际的标准 C 这样它就可以在 clang 上运行 知道标准 C 而不是 GNU 扩展 我有点不知所措 asm goto 1 STATIC KEY INITIAL NOP pushsection jum