On Thu, Feb 02, 2006 at 01:32:49PM -0800, jerry gay wrote:
> > This may or may not be related, but I'm getting a segfault for
> > building PGE itself (x86_64/linux), when trying to run mklib.pir
> > to generate the built-in rules.
> >
> i'm getting this, too, on win32. as are others, i think, on many platforms.
> 
> > This is one of the first times I've tried any of this under
> > 64-bit linux, so it might be totally unrelated.  At any rate,
> >
>   cd compilers/pge && ../../parrot -t mklib.pir >PGE/Library.pir
> 
> near the end of it's output, reports:
> 
>   3229 callmethodcc P0, "genfixedstr"   - 
> P0=Object(PGE::Exp::Literal)=PMC(0x417
> 020),
>   1973 get_params PMC_C[266] (7), P2, P0, S3, S2, S5, S4, S0    - , 
> P2=PMCNULL,
> P0=PMCNULL, , , , ,
>   1982 set_args PMC_C[24] (1), P2       - , 
> P2=Object(PGE::Exp::Literal)=PMC(0x4
> 17020)
>   1985 get_results PMC_C[236] (5), I3, I0, I4, I1, S-1          - , I3=0, 
> I0=2,
> I4=1, I1=0, S-1="(null)"
>   1992 callmethodcc P2, "quant"         - 
> P2=Object(PGE::Exp::Literal)=PMC(0x417
> 020),
>   1898 get_params PMC_C[24] (1), P0     - , P0=PMCNULL
> [snip]
> 
> what the heck is register "S-1" in the get_results op??
> when parrot got infinite registers, i don't think that meant they
> could be negative, too :)

*Very* interesting -- I got the same problem.  The call
that generates the above is

    (min, max, islazy, iscut, $S0) = self."quant"()

where the $S0 is a dummy register that isn't used anywhere
else in the subroutine.  If I convert this to a real
register, as in

    (min, max, islazy, iscut, S8) = self."quant"()

then the segfault goes away.  (Through judicious print
statements I was also able to narrow the problem
down to this specific call.)

I see the "-1" registers appear elsewhere in the output,
for example, the following call has $I2 and $I3
which aren't used in the rest of the subroutine:

    ($I0, $I1, $I2, $I3, $S0) = self."quant"()

It produces:

  3165 set_args PMC_C[24] (1), P0       - , 
P0=Object(PGE::Exp::Literal)=PMC(0x906d10)
  3168 get_results PMC_C[236] (5), I1, I0, I-1, I-1, S0         - , I1=0, I0=0, 
I-1=17, I-1=17,
  3175 callmethodcc P0, "quant"         - 
P0=Object(PGE::Exp::Literal)=PMC(0x906d10),

If I need to be doing something else for parameter placeholders,
let me know.  I haven't tried the absolute register version 
(that doesn't segfault for me) on Allison's code yet, I'll work 
on that next.

Pm

Reply via email to