llvm - 在基于 LLVM 的编译器中如何处理符号表?

标签 llvm

我通过教程使用 LLVM http://llvm.org/releases/3.1/docs/tutorial/ 编写玩具编译器
但是关于符号表处理的内容并不多。
有一个命令 llvm-nm 显示符号表,它以位码文件作为输入。它只返回函数名。 LLVM 编译器如何在没有符号表的情况下处理局部变量和循环变量?如果不是这样,符号表是如何处理的

最佳答案

其 IR 的 LLVM 内存表示不使用符号表。指令包含指向其操作数(及其用户)的直接内存链接,因此如果您有一条指令并想要访问其操作数,只需点击该链接,您就不必在任何符号表中执行查找。

有一些与 LLVM 上下文、模块、函数和基本 block 相关联的列表,它们允许您访问包含的元素,但它们大多只是列表,而不是将名称与任何东西相关联的表。

当然,如果您想解析文本 IR 文件 (ll),您可能需要一个符号表(或类似的东西)来执行此操作并创建上述链接;但是看到 LLVM 已经包含这样的解析器(并且该解析器确实使用某种方式将“名称”与值相关联 - 请参阅 BitcodeReader 的实现),几乎没有理由这样做。

至于用于生成 IR 的 LLVM 前端 - 这取决于您。我想说,如果您想解析类似 C 的语言,使用符号表将非常有用。

关于llvm - 在基于 LLVM 的编译器中如何处理符号表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13089015/

相关文章:

ios - LLVM 代码覆盖率/Slather 中实现了哪些覆盖率标准?

c - Apple LLVM 编译器 4.0 报错

c - LLVM 中何时使用 load、store 和 alloca

x86 - 运行 x86 程序 _on_ llvm

c++ - 如何在 Clang 中启用内联函数的编译?

c++ - 我怎样才能从 LLVM 中的 BasicBlock 中识别一个 backedge

llvm - 如何使用 C++ API 将元数据附加到 LLVM IR?

c++ - LLVM 引用了一个不存在的 header

assembly - 'sp' 在 asm clobber 列表中意味着什么?

string - 如何在LLVM中实现字符串数据类型?