Dan Sugalski wrote:

First I want to thank you, for all the checkins.
(Please don't forget #17143, which makes predereferencing working)


> Do we have any idea why GC's getting in the way here? I presume we have  
> GC bug, so we ought to track it down if we can.


I can only bring some hints:

- test failures are not the same, when run through parrot or imcc

- imcc uses a global interpreter variable, whereas parrot's is on stack.

- parrot fails currently only one test: t/compiler/8_5

   turnning gc off and tracing both brings this diff:

  PC=462; OP=656 (save_p); ARGS=(P1)
  PC=464; OP=672 (restoreall)
  PC=465; OP=741 (ret)
-Wrong type on top of stack!

e.g. the last instruction of main fails, failure looks like stack 
corruption.

- imcc with GC turned off passes all tests
- imcc with GC on fails these:

Failed Test  Status Wstat Total Fail  Failed  List of failed
-------------------------------------------------------------------------------
t/compiler/1.te              12    1   8,33%  11
t/compiler/8.te               6    1  16,67%  5
t/compiler/qsor               1    1 100,00%  1
t/rx/call.test                2    2 100,00%  1-2
2 subtests skipped.

1_11:
=====
-1003.100000PC=859; OP=26 (print_sc); ARGS=("\n")
-
-PC=861; OP=636 (popp)
+1003.100000PC=859; OP=26 (print_sc); ARGS=("^C")
+^CPC=861; OP=636 (popp)

i.e. (1 byte) corruption in the constant table
-d shows 22 collect runs, 3 DOD

8_5:
====
same as parrot (stack) (# of DOD unavailable, it dies)

qsort_1
=======
prints garbage numbers, 3 DOD runs, 0 collect
probably stack corruption, qsort is recursive.

t/rc/call_1
===========
constant table corruption:
  PC=334; OP=93 (set_p_s); ARGS=(P0, S1="sdf")
-PC=337; OP=138 (set_p_kc_p); ARGS=(P2, ["thing"], P0)
+PC=337; OP=138 (set_p_kc_p); ARGS=(P2, ["`=^\0"], P0)
(2 DOD, 2 collect)

t/rc/call_2
===========
constant table corruption:
  PC=260; OP=93 (set_p_s); ARGS=(P0, S1="22")
-PC=263; OP=138 (set_p_kc_p); ARGS=(P5, ["two_of"], P0)
+PC=263; OP=138 (set_p_kc_p); ARGS=(P5, ["ì>^\0\0"], P0)
(10 DOD, 4 collect)

Some more:

==========

perl6 examples/life.p6 10
- 10 gens of life, ok with parrot

perl6 -r -Rd examples/life.p6 10
- 10 gens of life, with imcc, runs very (~13 sec) long:
*** Parrot VM: Dumping GC info ***
         Total memory allocated: 352256
         Total DOD runs:         1118
         Total collector runs:   19
         Active PMCs:            17
         Active buffers:         29
         Total PMCs:             256
         Total buffers:          88064
         Since last collection:
                 Header allocations: 0
                 Memory allocations: 0
and prints garbage.
Actually the amount of DOD runs is way to high

perl6 -r -RG examples/life.p6 10
GC off, with imcc, runs 3 seconds, result ok

$ time perl6 -vw  examples/mandel.p6
P6C 'examples/mandel.p6'
Parse error [line 28]: Invalid statement near "my @b = (" ", ...
(currently br0ken ;-)

So far, what I have.
What could I do, to help track GC bugs? down?

leo



Reply via email to