2017-02-03 1 views
7

Je voudrais exécuter l'exemple RxCpp dans l'interpréteur IR de llvm lli.Erreur llvm: La relocalisation n'est pas encore implémentée! lors de l'exécution de RxCpp dans orcjit ou lli

Malheureusement, la course l'un des exemples RxCpp échoue dans lli:

git clone https://github.com/Reactive-Extensions/RxCpp.git --depth 1 
cd RxCpp/Rx/v2/examples/pythogerian 
clang++ -S -emit-llvm -fno-use-cxa-exit -I../../src main.cpp 
lli main.ll 

-message d'erreur:

Relocation type not implemented yet! 
UNREACHABLE executed at llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp:232! 

Questions:

Qu'est-ce que cette erreur signifie exactement? - Quelles sont les suppositions faites dans le cadre de l'orc-jit de llvm qui ne sont pas satisfaites?

Y a-t-il une solution de contournement? - Y a-t-il des transformations LLVM-IR que je peux appliquer pour faire ce travail (par exemple via un compilateur-flag)?

Quelles sont les fonctionnalités spéciales utilisées par RxCpp qui causent ce problème dans l'orcjit de llvm?

testé sur:

clang version 5.0.0 (https://github.com/llvm-mirror/clang.git 6c9e299494de2a5b0425e46bc937f29a05128252) 
clang version 4.0.0-+rc1-1 (tags/RELEASE_400/rc1) 
clang version 3.9.0-1 (tags/RELEASE_390/final) 
clang version 3.8.1-12 (tags/RELEASE_381/final) 
Target: x86_64-pc-linux-gnu 
Thread model: posix 
InstalledDir: /usr/bin 
+0

vous pouvez mentionner la version clang que vous utilisez et la plate-forme sur laquelle vous vous trouvez. –

Répondre

1

semble être un problème avec thread_local/__thread.

En remplaçant #define RXCPP_THREAD_LOCAL __thread dans rx-utils.hpp avec un espace "corrige" ce problème.

La raison est une défaillance dans le backend LLVM car il ne prend pas encore en charge TLS. Ceci est lié à Bug 21431 et au fait que certaines stratégies de relocalisation sont manquantes dans RuntimeDyld de llvm.