Leopold Toetsch <[EMAIL PROTECTED]> wrote:
> t/pmc/io_2 is failing on some tinderboxen that don't have memalign and
> therefore don't have ARENA_DOD_FLAGS set. Besides the wrong count of DOD
> runs, the primary problem is:

> The ParrotIO object is found to be alive in some system areas (probably
> processor registers). Due to the conservative approach of the DOD
> strategy this always might happen.

> I think, we have a problem.

I have a (partial?) solution for this. What AFAIK is going on is
something like this:

  C-stack: Parrot_open()   ... later ... do_dod_run()
           ...                           ...
           $1 = pmc_new                  sub $0x44, %esp
           ...
           IO-PMC ----------------------->
                                         ...
                                         trace_system_stack()

So during a DOD run the trails of an IO PMC are found on the system
stack during trace_mem_block. The main problem seems to be, that gcc
uses 16-byte aligned stack frames by default. So there are "holes" in
the stack, where it is not unlikely, that we find trails of PMCs used
in earlier functions calls.

I did compile parrot with:

  -mpreferred-stack-boundary=2

and the t/pmc/io_2.pasm test succeeds with all run loops then.

As we don't pass around mmx/sse memory locations above option should be
safe.

For i386 JIT/CGP we need another options for gcc 3.x (with some x)
(s. "[perl #22353] JIT!")

  -mno-accumulate-outgoing-args

But I don't know, in which config file these should go.

leo

Reply via email to