Runtime error using LLVM bitcode execution
Benzinger, Ralph
ralph.benzinger at sap.com
Fri Feb 28 08:48:21 UTC 2014
Hello Simon,
Thanks for your suggestion! I ran the LLVM mangler against the hfun.ll file, but it didn't make any changes to the code at all. (My understanding is that I can leave the hfun_stub alone.)
Am I missing something?
Regards
Ralph
-----Original Message-----
From: Simon Marlow [mailto:marlowsd at gmail.com]
Sent: Mittwoch, 26. Februar 2014 09:11
To: Benzinger, Ralph; ghc-devs at haskell.org
Subject: Re: Runtime error using LLVM bitcode execution
My guess is that this isn't working because GHC needs to post-process
the assembly generated by LLVM to support tables-next-to-code. You
could extract this phase from GHC (it's just one module, in
compiler/llvmGen/LlvmMangler.hs) and run it as a standalone program.
Cheers,
Simon
On 21/02/2014 16:02, Benzinger, Ralph wrote:
> Hello,
>
> My apologies in advance if this mailing list is not the appropriate
> address for posting my problem with the GHC runtime, but it seemed
> like the best option on the GHC home page.
>
> I'm trying to execute standalone Haskell functions exported via FFI
> and compiled as LLVM bitcode. Unfortunately, all my efforts yield the
> following runtime error:
>
> lu003107:~/hs-bitcode> ./bce_so hsallinone.bc
> hs_init complete
> hs_add_root complete
> hsallinone: internal error: stg_ap_p_ret
> (GHC version 7.6.3 for x86_64_unknown_linux)
> Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
> 0 bce_so 0x0000000000d6b310
> 1 bce_so 0x0000000000d6b53b
> 2 bce_so 0x0000000000d6ba1c
> 3 libpthread.so.0 0x00007f7683298800
> 4 libc.so.6 0x00007f7682592b35 gsignal + 53
> 5 libc.so.6 0x00007f7682594111 abort + 385
> 6 libHSrts-ghc7.6.3.so 0x00007f7683f6ca21 rtsFatalInternalErrorFn + 177
> 7 libHSrts-ghc7.6.3.so 0x00007f7683f6cce1 barf + 145
> 8 libHSrts-ghc7.6.3.so 0x00007f7683f8a24a stg_ap_p_info + 130
> Stack dump:
> 0. Program arguments: ./bce_so hsallinone.bc
> Aborted
>
> This is what I do:
>
> I have a function hfun.hs that exports a function
>
> foreign export ccall hfun :: CInt -> CInt
>
> and a wrapper cmain.c that calls this function:
>
> #include <HsFFI.h>
> #include "hfun_stub.h"
> extern void __stginit_HFun(void);
> #include <stdio.h>
>
> int main(int argc, char *argv[])
> {
> hs_init(&argc, &argv);
> printf("hs_init complete\n");
>
> hs_add_root(__stginit_HFun);
> printf("hs_add_root complete\n");
>
> int i = hfun(42);
> printf("hfun(42) = %d\n", i);
>
> hs_exit();
> return 0;
> }
>
> To generate a callable bitcode file I use these commands:
>
> $ ghc -S -keep-llvm-files -keep-tmp-files hfun.hs
> $ llvm-as hfun.ll
> $ cp /tmp/... hfun_stub.c
> $ clang -c -emit-llvm -I /opt/ghc/lib/ghc-7.6.3/include hfun_stub.c
> $ clang -c -emit-llvm -I /opt/ghc/lib/ghc-7.6.3/include cmain.c
> $ llvm-link cmain.bc hfun_stub.bc hfun.bc -o hsallinone.bc
>
> My main program "bce_so" loads the linked bitcode and feeds it to the
> LLVM execution engine. All required Haskell runtime libraries are
> linked dynamically against bce_so.
>
> Could you kindly provide some insight on whether this runtime error is
> due to a bug with GHC (unlikely) or rather some negligence in my
> setup? Or does the issue highlight some principal limitation in my
> (admittedly somewhat naive) approach of using LLVM -- threading
> support, maybe?
>
> Note that compiling hfun.hs/cmain.c into a .so and executing
> everything natively using ldload() works flawlessly.
>
> Regards
> Ralph
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: hfun.ll
Type: application/octet-stream
Size: 42784 bytes
Desc: hfun.ll
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20140228/42852ab9/attachment-0001.obj>
More information about the ghc-devs
mailing list