On Thu, 1 Sep 2005, Nattfodd wrote: > today is the deadline for the google summer of code projects, and it's time > anyway for a "release" of GMC. > GMC is a generational garbage collector for parrot that allows copying of > objects and thus copying GC schemes.
Thanks for submitting this. I also appreciated the extensive comments in the source (even if I didn't actually read most of them :-). > svn co https://svn.perl.org/parrot/branches/gmc First, I needed the following simple patch to MANIFEST --- gmc/MANIFEST Thu Sep 1 09:12:48 2005 +++ parrot-andy/MANIFEST Thu Sep 1 10:19:20 2005 @@ -1639,6 +1639,7 @@ src/exec_start.c [] src/exit.c [] src/extend.c [] +src/gc_gmc.c [] src/gc_gms.c [] src/gc_ims.c [] src/generic_register.c [] After that, with Sparc/Solaris 8, with Sun's CC, I got a core dump even on a simple ./miniparrot -h I rebuilt with debugging, and it again core dumped (although somewhere else). Here's the backtrace: (dbx) run -h Running: miniparrot -h (process id 21433) [EMAIL PROTECTED] ([EMAIL PROTECTED]) signal SEGV (no mapping at the fault address) in gc_gmc_copy_gen at line 879 in file "gc_gmc.c" 879 PMC_body(Gmc_PMC_hdr_get_PMC(ptr)) = Gmc_PMC_hdr_get_BODY(ptr); (dbx) where current thread: [EMAIL PROTECTED] =>[1] gc_gmc_copy_gen(from = 0x32dbe8, dest = 0x4d31f8), line 879 in "gc_gmc.c" [2] gc_gmc_more_bodies(interpreter = 0x2b6ce8, pool = 0x31d860), line 933 in "gc_gmc.c" [3] gc_gmc_new_body(interpreter = 0x2b6ce8, pool = 0x31d860, size = 40U, aggreg = 4), line 705 in "gc_gmc.c" [4] gc_gmc_get_free_object_of_size(interpreter = 0x2b6ce8, pool = 0x31d860, size = 40U, aggreg = 4), line 741 in "gc_gmc.c" [5] gc_gmc_get_free_typed_object(interpreter = 0x2b6ce8, pool = 0x31d860, base_type = 62), line 796 in "gc_gmc.c" [6] new_pmc_alloc_header(interpreter = 0x2b6ce8, flags = 132096U, is_typed = 1, base_type = 62), line 270 in "headers.c" [7] new_pmc_typed_header(interpreter = 0x2b6ce8, flags = 132096U, base_type = 62), line 343 in "headers.c" [8] get_new_pmc_header(interpreter = 0x2b6ce8, base_type = 62, flags = 132096U), line 231 in "pmc.c" [9] constant_pmc_new(interpreter = 0x2b6ce8, base_type = 62), line 310 in "pmc.c" [10] mmd_create_builtin_multi_meth_2(interpreter = 0x2b6ce8, func_nr = 5, type = 33, right = -100, func_ptr = 0x1edce0 = &Parrot_Complex_i_multiply_int()), line 2116 in "mmd.c" [11] mmd_create_builtin_multi_meth(interpreter = 0x2b6ce8, type = 33, entry = 0xffbef444), line 2139 in "mmd.c" [12] Parrot_mmd_register_table(interpreter = 0x2b6ce8, type = 33, mmd_table = 0xffbef2e4, n = 35), line 2182 in "mmd.c" [13] Parrot_Complex_class_init(interp = 0x2b6ce8, entry = 33, pass = 1), line 1390 in "complex.c" [14] Parrot_initialize_core_pmcs(interp = 0x2b6ce8), line 126 in "core_pmcs.c" [15] init_world(interpreter = 0x2b6ce8), line 85 in "global_setup.c" [16] Parrot_init(interpreter = 0x2b6ce8), line 84 in "embed.c" [17] make_interpreter(parent = (nil), flags = PARROT_NO_FLAGS), line 165 in "inter_create.c" [18] Parrot_new(parent = (nil)), line 47 in "embed.c" [19] main(argc = 2, argv = 0xffbefa8c), line 452 in "main.c" I #defined GMC_DEBUG and BIG_DUMP, and the last entries may be relevant: Copying gen (32e730,32f760) to gen (4d3d40,4d4d70) copy_gen: ptr 4c0904, old_body 32f554, new_body 4d4b64, struct_val: deadbeef copy_gen: ptr 47e078, old_body 32f57c, new_body 4d4b8c, struct_val: deadbeef copy_gen: ptr 46f7bc, old_body 32f5a4, new_body 4d4bb4, struct_val: deadbeef copy_gen: ptr 4683d8, old_body 32f5cc, new_body 4d4bdc, struct_val: deadbeef copy_gen: ptr 46845c, old_body 32f5f4, new_body 4d4c04, struct_val: deadbeef copy_gen: ptr 4684d4, old_body 32f61c, new_body 4d4c2c, struct_val: deadbeef copy_gen: ptr 3555a4, old_body 32f644, new_body 4d4c54, struct_val: deadbeef copy_gen: ptr 3555b0, old_body 32f66c, new_body 4d4c7c, struct_val: deadbeef copy_gen: ptr 355820, old_body 32f694, new_body 4d4ca4, struct_val: deadbeef Overall, I wonder if it's an alignment issue, since SPARC tends to be much more sensitve to that than x86. I haven't looked deeply at the code at all, but do you do anything special to ensure that the blocks of memory you are moving around maintain their aligment? -- Andy Dougherty [EMAIL PROTECTED]