我想在llvm的IR解释器lli
中运行RxCpp示例。
不幸的是,在lli:中运行任何RxCpp示例都失败了
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
错误消息:
Relocation type not implemented yet!
UNREACHABLE executed at llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp:232!
问题:
这个错误到底意味着什么?-llvm的orc-jit中做出了哪些不满足的假设?
有变通办法吗?-我可以应用LLVM-IR转换来实现这一点吗(例如,通过编译器标志)?
RxCpp使用了哪些特殊功能,导致llvm的orcjit出现此问题?
测试日期:
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
似乎是thread_local
/__thread
的问题。
将rx-utils.hpp
中的#define RXCPP_THREAD_LOCAL __thread
替换为空白"修复"了此问题。
原因是LLVM后端出现故障,因为它还不支持TLS。这与Bug 21431以及llvm的RuntimeDyld中缺少一些重新定位策略有关。