[aarch64-port-dev ] SIGSEGV in aarch64 OpenJDK8u

Ningsheng Jian ningsheng.jian at linaro.org
Mon Mar 27 03:05:24 UTC 2017


Aha, yes! It does fix the issue I met! Thanks a lot, Andrew!

I was not able to find the misuse of registers around the crash code.

Checking jdk9 source, this kind of misuse also exists on those
string_indexof supports.

Regards,
Ningsheng

On 24 March 2017 at 22:41, Andrew Haley <aph at redhat.com> wrote:
> Thanks for the test case.
>
> That was, as Sherlock Holmes tended to say, quite a three-pipe problem.
> Please try this patch and let me know.
>
> Andrew.
>
>
>
> diff --git a/src/cpu/aarch64/vm/aarch64.ad b/src/cpu/aarch64/vm/aarch64.ad
> --- a/src/cpu/aarch64/vm/aarch64.ad
> +++ b/src/cpu/aarch64/vm/aarch64.ad
> @@ -15152,7 +15192,7 @@
>  %}
>
>  instruct string_indexof(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
> -       iRegI_R0 result, iRegI tmp1, iRegI tmp2, iRegI tmp3, iRegI tmp4, rFlagsReg cr)
> +       iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2, iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
>  %{
>    match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
>    effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
> @@ -15170,8 +15210,8 @@
>  %}
>
>  instruct string_indexof_con(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
> -                 immI_le_4 int_cnt2, iRegI_R0 result, iRegI tmp1, iRegI tmp2,
> -                 iRegI tmp3, iRegI tmp4, rFlagsReg cr)
> +                 immI_le_4 int_cnt2, iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2,
> +                 iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
>  %{
>    match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
>    effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,


More information about the aarch64-port-dev mailing list