
Clarification On Sat, 2006-03-11 at 22:58 +0100, Michał Pałka wrote:
Hackers,
I've managed to find more details concerning GC failure on AMD64. The heap node that causes GC to crash is allocated on modules loading: #0 cinfo_alloc (size=2, name=0x58a3e0 ":", number=1, flags=0, obj=0x58a360) at info.c:24 #1 0x0000000000403b0f in mod_loadCon (mod=0x52ccf0, name=0x58a3e0 ":", obj=0x58a360) at module.c:463 #2 0x0000000000403ccd in mod_loadObject (mod=0x52ccf0, offs=36277, obj=0x58a360) at module.c:516 #3 0x0000000000402a13 in mod_resolve (module=0x58a380 "Prelude", item=0x58a3a0 ":") at module.c:209 #4 0x0000000000402f0d in mod_loadConstTable (mod=0x588ea0, finfo=0x58a218) at module.c:322 #5 0x0000000000403a4b in mod_loadFun (mod=0x588ea0, name=0x58a1e0 "valid", obj=0x58a160) at module.c:439 #6 0x0000000000403cb4 in mod_loadObject (mod=0x588ea0, offs=1475, obj=0x58a160) at module.c:514 #7 0x0000000000402a13 in mod_resolve (module=0x58a180 "Main", item=0x58a1a0 "valid") at module.c:209 #8 0x0000000000402f0d in mod_loadConstTable (mod=0x588ea0, finfo=0x58a0f0) at module.c:322 #9 0x0000000000403a4b in mod_loadFun (mod=0x588ea0, name=0x58a0c0 "queens", obj=0x58a040) at module.c:439 #10 0x0000000000403cb4 in mod_loadObject (mod=0x588ea0, offs=1580, obj=0x58a040) at module.c:514 #11 0x0000000000402a13 in mod_resolve (module=0x58a060 "Main", item=0x58a080 "queens") at module.c:209 #12 0x0000000000402f0d in mod_loadConstTable (mod=0x588ea0, finfo=0x589fa8) at module.c:322 #13 0x0000000000403a4b in mod_loadFun (mod=0x588ea0, name=0x589f80 "main", obj=0x589f40) at module.c:439 #14 0x0000000000403cb4 in mod_loadObject (mod=0x588ea0, offs=1606, obj=0x589f40) at module.c:514 #15 0x0000000000402a13 in mod_resolve (module=0x7fffffea0b88 "Main", item=0x41f3f1 "main") at module.c:209 #16 0x00000000004046ee in initGlobals (mainMod=0x7fffffea0b88 "Main", mainFunc=0x7fffffea0248, _toplevel=0x7fffffea0250, _driver=0x7fffffea0240) at main.c:120 #17 0x0000000000404880 in init (mainMod=0x7fffffea0b88 "Main", mainFunc=0x7fffffea0248, _toplevel=0x7fffffea0250, _driver=0x7fffffea0240) at main.c:145 #18 0x00000000004048de in main (argc=4, argv=0x7fffffea0348) at main.c:171
The node represents the (:) constructor which takes 2 arguments (size = 2), but the space allocated is only 1 word (no args[]). Why? Next node which occupies the next word is treated as pointer to args by the GC which leads to crash. Of course it's not treated as pointer to args, but rather as the first argument, which is also wrong.
Thanks, Michal
--------------------------------------------------------------------- Toshiba i FIFA World Cup Wygraj bilety i notebooki z Intel Centrino Duo Mobile Technology http://link.interia.pl/f1912
_______________________________________________ Yhc mailing list Yhc@haskell.org http://haskell.org/mailman/listinfo/yhc
--------------------------------------------------------------------- Toshiba i FIFA World Cup Wygraj bilety i notebooki z Intel Centrino Duo Mobile Technology http://link.interia.pl/f1912