Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8260502

[s390] NativeMovRegMem::verify() fails because it's too strict

    XMLWordPrintable

Details

    • b08
    • s390x

    Backports

      Description

        We observed "fatal error: this is not a `NativeMovRegMem' site" in a test which runs without CompressedOops with debug build.
        Reason is that NativeMovRegMem::verify() is too strict. With disabled CompressedOops, it checks instructions beyond the 12 Bytes for the patchable load_const. C1 patching stubs place the patching record there so there are no valid instructions. (Note that this was different before JDK-8233081.)
        Code is fine, verification is wrong. NativeMovRegMem is only used for access_field_patching on s390. The affected code is the patching template which never gets executed.

        Stack snippet:
        V [libjvm.so+0xf21ca0] NativeMovRegMem::verify()+0x160
        V [libjvm.so+0x51a27a] Runtime1::patch_code(JavaThread*, Runtime1::StubID)+0x22ba
        V [libjvm.so+0x51ada8] Runtime1::access_field_patching(JavaThread*)+0x48
        v ~RuntimeStub::access_field_patching Runtime1 stub
        J 691 c1 java.lang.String.<init>([BIILjava/nio/charset/Charset;)V

        Attachments

          Issue Links

            Activity

              People

                mdoerr Martin Doerr
                mdoerr Martin Doerr
                Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved: