#5052: stdcall on OS X is broken
---------------------------------+------------------------------------------
    Reporter:  igloo             |        Owner:              
        Type:  bug               |       Status:  new         
    Priority:  normal            |    Milestone:              
   Component:  Compiler          |      Version:  7.0.2       
    Keywords:                    |     Testcase:              
   Blockedby:                    |   Difficulty:              
          Os:  Unknown/Multiple  |     Blocking:              
Architecture:  Unknown/Multiple  |      Failure:  None/Unknown
---------------------------------+------------------------------------------
 1288 is SIGBUSing on OS X 32. The symptom is that `task` in `resumeThread`
 is 3 (the argument we pass). Here's what I think's going on:

 On Linux re generate:
 {{{
 0x0804a746 <s1bE_info+30>:      call   0x80839a0 <suspendThread>
 0x0804a74b <s1bE_info+35>:      add    $0x4,%esp
 0x0804a74e <s1bE_info+38>:      mov    0x40(%esp),%ecx
 0x0804a752 <s1bE_info+42>:      push   %ecx
 0x0804a753 <s1bE_info+43>:      mov    %eax,0x50(%esp)
 0x0804a757 <s1bE_info+47>:      call   0x804a8d0 <test>
 0x0804a75c <s1bE_info+52>:      mov    0x4c(%esp),%eax
 0x0804a760 <s1bE_info+56>:      push   %eax
 0x0804a761 <s1bE_info+57>:      call   0x8083aa4 <resumeThread>
 }}}
 We save %eax to 0x50(%esp), do the call (during which %esp is increased by
 4), and then read %eax back from 0x4c(%esp).

 And on the Mac:
 {{{
 0x00002282 <s1bi_info+38>:      call   0x240cc4 <suspendThread>
 0x00002287 <s1bi_info+43>:      add    $0x10,%esp
 0x0000228a <s1bi_info+46>:      sub    $0xc,%esp
 0x0000228d <s1bi_info+49>:      mov    0x4c(%esp),%ecx
 0x00002291 <s1bi_info+53>:      push   %ecx
 0x00002292 <s1bi_info+54>:      mov    %eax,0x5c(%esp)
 0x00002296 <s1bi_info+58>:      call   0x242a <test>
 0x0000229b <s1bi_info+63>:      sub    $0xc,%esp
 0x0000229e <s1bi_info+66>:      mov    0x58(%esp),%eax
 0x000022a2 <s1bi_info+70>:      push   %eax
 0x000022a3 <s1bi_info+71>:      call   0x240db1 <resumeThread>
 }}}

 We try to do the same thing, but this instruction:
 {{{
 0x0000229b <s1bi_info+63>:      sub    $0xc,%esp
 }}}
 alters %esp in-between us saving and restoring %eax.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5052>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to