Ошибка llvm: перемещение еще не осуществлено! при запуске RxCpp в orcjit или lli

Я хотел бы запустить пример RxCpp в ИК-интерпретаторе llvm lli,

К сожалению, запуск любого из примеров RxCpp завершается неудачно в 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

сообщение об ошибке:

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

Вопросы:

Что именно означает эта ошибка? — Какие предположения сделаны в orv-jit llvm, которые не выполняются?

Есть ли обходной путь? — есть ли какие-либо преобразования LLVM-IR, которые я могу применить, чтобы сделать эту работу (например, через флаг компилятора)?

Какие специальные функции использует RxCpp, которые вызывают эту проблему в orvjit от llvm?

проверено на:

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

7

Решение

Кажется, проблема с thread_local / __thread,

Замена #define RXCPP_THREAD_LOCAL __thread в rx-utils.hpp с пробелами «исправляет» эту проблему.

Причина — сбой в бэкэнде LLVM, поскольку он еще не поддерживает TLS. Это связано с Ошибка 21431 и тот факт, что в RuntimeDyld компании llvm отсутствуют некоторые стратегии перемещения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]