开发者

How to generate bitcode from dragonegg

开发者 https://www.devze.com 2023-04-07 13:38 出处:网络
Back when dragonegg was in llvm-gcc one could issue -emit-llvm and it did generate llvm bitcode. Now when I use dragonegg as a plugin (gcc -fplugin=dragonegg.so) I cannot find any such option anymore.

Back when dragonegg was in llvm-gcc one could issue -emit-llvm and it did generate llvm bitcode. Now when I use dragonegg as a plugin (gcc -fplugin=dragonegg.so) I cannot find any such option anymore. The only thing I found was generating LLVM IR - which is not what I want. How is it still pos开发者_Python百科sible to generate bitcode?

GCC is 4.6, LLVM and Dragonegg are current SVN. And using clang is not an option since its C++11 support is feeble.


Since outputting LLVM bitcode doesn't seem to be possible anymore I wrote a python script which then feeds the IR to llvm-as which then gives me bitcode. Performance-wise this is a catastrophe, but at least it works.

#/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()


From the 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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号