<div dir="ltr">Hi all,<div>Yahoo, happy news —  I think I've got it. Studying enough of the non-handwritten ASM that I was stepping through led me to make this change:</div><div><a href="https://github.com/lukexi/ghc/commit/1140e11db07817fcfc12446c74cd5a2bcdf92781">https://github.com/lukexi/ghc/commit/1140e11db07817fcfc12446c74cd5a2bcdf92781</a><br>

</div><div>(I think disabling the floating point registers was just a red herring; I'll confirm that next)</div><div><br></div><div>And I can now call this fib code happily via the FFI:</div><div><div>fibs :: [Int] </div>

<div>fibs = 1:1:zipWith (+) fibs (tail fibs)</div><div><br></div><div>foreign export ccall fib :: Int -> Int</div><div>fib :: Int -> Int</div><div>fib = (fibs !!)</div></div><div><br></div><div>For posterity, more detail on the crashing case earlier (this is fixed now with proper storage and updating of the frame pointer):</div>

<div>Calling fib(1) or fib(2) worked, but calling fib(3) triggered the crash.</div><div>This was the backtrace, where you can see the errant 0x0000000100f05110 frame values.</div><div><div>(lldb) bt</div><div>* thread #1: tid = 0xac6ed, 0x0000000100f05110, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0x100f05110)</div>

<div>    frame #0: 0x0000000100f05110</div><div>    frame #1: 0x0000000100f05110</div><div>  * frame #2: 0x00000001000ffc9c HelloHaskell`-[SPJViewController viewDidLoad](self=0x0000000144e0cf10, _cmd=0x0000000186ae429a) + 76 at SPJViewController.m:22</div>

<div>    frame #3: 0x00000001862f8b70 UIKit`-[UIViewController loadViewIfRequired] + 692</div><div>    frame #4: 0x00000001862f8880 UIKit`-[UIViewController view] + 32</div><div>    frame #5: 0x00000001862feeb0 UIKit`-[UIWindow addRootViewControllerViewIfPossible] + 72</div>

<div>    frame #6: 0x00000001862fc6d4 UIKit`-[UIWindow _setHidden:forced:] + 296</div><div>    frame #7: 0x000000018636d2bc UIKit`-[UIWindow makeKeyAndVisible] + 56</div><div>    frame #8: 0x000000018657ff74 UIKit`-[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2804</div>

<div>    frame #9: 0x00000001865824ec UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 1480</div><div>    frame #10: 0x0000000186580b84 UIKit`-[UIApplication workspaceDidEndTransaction:] + 184</div>

<div>    frame #11: 0x0000000189d846ac FrontBoardServices`__31-[FBSSerialQueue performAsync:]_block_invoke + 28</div><div>    frame #12: 0x0000000181c7a360 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 20</div>

<div>    frame #13: 0x0000000181c79468 CoreFoundation`__CFRunLoopDoBlocks + 312</div><div>    frame #14: 0x0000000181c77a8c CoreFoundation`__CFRunLoopRun + 1756</div><div>    frame #15: 0x0000000181ba5664 CoreFoundation`CFRunLoopRunSpecific + 396</div>

<div>    frame #16: 0x0000000186363140 UIKit`-[UIApplication _run] + 552</div><div>    frame #17: 0x000000018635e164 UIKit`UIApplicationMain + 1488</div><div>    frame #18: 0x0000000100100268 HelloHaskell`main(argc=1, argv=0x000000016fd07a58) + 204 at main.m:24</div>

<div>    frame #19: 0x00000001921eea08 libdyld.dylib`start + 4</div></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 12, 2014 at 11:24 AM, Karel Gardas <span dir="ltr"><<a href="mailto:karel.gardas@centrum.cz" target="_blank">karel.gardas@centrum.cz</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On 08/12/14 11:03 AM, Luke Iannini wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
It looks like it's jumping somewhere strange; lldb tells me it's to<br>
0x100e05110: .long 0x00000000 ; unknown opcode<br>
0x100e05114: .long 0x00000000 ; unknown opcode<br>
0x100e05118: .long 0x00000000 ; unknown opcode<br>
0x100e0511c: .long 0x00000000 ; unknown opcode<br>
0x100e05120: .long 0x00000000 ; unknown opcode<br>
0x100e05124: .long 0x00000000 ; unknown opcode<br>
0x100e05128: .long 0x00000000 ; unknown opcode<br>
0x100e0512c: .long 0x00000000 ; unknown opcode<br>
<br>
If I put a breakpoint on StgRun and step by instruction, I seem to make<br>
it to about:<br>
<a href="https://github.com/lukexi/ghc/blob/e99b7a41e64f3ddb9bb420c0d5583f0e302e321e/rts/StgCRun.c#L770" target="_blank">https://github.com/lukexi/ghc/<u></u>blob/<u></u>e99b7a41e64f3ddb9bb420c0d5583f<u></u>0e302e321e/rts/StgCRun.c#L770</a><br>


(give or take a line)<br>
</blockquote>
<br></div>
strange that it's in the middle of the stp isns block. Anyway, this looks like a cpu exception doesn't it? You will need to find out the reg which holds the "exception reason" value and then look on it in your debugger to find out what's going wrong there.<span class="HOEnZb"><font color="#888888"><br>


<br>
Karel<br>
</font></span></blockquote></div><br></div>