Hi,
I can confirm the problem report for gcc. Analysis shows, that problem
"./Stackless/core/slp_transfer.c:153:1: error: bp cannot be used in asm here"
was introduced by the backport of change r83165 to release27-maint (r88294). See
below for the diff.
The problem is caused by configure.in:
-------8<------------8<-------------
# Stackless flags for compiling the hard switching code
case $MACHDEP in
darwin)
SLPFLAGS="-fomit-frame-pointer -O2"
;;
*)
SLPFLAGS="-fno-omit-frame-pointer -O2"
;;
esac
AC_SUBST(SLPFLAGS)
-------8<------------8<-------------
For Linux and all other non darwin systems, SLPFLAGS is "-fno-omit-frame-pointer
-O2" and therefore the code does not compile. (SLPFLAGS was introduced with
change r82398.)
How to fix this problem?
If I understand the commit comment correctly, there were crashes on OS-X. But
what about Linux? I'm not aware of problems on Linux amd64. Can we make the
longer REGS_TO_SAVE list a conditional define? Something like:
#ifdef SLP_SAVE_FRAME_POINTER
+#define REGS_TO_SAVE "rdx", "rbx", "r12", "r13", "r14", "r15", "r9", "r8",
"rdi", "rsi", "rcx", "rbp"
#else
+#define REGS_TO_SAVE "rdx", "rbx", "r12", "r13", "r14", "r15", "r9", "r8",
"rdi", "rsi", "rcx"
#endif
and define SLP_SAVE_FRAME_POINTER in configure.in together with
-fomit-frame-pointer.
Just for reference: the change, that introduced the problem:
$ svn log -c 83165
http://svn.python.org/projects/stackless/trunk/Stackless/platf/switch_amd64_unix.h
| less
------------------------------------------------------------------------
r83165 | jeff.senn | 2010-07-26 16:34:04 +0200 (Mon, 26 Jul 2010) | 3 lines
Added saved registers. Doesn't crash on tests anymore on OS-X 10.6 (gcc-4.2.1)
Not sure registers are minimal. Not sure will work on other platforms/compilers.
But since the consensus is that it has never worked, committing as incremental
progress.
------------------------------------------------------------------------
$ svn diff -c 83165
http://svn.python.org/projects/stackless/trunk/Stackless/platf/switch_amd64_unix.h
| less
Index: switch_amd64_unix.h
===================================================================
--- switch_amd64_unix.h (revision 83164)
+++ switch_amd64_unix.h (revision 83165)
@@ -29,8 +35,8 @@
/* the above works fine with gcc 2.96, but 2.95.3 wants this */
#define STACK_MAGIC 0
-#define REGS_TO_SAVE "rdx", "rbx", "r12", "r13", "r14", "r15"
+#define REGS_TO_SAVE "rdx", "rbx", "r12", "r13", "r14", "r15", "r9", "r8",
"rdi", "rsi", "rcx", "rbp"
static int
slp_switch(void)
Regards
Anselm
Am 07.05.2011 00:48, schrieb Richard Tew:
On Fri, May 6, 2011 at 11:27 PM, Estevo<[email protected]> wrote:
I got the following error trying to make release27-maint in a 64-bit
Presumably there's a change that on your system engages
-fno-omit-frame-pointer when to compile Stackless we need
-fomit-frame-pointer.
Anyone care to look into this? :-) We could use a patch.
Cheers,
Richard.
_______________________________________________
Stackless mailing list
[email protected]
http://www.stackless.com/mailman/listinfo/stackless
--
Dipl. Phys. Anselm Kruis science + computing ag
Senior Solution Architect Ingolstädter Str. 22
email [email protected] 80807 München, Germany
phone +49 89 356386 874 fax 737 www.science-computing.de
--
Vorstand/Board of Management:
Dr. Bernd Finkbeiner, Dr. Roland Niemeier,
Dr. Arno Steitz, Dr. Ingrid Zech
Vorsitzender des Aufsichtsrats/
Chairman of the Supervisory Board:
Philippe Miltin
Sitz/Registered Office: Tuebingen
Registergericht/Registration Court: Stuttgart
Registernummer/Commercial Register No.: HRB 382196
_______________________________________________
Stackless mailing list
[email protected]
http://www.stackless.com/mailman/listinfo/stackless