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

Reply via email to