如何让LLVM后端生成的汇编标签以点号开头?
解决LLVM后端生成局部标签缺少点号前缀的问题
核心原因
LLVM中局部标签的前缀(比如.)是由目标后端的MCAsmInfo类控制的,你的后端没有正确配置私有标签前缀,导致生成的局部标签不带.。
具体修改步骤
定位后端的MCAsmInfo实现类
通常这个类命名格式为[你的目标架构名]MCAsmInfo,比如自定义架构叫MyArch,对应类就是MyArchMCAsmInfo,一般定义在MyArchMCAsmInfo.cpp这类文件中。配置私有标签前缀
在该类的构造函数里,添加或修改PrivateLabelPrefix的赋值:PrivateLabelPrefix = ".";这个参数直接决定LLVM生成私有(局部)标签时的前缀字符,设置为
.后,原本的LBB1_2就会自动变成.LBB1_2。确认标签生成逻辑合规
检查后端的AsmPrinter实现,确保生成基本块标签时使用LLVM标准接口(比如emitBasicBlockStart),而非手动拼接标签名。标准接口会自动读取MCAsmInfo的配置,给局部标签加上前缀。如果是自定义生成标签的代码,要调用createPrivateLabel方法创建私有标签,不要用普通的createLabel。
验证修改
重新编译后端后,生成的汇编代码里的局部标签就会带上.前缀,和参考代码的格式一致。
内容的提问来源于stack exchange,提问作者xiaoroubao
相关产品推荐
相关产品推荐

