2017-02-03 43 views
7

Chciałbym uruchomić przykład RxCpp w interpreter IR llvm lli.Błąd llvm: Przenoszenie nie jest jeszcze zaimplementowane! przy uruchomieniu RxCpp w orcjit lub lli

Niestety, działa którykolwiek z przykładów RxCpp zawodzi w 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 

error-message:

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

Pytania:

Co oznacza ten błąd dokładnie oznacza? - jakie założenia poczyniono w orc-jicie LVV, które nie są spełnione?

Czy istnieje obejście? - czy są jakieś transformacje LLVM-IR, które mogę zastosować, aby to działało (np. poprzez flagę kompilatora)?

Jakie funkcje specjalne używa RxCpp, które powodują ten problem w orcjit firmy llvm?

testowany na:

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

możesz chcieć wymienić wersję klang, z której korzystasz, i platformę, na której jesteś. –

Odpowiedz

1

Wydaje się być problem z thread_local/__thread.

Zastąpienie #define RXCPP_THREAD_LOCAL __thread w rx-utils.hpp z białymi spacjami "rozwiązuje" ten problem.

Powodem jest błąd w zapleczu LLVM, ponieważ nie obsługuje jeszcze protokołu TLS. Jest to związane z Bug 21431 oraz z brakiem niektórych strategii relokacji w RuntimeDyld użytkownika llvm.