Of course, things work fine using 64 bit ABIs, /.../
Which is because we still don't have any machine code support for x86_64. As a workaround you can always disable it for i386 as well: ./configure --without-machine-code
Otherwise it looks like the following commit could be the answer to your trouble (ugly though it is, I have to say). It's present in 7.8.368.
commit 3925525 Author: Per Hedbor ph@opera.com Date: Fri Nov 13 14:47:21 2009 +0100
This avoids 100% crach rate on my 64bit workstation with a 32-bit userlevel runtime
Rev: src/code/ia32.c:1.51
diff --git a/src/code/ia32.c b/src/code/ia32.c index ca552f1..ea0c2c9 100644 --- a/src/code/ia32.c +++ b/src/code/ia32.c @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: ia32.c,v 1.50 2008/11/19 21:37:34 mast Exp $ +|| $Id: ia32.c,v 1.51 2009/11/13 13:47:21 per Exp $ */
/* @@ -1040,7 +1040,7 @@ void ia32_flush_instruction_cache(void *start, size_t len) clflush [eax]; } #else /* USE_GCC_IA32_ASM_STYLE */ -#ifdef HAVE_ASM_CLFLUSH +#if 1 __asm__ __volatile__("clflush %0" :: "m" (*addr)); #else /* clflush (%eax) */