<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>&nbsp;</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>&nbsp;</o:p></p>

<p class=MsoNormal>Here is the code:<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;</o:p></p>

<p class=MsoNormal>foreign export ccall foo :: Int -&gt; IO Int<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>foo :: Int -&gt; 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>&nbsp;</o:p></p>

<p class=MsoNormal>f :: Int -&gt; [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>&nbsp;</o:p></p>

<p class=MsoNormal>/*- C module start foo.c*/<o:p></o:p></p>

<p class=MsoNormal>#include &lt;stdio.h&gt;<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>#include &quot;Foo_stub.h&quot;<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp; int x = foo(100);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp; //printf(&quot;x = %d\n&quot;, x);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp; 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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</o:p></p>

<p class=MsoNormal>Segmentation fault<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Quickly putting this through GDB I get:<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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 &quot;show copying&quot; to see the conditions.<o:p></o:p></p>

<p class=MsoNormal>There is absolutely no warranty for GDB.&nbsp; Type &quot;show
warranty&quot; for details.<o:p></o:p></p>

<p class=MsoNormal>This GDB was configured as
&quot;i386-redhat-linux-gnu&quot;...<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
&quot;/lib/libthread_db.so.1&quot;.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;</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&nbsp; 0x0805c313 in allocateLocal ()<o:p></o:p></p>

<p class=MsoNormal>#1&nbsp; 0x0000005c in ?? ()<o:p></o:p></p>

<p class=MsoNormal>#2&nbsp; 0x08075c97 in base_DataziTypeable_zdLr42klvl4_srt ()<o:p></o:p></p>

<p class=MsoNormal>#3&nbsp; 0x4ee1dca0 in _dl_argv_internal () from
/lib/ld-linux.so.2<o:p></o:p></p>

<p class=MsoNormal>#4&nbsp; 0x0807c920 in last_free_capability ()<o:p></o:p></p>

<p class=MsoNormal>#5&nbsp; 0x4ee1dca0 in _dl_argv_internal () from
/lib/ld-linux.so.2<o:p></o:p></p>

<p class=MsoNormal>#6&nbsp; 0x00000000 in ?? ()<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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>&nbsp;</o:p></p>

<p class=MsoNormal>Many regards,<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Ben<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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&#10;mailto:lamont@clearspeed.com&#10;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&#10;mailto:lamont@clearspeed.com&#10;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&#10;blocked::http://www.clearspeed.com&#10;http://www.clearspeed.com"><span
style='color:blue'>www.clearspeed.com</span></a></span><o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</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.&nbsp; 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.&nbsp; 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>&nbsp;</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'>&nbsp;&nbsp;<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&nbsp;incorporated&nbsp;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>&nbsp;</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>&#8221;<o:p></o:p></span></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>