[aarch64-port-dev ] RFR: fix for crash caused by earlyret of compiled method

Sergey Nazarkin snazarkin at azul.com
Fri Jun 16 11:51:31 UTC 2017


Hi Andrew,

thank you, the patch works fine.  I’ve updated webrev  with correct patch for JDK8


Sergey Nazarkin




> On 15 Jun 2017, at 21:12, Andrew Haley <aph at redhat.com> wrote:
> 
> Hi,
> 
> This is the patch I'd like to go with.  It allocates the correct amount of
> stack space in every case, as far as I can see, and I've carefully stepped
> through your failing test case.
> 
> Can you please test it in your environment?  Thanks.
> 
> diff --git a/src/cpu/aarch64/vm/abstractInterpreter_aarch64.cpp b/src/cpu/aarch64/vm/abstractInterpreter_aarch64.cpp
> --- a/src/cpu/aarch64/vm/abstractInterpreter_aarch64.cpp
> +++ b/src/cpu/aarch64/vm/abstractInterpreter_aarch64.cpp
> @@ -109,9 +109,15 @@
>   // for the callee's params we only need to account for the extra
>   // locals.
>   int size = overhead +
> -         (callee_locals - callee_params)*Interpreter::stackElementWords +
> +         (callee_locals - callee_params) +
>          monitors * frame::interpreter_frame_monitor_size() +
> -         temps* Interpreter::stackElementWords + extra_args;
> +         // On the top frame, at all times SP <= ESP, and SP is
> +         // 16-aligned.  We ensure this by adjusting SP on method
> +         // entry and re-entry to allow room for the maximum size of
> +         // the expression stack.  When we call another method we bump
> +         // SP so that no stack space is wasted.  So, only on the top
> +         // frame do we need to allow max_stack words.
> +         (is_top_frame ? max_stack : temps + extra_args);
> 
>   // On AArch64 we always keep the stack pointer 16-aligned, so we
>   // must round up here.
> 
> -- 
> Andrew Haley
> Java Platform Lead Engineer
> Red Hat UK Ltd. <https://www.redhat.com>
> EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671



More information about the aarch64-port-dev mailing list