如何在LLVM-Clang中重新实现AsmPrinter以生成我自己的指令集?

时间:2015-07-02 10:11:56

标签: c assembly clang llvm

我正在使用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源代码的源代码,但没有发现任何东西。那么,任何人都可以给我一个如何做到这一点的提示吗?

0 个答案:

没有答案