> After a day of running gdb in parallel on my MacOS X and Linux [quite
> annoying because of different keyboard layouts ;-) ], I've
> come to the following conclusion:
>
> The entry code for BCOs expects all parameters to be on the
> stack, but
> on non-x86 machines, the stg_ap_*_ret pass parameters to it in
> registers (as for function objects). This leads to frequent
> crashes in GHCi on PowerPC, but not on Intel.
Ach! Good point. I haven't tested the newest GHC on our Sparc yet,
which is why I hadn't noticed this.
> My first attempt at fixing this (by making stg_BCO_entry push the
> parameters onto the stack) is attached below, but I'm not
> committing it
> as I'm not sure it's the right way to do it. Are the stg_ap_*_ret
> functions the only places where a BCO is entered? It might be a nicer
> solution to modify GenApply to pass parameters to BCOs on the stack.
It's not quite right, because there might be other regs in use apart
from the vanilla regs. I think that stg_BCO_entry can only be entered
via the stg_ap_*_ret functions, but we shouldn't rely on this.
The annoying thing is that the code for PAPs is *almost* right (i.e. in
each stg_ap_*_ret, just move the apply_fun label to the PAP case
instead), but it ends up jumping to stg_PAP_entry instead of
stg_BCO_entry. So I've merged these two cases by storing the jump
target in a variable instead. Try the new version and let me know if it
fixes the problem.
Cheers,
Simon
_______________________________________________
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs