| |
| Posted by Carl | PermalinkReply |
|
Carl
| Hello guys,
I would like to ask a question more about llvm than about d :)
I'm not sure that this is "correct" thing to do, but I'm stuck and out of options.
(flame away if you feel like I'm abusing your forum)
I'm using llvm on windows (with mingw) to compile IR code that my program generates.
Which is pretty much what you did with the D compiler.
I do it in two phases:
TargetMachine targetMachine = target.createTargetMachine(triple);
targetMachine.setAsmVerbosityDefault(true);
targetMachine.setFunctionSections(true);
targetMachine.setDataSections(true);
targetMachine.getOptions().setNoFramePointerElim(true);
output.reset();
targetMachine.emit(module, output, CodeGenFileType.AssemblyFile);
module.dispose();
context.dispose();
byte[] asm = output.toByteArray();
output.reset();
asm = output.toByteArray();
BufferedOutputStream oOut = new BufferedOutputStream(new FileOutputStream(oFile));
targetMachine.assemble(asm, clazz.getClassName(), oOut);
oOut.close();
Unfortunately, the assemble call fails with the error
org.robovm.llvm.LlvmException: java.io.PrintWriter:478:2: error: unknown directive
.section .text$java_io_PrintWriter_checkError__Z_lookup,"xr"
^
java.io.PrintWriter:479:2: error: unknown directive
.linkonce discard
^
java.io.PrintWriter:629:2: error: unknown directive
.section .text$java_io_PrintWriter_clearError__V_lookup,"xr"
^
java.io.PrintWriter:630:2: error: unknown directive
.linkonce discard
^
java.io.PrintWriter:818:2: error: unknown directive
.section .text$java_io_PrintWriter_close__V_lookup,"xr"
^
java.io.PrintWriter:819:2: error: unknown directive
.linkonce discard
^
java.io.PrintWriter:1008:2: error: unknown directive
.section .text$java_io_PrintWriter_flush__V_lookup,"xr"
^
java.io.PrintWriter:1009:2: error: unknown directive
.linkonce discard
^
java.io.PrintWriter:1062:2: error: unknown directive
.section .text$java_io_PrintWriter_format__Ljava_lang_String$3B$5BLjava_lang_Object$3B__Ljava_io_PrintWriter$3B_lookup,"xr"
^
java.io.PrintWriter:1063:2: error: unknown directive
.linkonce discard
Did you ever get that error?
The fact is I need to generate my code in two steps (emit assembly and then assemble) because of some ASM processing.
It is interesting to notice that if I generate the obj directly with targetMachine.emit(module, output, CodeGenFileType.ObjectFile);
the generation is OKAY.
(but then my program is unable to process the ASM, so that's not good).
|