2011-09-24 41 views
0

返回時dragoneggLLVM-GCC一個可以發出-emit-llvm並沒有產生LLVM位碼。現在,當我使用dragonegg作爲插件(gcc -fplugin=dragonegg.so)時,我再也找不到任何這樣的選項。我發現的唯一事情就是生成LLVM IR - 這不是我想要的。 還有可能產生位碼嗎?如何從dragonegg生成位碼

GCC是4.6,LLVM和Dragonegg是當前的SVN。使用鏗鏘聲不是一種選擇,因爲它的C++ 11支持很弱。

回答

1

由於輸出LLVM位碼似乎沒有可能了我寫了一個Python腳本,隨後把IR至LLVM,爲,然後給我的bitcode。在性能方面,這是一場災難,但至少它是有效的。

#/usr/bin/env python 

import sys, subprocess 

args = list(sys.argv) 
del args[0] # Remove our exec name 
compiler = args[0] 
del args[0] # Remove the compile name 

compileArguments = [compiler] 
outputFile = '' 

foundFile = False 

for arg in args: 
if arg.startswith('-o'): 
    foundFile = True 
elif foundFile: 
    outputFile = arg 
    foundFile = False 
    arg = "/dev/stdout" 

compileArguments.append(arg) 

compileProcess = subprocess.Popen(compileArguments, stdout=subprocess.PIPE) 
asbin = 'llvm-as' 

ir2bcProcess = subprocess.Popen([asbin, '-f', '-o=' + outputFile], stdin=compileProcess.stdout) 

stdout, stderr = ir2bcProcess.communicate() 

compileProcess.wait() 
ir2bcProcess.wait() 
0

README

 
-fplugin-arg-dragonegg-emit-ir 
-flto 
    Output LLVM IR rather than target assembler. You need to use -S with this, 
    since otherwise GCC will pass the output to the system assembler (these don't 
    usually understand LLVM IR). It would be nice to fix this and have the option 
    work with -c too but it's not clear how. If you plan to read the IR then you 
    probably want to use the -fverbose-asm flag as well (see below). 
+0

從[文件](http://llvm.org/docs/BitCodeFormat.html):什麼是俗稱LLVM位碼文件格式(也有時不合時宜地被稱爲字節碼)實際上是兩件事:比特流容器格式和LLVM IR編碼成容器格式。 – abergmeier

+0

雖然人們可以得到IR,但你也需要容器。除此之外,我已經嘗試過使用LLVM IR,並且不會被其他LLVM工具識別。 – abergmeier