On Sunday 08 July 2007 14:45:53 Bob Rogers wrote: > From: James E Keenan <[EMAIL PROTECTED]> > Date: Sun, 08 Jul 2007 15:18:21 -0400 > > On Debian 4.0 Linux, t/examples/shootout.t is failing even more tests > than yesterday. See attached. > > kid51 > > I get the same failures on SuSE 9.0 GNU/Linux, Parrot r19701. Here's an > interesting observation: > > [EMAIL PROTECTED]> ./parrot t/examples/shootout_13.pir > 3141592653 :10 > 5897932384 :20 > 6264338 :27 > [EMAIL PROTECTED]> ./parrot -C t/examples/shootout_13.pir > Segmentation fault > [EMAIL PROTECTED]> ./parrot -Cj t/examples/shootout_13.pir > Segmentation fault > [EMAIL PROTECTED]> ./parrot -Cg t/examples/shootout_13.pir > Segmentation fault > [EMAIL PROTECTED]> > > The backtraces all look similar, failing deep in glibc, which puts it > out of my depth.
Binary search (and about a week's worth of digging on my part) blames r19570. I think it's this part: Modified: trunk/include/parrot/pobj.h ============================================================================== --- trunk/include/parrot/pobj.h (original) +++ trunk/include/parrot/pobj.h Tue Jul 3 16:28:16 2007 @@ -141,6 +141,7 @@ struct PMC { pobj_t obj; VTABLE *vtable; + PMC *real_self; #if ! PMC_DATA_IN_EXT DPOINTER *data; #endif /* ! PMC_DATA_IN_EXT */ Something, somewhere, isn't happy about this struct changing size. I didn't notice anything in *specific* which looked wrong. I did note that PMC_EXT instances get allocated out of memory pools too, and within src/gc/smallobject.c's Parrot_add_to_free_list(), the line: PObj_flags_SETTO((PObj *)object, PObj_on_free_list_FLAG); ... casts them to PObj pointers, which is a problem becase dereferencing that memory is sort of... ugh: typedef struct PMC_EXT { #if PMC_DATA_IN_EXT DPOINTER *data; #endif /* PMC_DATA_IN_EXT */ PMC *_metadata; /* properties */ struct _Sync *_synchronize; PMC *_next_for_GC; } PMC_EXT; Note the lack of pobj_t in there. Gonna be hard to deference *that*. -- c