Я пытаюсь сделать запрос на импортный импорт, написанный в LLVM, используя идеи из этого post, но я просто продолжаю получать segfaults. Вот что у меня есть в настоящее время.запрос на импорт иностранного импорта в LLVM
В Haskell
{-# LANGUAGE GHCForeignImportPrim #-}
{-# LANGUAGE MagicHash, UnboxedTuples #-}
{-# LANGUAGE ForeignFunctionInterface, UnliftedFFITypes #-}
import GHC.Prim
foreign import prim "primllvm" primllvm :: Word# -> Word# -> (# Word#, Word# #)
И в .ll
файле
define cc10 void @primllvm(i64* %baseReg, i64* %sp, i64* %hp, i64* %buffer, i64 %length, i64 %r3, i64 %r4, i64 %r5, i64 %r6, i64* %spLim, float %f1, float %f2, float %f3, float %f4, double %d1, double %d2)
{
%fp = bitcast i64* %sp to void(i64*, i64*, i64*, i64*, i64, i64, i64, i64, i64, i64*, float, float, float, float, double, double)*
tail call cc10 void %fp(i64* %baseReg, i64* %sp, i64* %hp, i64* %buffer, i64 %length, i64 %r3, i64 %r4, i64 %r5, i64 %r6, i64* %spLim, float %f1, float %f2, float %f3, float %f4, double %d1, double %d2) noreturn;
ret void
}
В теории я думаю, что это надо просто вернуть его аргументы в виде кортежа, но, как я уже сказал, это просто ошибки сегментации. Любая помощь, чтобы получить эту работу оценили.