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

-- 
Pflichtangaben/Mandatory Disclosure Statements:
http://www.sap.com/company/legal/impressum.epx

Diese E-Mail kann Betriebs- oder Geschäftsgeheimnisse oder sonstige 
vertrauliche Informationen enthalten. Sollten Sie diese E-Mail irrtümlich 
erhalten haben, ist Ihnen eine Kenntnisnahme des Inhalts, eine Vervielfältigung 
oder Weitergabe der E-Mail ausdrücklich untersagt. Bitte benachrichtigen Sie 
uns und vernichten Sie die empfangene E-Mail. Vielen Dank. 

This e-mail may contain trade secrets or privileged, undisclosed, or otherwise 
confidential information. If you have received this e-mail in error, you are 
hereby notified that any review, copying, or distribution of it is strictly 
prohibited. Please inform us immediately and destroy the original transmittal. 
Thank you for your cooperation.

_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to