返回時dragonegg是LLVM-GCC一個可以發出-emit-llvm
並沒有產生LLVM位碼。現在,當我使用dragonegg作爲插件(gcc -fplugin=dragonegg.so
)時,我再也找不到任何這樣的選項。我發現的唯一事情就是生成LLVM IR - 這不是我想要的。 還有可能產生位碼嗎?如何從dragonegg生成位碼
GCC是4.6,LLVM和Dragonegg是當前的SVN。使用鏗鏘聲不是一種選擇,因爲它的C++ 11支持很弱。
返回時dragonegg是LLVM-GCC一個可以發出-emit-llvm
並沒有產生LLVM位碼。現在,當我使用dragonegg作爲插件(gcc -fplugin=dragonegg.so
)時,我再也找不到任何這樣的選項。我發現的唯一事情就是生成LLVM IR - 這不是我想要的。 還有可能產生位碼嗎?如何從dragonegg生成位碼
GCC是4.6,LLVM和Dragonegg是當前的SVN。使用鏗鏘聲不是一種選擇,因爲它的C++ 11支持很弱。
由於輸出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()
從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).
從[文件](http://llvm.org/docs/BitCodeFormat.html):什麼是俗稱LLVM位碼文件格式(也有時不合時宜地被稱爲字節碼)實際上是兩件事:比特流容器格式和LLVM IR編碼成容器格式。 – abergmeier
雖然人們可以得到IR,但你也需要容器。除此之外,我已經嘗試過使用LLVM IR,並且不會被其他LLVM工具識別。 – abergmeier