RedHat 9 _random failure under -pg (was Re: [Python-Dev] Startup time)
Jeff Epler
jepler@unpythonic.net
Tue, 6 May 2003 13:57:50 -0500
On Tue, May 06, 2003 at 01:36:00PM -0500, Jeff Epler wrote:
> (gdb) run -c "import random"
> Starting program: /usr/src/Python-2.3b1/python -c "import random"
> [New Thread 1074963072 (LWP 28408)]
>
> Program received signal SIGILL, Illegal instruction.
> [Switching to Thread 1074963072 (LWP 28408)]
> 0x08109aa0 in subtype_getsets_full ()
> (gdb) where
> #0 0x08109aa0 in subtype_getsets_full ()
> #1 0x4001c743 in random_new (type=0x4001c738, args=0x4012c02c, kwds=0x0)
> at /usr/src/Python-2.3b1/Modules/_randommodule.c:439
> (gdb) ptype subtype_getsets_full
> type = struct PyGetSetDef {
> [...]
gcc is generating plainly bogus code for this simple function
random_new:
00001738 <random_new>:
1738: 55 push %ebp
1739: 89 e5 mov %esp,%ebp
173b: 56 push %esi
173c: 53 push %ebx
173d: ff 93 7c 00 00 00 call *0x7c(%ebx)
(for those of you who don't read x86 assembly, the first 4 functions
are part of a standard function prologue. The fifth instruction is
a call through a function pointer, but the register's value at this
point is undefined. This is not the call to type->tp_alloc(), correct
code for that is just below)
Well, this may have been false alarm -- when I removed -pg from OPT in
the Makefile, './python -c "import random"' works. So this is a problem
only when profiling is enabled. Is this intended to work?
In any case, the fact that the disassembly is so plainly bogus tends to
imply that this is a gcc bug, not anything that Python can fix.
Jeff