[llvm-commits] [patch] RFC: BrainF -jit fix

Xerxes Rånby xerxes at zafena.se
Wed Jun 17 05:49:19 PDT 2009


Xerxes Rånby skrev:
> This patch makes the BrainF -jit work once again, the fix are similar 
> to Chris r73595 change for lli.
>
> BrainF -jit /home/xerxes/hello.bf
> ------- Running JIT -------
> Hello World!
>
> instead of
>
> BrainF -jit /home/xerxes/hello.bf
> ------- Running JIT -------
> Segmentation fault
>
> Cheers
> Xerxes

Rather than having to rely on using a macro to create 
InitializeX86Target() i would have been happy to use 
InitializeAllTargets() like this:

Index: llvm/examples/BrainF/BrainFDriver.cpp
===================================================================
--- llvm.orig/examples/BrainF/BrainFDriver.cpp    2009-06-17 
12:20:14.000000000 +0200
+++ llvm/examples/BrainF/BrainFDriver.cpp    2009-06-17 
14:36:00.000000000 +0200
@@ -34,6 +34,7 @@
 #include "llvm/ExecutionEngine/JIT.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
+#include "llvm/InitializeAllTargets.h"
 #include <fstream>
 #include <iostream>
 using namespace llvm;
@@ -133,6 +134,9 @@
     abort();
   }
 
+  // If we have a native target, initialize it to ensure it is linked in.
+  InitializeAllTargets();
+
   //Write it out
   if (JIT) {
     std::cout << "------- Running JIT -------\n";

================================================ snap

Yet llvm/InitializeAllTargets.h semms unusable for this purpose, it 
simple spits out:

llvm[0]: Linking Debug executable BrainF
/home/xerxes/llvm/examples/BrainF/Debug/BrainFDriver.o: In function 
`InitializeAllTargets':
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeCppBackendTarget()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeMSILTarget()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeCBackendTarget()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeMSP430Target()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeXCoreTarget()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializePIC16Target()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeCellSPUTarget()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeMipsTarget()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeARMTarget()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeIA64Target()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeAlphaTarget()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializePowerPCTarget()'
/home/xerxes/llvm/include/llvm/Config/Targets.def:26: undefined 
reference to `llvm::InitializeSparcTarget()'

during linking.

Anyone know a better way to initialize the JIT without having to rely on 
arch dependent code?

Cheers
Xerxes



More information about the llvm-commits mailing list