Yak*_*kov 5 debugging llvm debug-symbols
我尝试理解 LLVM 程序的高级结构。我在书中读到“程序由模块组成,每个模块对应于翻译单元”。有人可以更详细地解释我上面的内容以及模块和翻译单元之间的区别是什么(如果有的话)。我也有兴趣知道翻译单元启动并完成调试信息编码时调用哪部分代码?
翻译单位是语言标准中的术语。例如,这是来自 C(c99 iso 草案)
5.1 概念模型;5.1.1 翻译环境;5.1.1.1 程序结构
AC程序不需要全部同时翻译。在本国际标准中,程序的文本保存在称为源文件(或预处理文件)的单元中。源文件以及通过预处理指令 #include 包含的所有标头和源文件一起称为预处理翻译单元。经过预处理后的预处理翻译单元称为翻译单元。
因此,翻译单元是预处理后的单个源文件(file.c)(实例化所有#included*.h文件,展开所有宏,跳过所有注释,并且文件已准备好进行标记化)。
翻译单元是编译单元,因为在链接步骤之前它不依赖于任何外部资源。所有标头都在 TU 内。
术语模块没有在语言标准中定义,但据我所知,它指的是translation unit更深层次的翻译阶段。
LLVM 将其描述为:http://llvm.org/docs/ProgrammersManual.html
Module 类代表 LLVM 程序中存在的顶层结构。LLVM 模块实际上是原始程序的翻译单元或由链接器合并的多个翻译单元的组合。
Module 类跟踪函数列表、全局变量列表和符号表。此外,它还包含一些有用的成员函数,试图使常见操作变得容易。
关于你的问题的这一部分:
我也有兴趣知道翻译单元启动并完成调试信息编码时调用哪部分代码?
这取决于 LLVM 的使用方式。LLVM 本身是一个库,可以通过多种方式使用。
对于 clang/LLVM(基于 libclang 和 LLVM 的 C/C++ 编译器),在预处理阶段后创建的翻译单元。它将被解析为 AST,然后解析为 LLVM 程序集并保存在 Module 中。
对于教程示例,这里是模块的创建http://llvm.org/releases/2.6/docs/tutorial/JITTutorial1.html
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |