[Mono-dev] Patch: Stack alignment on x86
    Mark Probst 
    mark.probst at gmail.com
       
    Fri Oct 17 13:06:33 EDT 2008
    
    
  
Hi Zoltan,
>  Looks good. Why is this part needed:
>
> +                       if (cfg->method->wrapper_type ==
> MONO_WRAPPER_NATIVE_TO_MANAGED ||
> +                                       cfg->method->wrapper_type ==
> MONO_WRAPPER_RUNTIME_INVOKE) {
> +                               x86_pop_reg (code, X86_ESP);
> +                       }
>
> Those wrappers are never called from managed code.
They are entry points from unmanaged code to managed code, and since
we can't rely on stack alignment in unmanaged code we have to align
the stack in those entry points.  What I do in those two wrappers is
to put stack alignment instructions around each call.  This is the
part after the call which restores the stack pointer.  The part that
goes before the call is in mono_arch_emit_call().
Mark
    
    
More information about the Mono-devel-list
mailing list