[aarch64-port-dev ] RFR: 8209413: AArch64: NPE in clhsdb jstack command

Andrew Haley aph at redhat.com
Wed Feb 6 10:00:16 UTC 2019


On 2/5/19 5:57 PM, Andrew Haley wrote:
> On 2/5/19 5:55 PM, Nick Gasson (Arm Technology China) wrote:
>> The stack trace you sent below is incomplete, it's missing the frame for Spinner.run (i.e. the AARCH64Frame object corresponding to the native wrapper frame). Did you try on x86 or with the patch I posted? I'm not able to test at the moment but I think you will get one exra frame in the output. I don't know why you don't get the NPE, I guess it depends on what's in that stack slot.
> 
> Never mind, found it. A more complex test is needed.

Here's the test that reveals the problem: it seems that you need an entry frame
which calls compiled Java code.

[aph at merino ~]$ cat Spinner.c
#include <jni.h>
#include <stdio.h>

/*
 * Class:     Spinner
 * Method:    run
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Spinner_run(JNIEnv *env,  jclass cls) {
  jmethodID mid = (*env)->GetStaticMethodID(env, cls, "test", "()V");
  (*env)->CallStaticVoidMethod(env, cls, mid);
  // printf("Spinning...\n");
  // for(;;);
}


[aph at merino ~]$ cat Spinner.java
public class Spinner {
    static native void run();

    static {
        System.loadLibrary("Spinner");
    }

    static volatile int nn;

    public static void test() {
        System.out.println("Spinning");
        for(int i = 1; i !=0; i = (i + 1) | 1)
            nn = (int)Math.log(i);
    }

    public static void main(String[] args) {
        run();
    }
}

-- 
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 serviceability-dev mailing list