Runtime error using LLVM bitcode execution
Simon Marlow
marlowsd at gmail.com
Mon Mar 3 08:39:56 UTC 2014
I believe the problem is that we can't represent the output of the
mangler in LLVM's intermediate language as it stands. Although I think
it may now be possible to do this with LLVM 3.4:
http://www.haskell.org/pipermail/ghc-devs/2013-September/002565.html
GHC's code generator needs to be updated to take advantage of this. Is
anyone interested in looking into it?
Cheers,
Simon
On 03/03/14 07:58, Nathan Howell wrote:
> Slightly related... is it possible to implement the evil mangler as an
> LLVM MC optimization instead of a standalone post-processor? Seems like
> it could be faster.
>
>
> On Sun, Mar 2, 2014 at 11:39 PM, Benzinger, Ralph
> <ralph.benzinger at sap.com <mailto:ralph.benzinger at sap.com>> wrote:
>
> Hallo Simon,
>
> Oh, I see ... Well, that's unfortunate, as we're working with the
> .ll files rather than the .s files.
>
> I guess I'll try to create my own mangler that will work on the .ll
> files instead, if that's feasible ...
>
> Regards
> Ralph
>
>
> -----Original Message-----
> From: Simon Marlow [mailto:marlowsd at gmail.com
> <mailto:marlowsd at gmail.com>]
> Sent: Freitag, 28. Februar 2014 10:43
> To: Benzinger, Ralph; ghc-devs at haskell.org <mailto:ghc-devs at haskell.org>
> Subject: Re: Runtime error using LLVM bitcode execution
>
> You need to run it against the assembly file (.s) that LLVM generates,
> not the .ll file.
>
> Cheers,
> Simon
>
> On 28/02/2014 08:48, Benzinger, Ralph wrote:
> > 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
> <mailto:marlowsd at gmail.com>]
> > Sent: Mittwoch, 26. Februar 2014 09:11
> > To: Benzinger, Ralph; ghc-devs at haskell.org
> <mailto: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 <http://libHSrts-ghc7.6.3.so>
> 0x00007f7683f6ca21 rtsFatalInternalErrorFn + 177
> >> 7 libHSrts-ghc7.6.3.so <http://libHSrts-ghc7.6.3.so>
> 0x00007f7683f6cce1 barf + 145
> >> 8 libHSrts-ghc7.6.3.so <http://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
> >>
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org <mailto:ghc-devs at haskell.org>
> http://www.haskell.org/mailman/listinfo/ghc-devs
>
>
More information about the ghc-devs
mailing list