# 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;
signature.asc
Description: signature.asc
