【发布时间】:2011-11-03 16:24:20
【问题描述】:
我想将调试元数据添加到我生成的 llvm IR 中,它是通过 C API 创建的。但是,我不知道如何创建命名元数据节点(例如!llvm.dbg.cu),甚至不知道如何创建具有唯一编号的元数据节点(即!0、!1 等)。在指令中添加元数据操作数看起来很简单,但我不知道如何创建独立的元数据节点。
【问题讨论】:
我想将调试元数据添加到我生成的 llvm IR 中,它是通过 C API 创建的。但是,我不知道如何创建命名元数据节点(例如!llvm.dbg.cu),甚至不知道如何创建具有唯一编号的元数据节点(即!0、!1 等)。在指令中添加元数据操作数看起来很简单,但我不知道如何创建独立的元数据节点。
【问题讨论】:
在 LLVM 3.0 中,C API 中没有公开用于创建或修改命名元数据的函数。在 3.0 版本之后,一个新函数 (LLVMAddNamedMetadataOperand) 是 recently added to the API。
如果您愿意从源代码构建 LLVM,则可以从主干获得此支持。请参阅Getting Started 页面了解如何构建 LLVM。否则你将不得不等到 LLVM 3.1 发布。
当函数可用时,调用就很简单了:
LLVMAddNamedMetadataOperand(module, "named_md_name", mdnode);
如果没有名为“named_md_name”的命名元数据,则将创建一个。否则将更新现有对象。
【讨论】: