gpt4 book ai didi

gcc - __builtin_va_start 在哪里定义?

转载 作者:行者123 更新时间:2023-12-04 21:12:35 25 4
gpt4 key购买 nike

我正在尝试定位 __builtin_va_start 在 GCC 源代码中的定义位置,并查看它是如何实现的。 (我一直在寻找 va_start 的定义位置,然后发现这个宏被定义为 __builtin_va_start。)我在 GCC 9.1 中使用了 cscope -r的源代码目录来搜索定义但没有找到。谁能指出这个函数是在哪里定义的?

最佳答案

那个__builtin_va_start 未定义任何地方。这是一个 GCC compiler builtin (有点像 sizeof 是编译时运算符)。这是与 <stdarg.h> 相关的实现细节 standard header (由编译器提供,而不是 C 标准库实现 libc )。真正重要的是calling conventionsABI然后是生成的汇编程序。

GCC 有特殊的代码来处理编译器内建。并且该代码不是定义内置的,而是实现其在编译器内的临时行为。和__builtin_va_start扩展成你编译的 C/C++ 代码的一些编译器特定的内部表示,特定于 GCC(可能是一些 GIMPLE)

从您的评论中,我推断您对实现细节感兴趣。但是这应该是你的问题

如果您研究 GCC 9.1 源代码,请查看 gcc-9.1.0/gcc/builtins.c 中的一些 (那里的expand_builtin_va_start 函数),以及gcc-9.1.0/gcc/c-family/c-cppbuiltin.c 中的other 内置函数, gcc-9.1.0/gcc/cppbuiltin.c , gcc-9.1.0/gcc/jit/jit-builtins.c

你可以自己写GCC plugin (在 2019 年第二季度,对于 GCC 9,您的插件的 C++ 代码可能必须针对 future 的 GCC 10 进行更改)以添加您自己的 GCC 内置函数。顺便说一句,您甚至可能重载 现有 __builtin_va_start 的行为通过您自己的特定代码,和/或您可能拥有 - 至少出于研究目的 - 您自己的 stdarg.h带有 #define va_start(v,l) __my_builtin_va_start(v,l) 的标题并让您的 GCC 插件了解您的 __my_builtin_va_start插件特定的内置。但是请注意 GCC runtime library exception并阅读其理由:我不是律师,但我倾向于认为您应该(并且该法律文件要求您)使用一些开源许可证发布您的 GCC 插件。

您首先需要阅读有关编译器的教科书,例如 Dragon book ,了解 optimizing compiler主要是转换已编译代码的内部表示。

您还需要花费数月时间研究 GCC 的许多内部表示。请记住, GCC是一个非常复杂程序(大约一千万行代码)。不要指望只用几天的工作就能理解它。查看GCC resource center website .

我死了GCC MELT项目有引用和slides解释更多 GCC(GCC 的设计理念和架构变化缓慢;因此即使个别细节发生变化,概念仍然相关)。 我花了将近 十年 的全部时间来部分理解 GCC 的一些中端层。我无法在 StackOverflow 答案中传递这些知识。

我的draft Bismon report (正在进行的工作,由 H2020 资助,官僚机构很多)有十几页(在其第 1.3 和 1.4 节中)介绍了 GCC 的内部表示。

关于gcc - __builtin_va_start 在哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56412342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com