我正在使用LLVM和Clang从.c文件生成程序集列表。指令打印正确,但在开头和结尾LLVM-Clang插入与我的架构不兼容的默认指令。我重写了AsmPrinter类来获取自己的指令,但是我成功地只添加了新指令而不是替换它们。例如:
MyAsmPrinter.c:
class MyAsmPrinter : public AsmPrinter {
...
void EmitStartOfAsmFile(Module &M) override;
void EmitEndOfAsmFile(Module &M) override;
...
}
void MyAsmPrinter::EmitStartOfAsmFile(Module &M) {
<--- insert something (A)
}
void MyAsmPrinter::EmitEndOfAsmFile(Module &M) {
<--- insert something (B)
}
clangtest.c:
int main()
{
int a, b;
b = 3;
a = b*b;
return a;
}
我输入:
./bin/clang -target mytarget -S clangtest.c -o test.s
得到
.text
<--- (A goes here)
.file "clangtest.c"
.globl main
.type main,@function
main:
(correct asm code here)
.Ltmp0:
.size main, .Ltmp0-main
.ident "clang version 3.6.0 ..."
.section ".note.GNU-stack","",@progbits
<--- (B goes here)
但我想摆脱“.text”,“。file”和“.ident”。无论如何它们插入的地方?我试着谷歌搜索,greping其他目标和LLVM源代码的源代码,但没有发现任何东西。那么,任何人都可以给我一个如何做到这一点的提示吗?