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

TraceClassLoading expects there to be a (Java) caller when you load a class with the bootstrap class loader

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 9
    • 9
    • hotspot
    • None
    • b03


        From: Jeremy Manson <jeremymanson@google.com>
        Subject: Crash with TraceClassLoading
        Date: 19 december 2013 21:01:02 CET
        To: "hotspot-runtime-dev@openjdk.java.net" <hotspot-runtime-dev@openjdk.java.net>

        Now that 9 is underway, presumably we can start feeding back fixes again.

        This one's a bit obscure. TraceClassLoading expects there to be a (Java) caller when you load a class with the bootstrap class loader. However, there are ways of loading a class that don't involve having a Java caller. For example, you can do so from a JVMTI hook. A reproduction is attached, and here's a patch:

        diff --git a/src/share/vm/classfile/classFileParser.cpp b/src/share/vm/classfile/classFileParser.cpp
        --- a/src/share/vm/classfile/classFileParser.cpp
        +++ b/src/share/vm/classfile/classFileParser.cpp
        @@ -4098,8 +4098,12 @@
                 tty->print("[Loaded %s from %s]\n", this_klass->external_name(),
                            cfs->source());
               } else if (class_loader.is_null()) {
        - if (THREAD->is_Java_thread()) {
        - Klass* caller = ((JavaThread*)THREAD)->security_get_caller_class(1);
        + Klass* caller =
        + THREAD->is_Java_thread()
        + ? ((JavaThread*)THREAD)->security_get_caller_class(1)
        + : NULL;
        + // caller can be NULL, for example, during a JVMTI VM_Init hook
        + if (caller != NULL) {
                   tty->print("[Loaded %s by instance of %s]\n",
                              this_klass->external_name(),
                              InstanceKlass::cast(caller)->external_name());

        Jeremy

              Unassigned Unassigned
              sla Staffan Larsen (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: