Question

Je suis en train de lire et d'appeler une fonction de LLVM analysable dans LLVM 2.8 code binaire. J'ai tout travail en dehors de l'appel proprement dit, ce qui provoque le plantage du programme.

D'abord, j'ai ce code C:

void hello() {}

J'ai compilé cela avec:

llvm-gcc -c -emit-llvm hello.c -o hello.bc

Voici une version édulcorée du code qui est censé lire:

using namespace std;
using namespace llvm;

void callFunction(string file, string function) {
  InitializeNativeTarget();

  LLVMContext context;
  string error;

  MemoryBuffer* buff = MemoryBuffer::getFile(file);
  Module* m = getLazyBitcodeModule(buff, context, &error);

  // Check the module parsed here.
  // ...

  ExecutionEngine* engine = ExecutionEngine::create(m);

  // Check the engine started up correctly here.
  // ...

  Function* func = m->getFunction(function);

  // Check the function was found here.
  // ..

  vector<GenericValue> args(0);

  // This is what crashes.
  engine->runFunction(func, args);
}

J'ai inclus beaucoup d'en-têtes de LLVM, y compris ExecutionEngine / JIT.h, et les contrôles de code à chaque étape pour faire des valeurs sûres ne sont pas NULL. Il analyse le code binaire, et je l'ai examiné la fonction qu'il trouve pour le confirmer a été comme prévu.

J'ai aussi essayé moi-même la construction d'un module et fonction, qui fonctionne comme prévu, de sorte que le problème se pose sans aucun doute du fait que la fonction est produit par le code binaire.

Était-ce utile?

La solution

J'ai réussi à obtenir cette course comme prévu. J'étais curieux de savoir si le problème réside dans le processus ci-dessus, mais ce n'est évidemment pas le cas. Le système je courais cela comme une partie était à l'origine du crash, et le code ci-dessus fait le travail lui-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top