को रस्मी कॉल मैं इस post से विचारों का उपयोग कर एक विदेशी आयात रस्मी LLVM में लिखा करने के लिए कॉल करने के लिए कोशिश कर रहा हूँ, लेकिन मैं तो बस हो रही segfaults रहते हैं। यहाँ मैं वर्तमान में मिल गया है है।विदेशी आयात LLVM
हास्केल
{-# 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
}
सिद्धांत रूप में में मुझे लगता है कि यह सिर्फ लौटना चाहिए यह एक टपल के रूप में तर्क है, लेकिन जैसा कि मैंने कहा, यह सिर्फ segfaults। इस काम की सराहना करने के लिए किसी भी मदद करते हैं।