# New Ticket Created by  [EMAIL PROTECTED] 
# Please include the string:  [perl #24056]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=24056 >




-- attachment  2 ------------------------------------------------------
url: http://rt.perl.org/rt2/attach/65369/48765/49baad/parrot-debug.c.patch

-- attachment  3 ------------------------------------------------------
url: http://rt.perl.org/rt2/attach/65369/48766/1781d2/signature.asc

Hi,

I think these are just some more GCC issues (I'm using 3.2.2 out of
Debian/unstable) but the disassembler keeps crashing for me. I fixed
some issues that came out of uninitialized variables in debug.c, patch
appended, but still the disassembler crashes due to some issues in
smallobject.c in 
void *
get_free_object(struct Parrot_Interp *interpreter,
        struct Small_Object_Pool *pool)

...
    arena = pool->free_arena;
    ptr = arena->free_list;
    arena->free_list = *(void **)ptr;
    n = GET_OBJ_N(arena, ptr);

    arena->dod_flags[ n >> ARENA_FLAG_SHIFT ] &=
         ~((PObj_on_free_list_FLAG << (( n & ARENA_FLAG_MASK ) << 2)));

The last line seems to produce the segmentation fault by going over the
borders in the dod_flags array. Actually, the n value when printed out
counts down from 1023 to 0 two times and then wraps to 91739717.
I'll have a look into that,  but as I'm not the master of bitshifting
and quite a lot is done there I'm not sure if I can do that.

Anyway, patch for debug.c is there, rest will follow...

Have fun,

        Marcus


-- 
---------------------------------------------------------
|Marcus Thiesen                           ICQ# 108989768|
---------------------------------------------------------
|                   www.thiesenweb.de                   |
---------------------------------------------------------
  28A7 37CC AE2C BB6C D56D  8A3D E614 E56B 7546 75F2
--- debug.c.orig        2003-09-27 14:38:54.000000000 +0200
+++ debug.c     2003-09-27 14:41:57.000000000 +0200
@@ -1397,6 +1397,8 @@
 
     pfile->source = (char *)mem_sys_allocate(default_size);
     pfile->line = pline;
+    pfile->label = NULL;
+    pfile->size = 0;
     pline->number = 1;
 
     code_end = pc + interpreter->code->cur_cs->base.size;

Attachment: signature.asc
Description: signature.asc

Reply via email to