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

时间:2012-10-26 14:38:20

标签: llvm

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

中处理符号表

1 个答案:

答案 0 :(得分:4)

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

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

当然,如果你想解析一个文本的IR文件(ll),你可能需要一个符号表(或类似的东西)才能这样做而创建上述链接;但是没有理由认为LLVM已经包含这样的解析器(并且解析器确实使用某种方式将“name”与值相关联 - 请参阅BitcodeReader的实现)。

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