On Tue, Feb 8, 2011 at 5:10 AM, Luca Dionisi <span dir="ltr"><<a href="mailto:luca.dionisi@gmail.com">luca.dionisi@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I am trying, without success at the moment, to cross compile stackless<br>
(version 2.6.2) from a x86 host (linux) to a mips architecture.<br>
I gathered some info on various sites:<br>
<a href="http://www.cloudinto.com:8080/showItem/showDetail/7962913.html" target="_blank">http://www.cloudinto.com:8080/showItem/showDetail/7962913.html</a><br>
<a href="http://randomsplat.com/id5-cross-compiling-python-for-embedded-linux.html" target="_blank">http://randomsplat.com/id5-cross-compiling-python-for-embedded-linux.html</a><br>
<a href="http://www.ailis.de/~k/archives/19-ARM-cross-compiling-howto.html#python" target="_blank">http://www.ailis.de/~k/archives/19-ARM-cross-compiling-howto.html#python</a><br>
<br>
I am using a OpenWRT buildroot as cross-compiler tools.<br>
What I get is a MIPS executable (and libs) that runs on my router (a<br>
Omnima ADM5120) but when I execute stackless.run() with some tasklet<br>
then it immediately does a segmentation fault.<br>
What could possibly have gone wrong?<br><br></blockquote><div><br></div><div>Hi Luca,</div><div><br></div><div>I could only speculate about what went wrong.  Most likely it has to do with the custom assembler used on each platform to do the stack switching.  Perhaps it compiled in the wrong one (like the x86 assembler routine rather than the ARM one), although I expect that to be unlikely.  More likely might be that the custom assembler is not compatible with your compiler or target environment.</div>
<div><br></div><div>Keep in mind that when assembler is used to context switch, the state of registers which need to be preserved are saved before the switch is made and that state is restored when whatever is being switched from is switched back to.  If I were you, what I would do is to work out what routine is being used when you cross-compile and what registers need to be saved.  You can do this in a variety of ways, from reading source code of other switching systems (like thread switching) to debugging the code on the target host and seeing what bad register value it actually chokes on.</div>
<div><br></div><div>I have successfully cross-compiled Stackless for ARM before, although I had to write my own switching routine.  But it was not with OpenWRT.</div><div><br></div><div>Cheers,</div><div>Richard.</div></div>