On May 12, 2010, at 9:13 AM, Jesus Cea wrote:
Short history: new GCC 4.5.0 (released a month ago), when compiling
with
- -O3, is adding MMX/SSE instructions that requires stack aligned to
16
byte. This is wrong, since x86 ABI only requires stack aligned to 4
bytes.
If you compile EVERYTHING with GCC 4.5.0, you are safe (I guess!), but
if your environment has mixed compiled code (for instance, the OS
libraries), you can possibly "core dump". If you have an old compiled
Python and you update libs compiled with GCC 4.5.0, you can crash in
the
process.
Psyco is showing the issue, but it is not the culprit. It only leaves
- -correctly- the stack in not 16-byte alignment. But there are
plenty of
examples of crashes not related to python+psyco.
Proposal: add "-fno-tree-vectorize" to compilation options for
2.7/3.2.
Warm 2.3/2.4/2.5/2.6/3.0/3.1 users. Or warm users compiling with GCC
4.5.0.
While assuming the stack is 16byte aligned is undeniably an ABI-
violation in GCC, at this point, it's surely simpler to just go along:
the new unofficial ABI for x86 is that the stack must always be left
in 16-byte alignment...
So, just change psyco to always use 16-byte-aligned stackframes. GCC
has used 16byte-aligned stackframes for a heck of a long time now (so
if the stack starts 16byte aligned on entry to a function it will stay
that way on calls). So usually the only way people run into unaligned
stacks is via hand-written assembly code or JIT compilers.
I think you'll be a lot happier just modifying Psyco than making
everyone else in the world change their compiler flags.
James
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com