On Jan 24, 2008 6:05 PM, Gregory Shimansky <[EMAIL PROTECTED]> wrote:
> > Can you also take a look at my changes in gen_args? Are they correct too? > The changes in gen_args with 'args[0]' replaced with 'args[i]' are correct. Original code has a bug. > > Another problem here: in lazy resolution mode we need to 'vpark' all > > registers for CCONV_HELPERS calls too. > > Hmm... I am not yet experienced with JIT well enough to understand this. > I have seen vpark calls in many places but I don't know what it does > and why it is inserted. Could you please explain in a few words? BTW > vpark is done at the beginning of the gen_invoke for the CallSig of the > method. > vpark(AR) moves data from AR to memory. Doing this for CCONV_MANAGED we ensure that all registers that are required by calling convention to perform a managed call do not contain any information. But in lazy mode we perform not only managed method call, but also a helper call to resolve the address of the method. So, CCONV_HELPERS registers are also must be freed. The crash can be reproduced only when calling conventions of these methods use different sets of registers. -- Mikhail Fursov
