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

JVMTI spec: spec clarifications and missing error returns -- September

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 5.0
    • 5.0
    • hotspot
    • b31
    • generic
    • generic

      In the VMDeath event, add:
          No events will occur after the VMDeath event.

      For structs returned by functions, array and string fields should have
      the following text restored:
          On return, the xyz* points to a newly allocated array.
          The array should be freed with Deallocate.
      These include:
          jvmtiThreadInfo: name
          jvmtiThreadGroupInfo: name
          jvmtiLocalVariableEntry: name, signature, and generic_signature
          jvmtiExtensionFunctionInfo: id, short_description, params and errors.
          jvmtiExtensionEventInfo: id, short_description, and params.

      In GetCurrentThreadCpuTimerInfo and GetThreadCpuTimerInfo, add:
          Note that the implementations of GetCurrentThreadCpuTime
          and GetThreadCpuTime may differ, and thus the values
          returned by GetCurrentThreadCpuTimerInfo and GetThreadCpuTimerInfo
          may differ -- see GetCurrentThreadCpuTime for more information.

      In GetThreadCpuTimerInfo, change:
          This information will not change during a particular invocation of the VM.
      to:
          This information is specific to the platform and the implementation of
          GetThreadCpuTime and thus does not vary by thread nor does it vary
          during a particular invocation of the VM.

      In GetCurrentThreadCpuTimerInfo, change:
          This information will not change during a particular invocation of the VM.
      to:
          This information is specific to the platform and the implementation of
          GetCurrentThreadCpuTime and thus does not vary by thread nor does it vary
          during a particular invocation of the VM.

      In IterateOverReachableObjects and IterateOverObjectsReachableFromObject, add:
          The callback for an object will always follow the callback for its referrer.

      Capabilities section:
          Remove the example that still uses EstimateCostOfCapabilities (which has
          been removed).

      In GetTime, replace:
          Return the time since some arbitrary start time in the past.
      with text corresponding to Java programming language level access:
          Return the current value of the system timer, in nanoseconds. <p>
          This function can only be used to measure elapsed time and is
          not related to any notion of system, or wall-clock time. The
          value returned represents nanoseconds since some fixed but
          arbitrary time (perhaps in the future, so values may be
          negative). This function provides nanosecond precision, but not
          necessarily nanosecond accuracy. No guarantees are made about
          how frequently values change.

      In the following functions -- **
          CreateRawMonitor()
          DestroyRawMonitor()
          RawMonitorEnter()
          RawMonitorExit()
          RawMonitorWait()
          RawMonitorNotify()
          RawMonitorNotifyAll()
          Allocate()
          Deallocate()
          SetEnvironmentLocalStorage()
          GetEnvironmentLocalStorage()
      Add the text:
          This function may be called from the callbacks to the
          Heap iteration functions, or from the event handles for the
          GarbageCollectionStart, GarbageCollectionFinish and ObjectFree events.
      And in those callbacks, replace:
          This callback should not use JNI functions or JVMTI functions
          (except the raw monitor functions, Allocate or Deallocate).
      with:
          This callback must not use JNI functions.
          This callback must not use JVMTI functions except those which
          specifically allow such use (see the raw monitor, memory management,
          and environment local storage functions).

      In the "JVMTI Environments" section of the intro, change:
          While the JVMTI state is separate, agents inspect and modify the shared state
          of the VM, they also share the native environment in which they execute.
          As such, an agent can perturb the results of other agents or cause them
          to fail. Techniques to reduce the likely of these occurrences are beyond
          the scope of this document.
      to:
          While the JVMTI state is separate, agents inspect and modify the shared state
          of the VM, they also share the native environment in which they execute.
          As such, an agent can perturb the results of other agents or cause them
          to fail. It is the responsibility of the agent writer to specify the level
          of compatibility with other agents. JVMTI implementations are not capable
          of preventing destructive interactions between agents. Techniques to reduce
          the likelyhood of these occurrences are beyond the scope of this document.

      In IterateOverObjectsReachableFromObject, replace:
          This function iterates over all objects that are reachable from the specified object.
      with:
          This function iterates over all objects that are directly
          and indirectly reachable from the specified object.

      In IterateOverReachableObjects, replace:
          This function iterates over all objects that are reachable from the root objects.
      with:
          This function iterates over the root object and all objects that are directly
          and indirectly reachable from the root objects.

      In IterateOverReachableObjects, after:
          For each object reference the object_ref_callback callback function is
          called to describe the object reference.
      add:
          The callback is called exactly once for each pair of object and referrer;
          this is true even if there are reference cycles or multiple paths to the referrer.

      Change JVMTI_ERROR_NULL_POINTER description from:
          Invalid pointer.
      to:
          Pointer is unexpectedly NULL.

      In AddToBootstrapClassLoaderSearch, add missing error return:
          JVMTI_ERROR_ILLEGAL_ARGUMENT -- segment is an invalid path

      In DynamicCodeGenerated event, name parameter, add:
         The name might not be unique.

      In GenerateEvents, add missing error return:
          JVMTI_ERROR_ILLEGAL_ARGUMENT -- event type other than
                                            JVMTI_EVENT_COMPILED_METHOD_LOAD or
                                            JVMTI_EVENT_DYNAMIC_CODE_GENERATED specified.

      In the ClassFileLoadHook event, name parameter, replace:
           Fully qualified name of class being loaded in UTF-8 format.
      with:
           Name of class being loaded as a VM internal qualified name (e.g. "java/util/List")
           in UTF-8 format.

      In GetPhase, update the phase lists -- remove references to removed functionality:
      EstimateCostOfCapabilities and VerboseOutput.

            rfield Robert Field (Inactive)
            rfield Robert Field (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: