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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4