|
Hi David,
Thank you a lot for review!
There are some replies below.
On 5/8/19 18:42, David Holmes wrote:
Hi
Serguei,
On 9/05/2019 8:57 am, [email protected] wrote:
Please, review a fix for the task:
https://bugs.openjdk.java.net/browse/JDK-8219023
Webrev:
http://cr.openjdk.java.net/~sspitsyn/webrevs/2019/8219023-svc-version.1/
Summary:
By design as we have never bumped the JVMTI version unless
there were spec changes for that release. Now we want to sync
the JVMTI version with the JDK version regardless of whether
or not spec changes have occurred in that release.
Also, we want it automatically set by the build system so that
no manual updates are needed for each release.
The jvmti.h and jvmti.html (JVMTI spec) are generated from
the jvmti.xsl with the XSLT scripts now. So, the fix removes
hard coded major, minor and micro versions from the jvmti.xml
and passes major and minor parameters with the -PARAMETER
to the XSL transformation.
Another part of the fix is in the JDI which starts using JDK
versions now instead of maintaining its own, and in the JDWP
agent which is using the JVMTI versions instead of its own.
This all seems reasonable (though I'm no expert on working with
XSL etc).
One thing I am unclear of is why you bother with using
VERSION_INTERIM when the actual version check will only consider
VERSION_FEATURE (aka major). Couldn't you just leave the "minor"
part 0 the same as the "micro" part?
This is right question to ask.
I was two-folded on this.
But finally decided to maintain minor version (aka VERSION_INTERIM).
Then the JVMTI and debugger version will match the VM and JDK
version for update releases.
If understand it correctly, we are still going to have major.minor
versions.
Also, the JVMTI GetVersionNumberspec still tells about both minor
and micro versions.
It also defines special constants for corresponding masks and
shifts:
| Constant |
Value |
Description |
JVMTI_VERSION_MASK_INTERFACE_TYPE |
0x70000000 |
Mask to extract interface type. The value of the
version returned by this function masked with JVMTI_VERSION_MASK_INTERFACE_TYPE
is always JVMTI_VERSION_INTERFACE_JVMTI
since this is a JVM TI
function. |
JVMTI_VERSION_MASK_MAJOR |
0x0FFF0000 |
Mask to extract major version number. |
JVMTI_VERSION_MASK_MINOR |
0x0000FF00 |
Mask to extract minor version number. |
JVMTI_VERSION_MASK_MICRO |
0x000000FF |
Mask to extract micro version number. |
| Constant |
Value |
Description |
JVMTI_VERSION_SHIFT_MAJOR |
16 |
Shift to extract major version number. |
JVMTI_VERSION_SHIFT_MINOR |
8 |
Shift to extract minor version number. |
JVMTI_VERSION_SHIFT_MICRO |
0 |
Shift to extract micro version number. |
This is link to the spec:
https://docs.oracle.com/en/java/javase/11/docs/specs/jvmti.html#GetVersionNumber
It seems, changing (and/or deprecating) this will give more problems
than benefits.
It is better to remain compatible with previous releases.
For the
record I considered whether this needs a CSR request and concluded
it did not as it doesn't involve changing any actual
specifications.
Okay, thanks.
I considered it too, made the same conclusion but still have some
doubt. :)
Thanks!
Serguei
Thanks,
David
Testing:
Generated docs and jvmti.h and checked the versions are
correct.
One could ask if we have to use same or similar approach for
other API's and tools, like JNI, JMX and so on.
But these are not areas of my expertise or responsibility.
It just feels like there is some room for unification here.
Thanks,
Serguei
|