<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-GB link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal>Hi,<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>I am trying to build a very simple Haskell function (foo)
which I can then<o:p></o:p></p>
<p class=MsoNormal>call from C, using an example I got from the GHC FFI Wiki.
The problem is that<o:p></o:p></p>
<p class=MsoNormal>the resulting program fails to run with a seg fault. <o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Here is the code:<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>---Haskell Module start (Foo.hs)<o:p></o:p></p>
<p class=MsoNormal>module Foo where<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>foreign export ccall foo :: Int -> IO Int<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>foo :: Int -> IO Int<o:p></o:p></p>
<p class=MsoNormal>foo n = return (length (f n))<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>f :: Int -> [Int]<o:p></o:p></p>
<p class=MsoNormal>f 0 = []<o:p></o:p></p>
<p class=MsoNormal>f n = n:(f (n-1))<o:p></o:p></p>
<p class=MsoNormal>---Haskell Module end<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>/*- C module start foo.c*/<o:p></o:p></p>
<p class=MsoNormal>#include <stdio.h><o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>#include "Foo_stub.h"<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>int main(void)<o:p></o:p></p>
<p class=MsoNormal>{<o:p></o:p></p>
<p class=MsoNormal> int x = foo(100);<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal> //printf("x = %d\n", x);<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal> return 0;<o:p></o:p></p>
<p class=MsoNormal>}<o:p></o:p></p>
<p class=MsoNormal>/*- C module end */<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>The I build the a.out with the commands:<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>ghc -fglasgow-exts -fffi -c Foo.hs<o:p></o:p></p>
<p class=MsoNormal>ghc -fglasgow-exts -fffi Foo.o Foo_stub.o foo.c<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Now if I run the resulting a.out then I get:<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Segmentation fault<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Quickly putting this through GDB I get:<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>gdb ./a.out <o:p></o:p></p>
<p class=MsoNormal>GNU gdb Red Hat Linux (6.5-16.el5rh)<o:p></o:p></p>
<p class=MsoNormal>Copyright (C) 2006 Free Software Foundation, Inc.<o:p></o:p></p>
<p class=MsoNormal>GDB is free software, covered by the GNU General Public
License, and you are<o:p></o:p></p>
<p class=MsoNormal>welcome to change it and/or distribute copies of it under
certain conditions.<o:p></o:p></p>
<p class=MsoNormal>Type "show copying" to see the conditions.<o:p></o:p></p>
<p class=MsoNormal>There is absolutely no warranty for GDB. Type "show
warranty" for details.<o:p></o:p></p>
<p class=MsoNormal>This GDB was configured as
"i386-redhat-linux-gnu"...<o:p></o:p></p>
<p class=MsoNormal>(no debugging symbols found)<o:p></o:p></p>
<p class=MsoNormal>Using host libthread_db library
"/lib/libthread_db.so.1".<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>run<o:p></o:p></p>
<p class=MsoNormal>Starting program: /home/brg/dev/haskell/ffi/a.out <o:p></o:p></p>
<p class=MsoNormal>(no debugging symbols found)<o:p></o:p></p>
<p class=MsoNormal>(no debugging symbols found)<o:p></o:p></p>
<p class=MsoNormal>(no debugging symbols found)<o:p></o:p></p>
<p class=MsoNormal>[Thread debugging using libthread_db enabled]<o:p></o:p></p>
<p class=MsoNormal>[New Thread 7870144 (LWP 22448)]<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Program received signal SIGSEGV, Segmentation fault.<o:p></o:p></p>
<p class=MsoNormal>[Switching to Thread 7870144 (LWP 22448)]<o:p></o:p></p>
<p class=MsoNormal>0x0805c313 in allocateLocal ()<o:p></o:p></p>
<p class=MsoNormal>(gdb) where<o:p></o:p></p>
<p class=MsoNormal>#0 0x0805c313 in allocateLocal ()<o:p></o:p></p>
<p class=MsoNormal>#1 0x0000005c in ?? ()<o:p></o:p></p>
<p class=MsoNormal>#2 0x08075c97 in base_DataziTypeable_zdLr42klvl4_srt ()<o:p></o:p></p>
<p class=MsoNormal>#3 0x4ee1dca0 in _dl_argv_internal () from
/lib/ld-linux.so.2<o:p></o:p></p>
<p class=MsoNormal>#4 0x0807c920 in last_free_capability ()<o:p></o:p></p>
<p class=MsoNormal>#5 0x4ee1dca0 in _dl_argv_internal () from
/lib/ld-linux.so.2<o:p></o:p></p>
<p class=MsoNormal>#6 0x00000000 in ?? ()<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>I am using GHC 6.6.1 built from sources on RHE5.<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Many regards,<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Ben<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><b><span
style='color:navy'>Benedict R. Gaster</span></b><br>
<span style='font-size:8.0pt;font-family:"Arial","sans-serif";color:navy'>S/W
Architecture Team Lead<br>
ClearSpeed Technology Plc</span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:navy'><br>
</span><span style='font-size:8.0pt;font-family:"Arial","sans-serif";
color:navy'>3110 Great Western Court <br>
Hunts Ground Road</span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:navy'><br>
</span><span style='font-size:8.0pt;font-family:"Arial","sans-serif";
color:navy'>Stoke Gifford </span><span style='font-size:10.0pt;font-family:
"Arial","sans-serif";color:navy'><br>
</span><span style='font-size:8.0pt;font-family:"Arial","sans-serif";
color:navy'>Bristol </span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:navy'><br>
</span><span style='font-size:8.0pt;font-family:"Arial","sans-serif";
color:navy'>BS34 8HP<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:8.0pt;font-family:"Arial","sans-serif";
color:navy'><a href="blocked::mailto:karen@clearspeed.com"
title="blocked::mailto:karen@clearspeed.com mailto:lamont@clearspeed.com mailto:helena@clearspeed.com"><span
style='color:navy;text-decoration:none'>Phone:</span></a> + 44 117 3172016<br>
Fax: + 44 117 3172002</span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:navy'><br>
</span><span style='font-size:8.0pt;font-family:"Arial","sans-serif";
color:navy'><a href="mailto:brg@clearspeed.com"
title="blocked::mailto:karen@clearspeed.com mailto:lamont@clearspeed.com mailto:helena@clearspeed.com"><span
style='color:blue'>brg@clearspeed.com</span></a><br>
<a href="blocked::blocked::blocked::http://www.clearspeed.com"
title="blocked::blocked::blocked::http://www.clearspeed.com blocked::http://www.clearspeed.com http://www.clearspeed.com"><span
style='color:blue'>www.clearspeed.com</span></a></span><o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
</div>
</body>
</html>
<p class=MsoNormal>-- <o:p></o:p></p>
<p class=MsoNormal><strong><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:blue;font-weight:normal'>The contents of this email and any attachments
are confidential and may be legally privileged. If you have received this
email in error please notify the sender immediately and refrain from copying or
disclosing the contents of the email to any third party. ClearSpeed
accepts no liability for any viruses which may be transmitted by this email or
its attachments.</span></strong><span style='font-size:10.0pt'><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:blue'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:blue'>ClearSpeed Technology PLC is a company registered in England under
company number 05159262 whose registered office is at 3110 Great Western Court,
Hunts Ground Road, Bristol BS34 8HP, UK. <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:blue'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:blue'>ClearSpeed Technology INC is a wholly owned subsidiary of
ClearSpeed Technology PLC and is incorporated in the United States of
America, with its principle place of business at 3031 Tisch Way, Suite 200, San
Jose, CA 95128, US. <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:blue'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";
color:blue'>Additional Company information can be found at the following: <a
href="http://www.clearspeed.com/aboutus/company/index.html"
title="http://www.clearspeed.com/aboutus/company/index.html">http://www.clearspeed.com/aboutus/company/index.html</a>”<o:p></o:p></span></p>
<p class=MsoNormal><o:p> </o:p></p>