On 03/12/2015 11:31, Michael Rasmussen wrote:
:
Well, you've always had to be very careful loading classes before VMInit,
you had to be really careful not to use things that wasn't initialized
yet. I don't see why it was felt neccesary to completely block the CFLM
events for these classes, making it hard to fully instrument the bootstrap
classes without having to do it in two passes, and supplying -Xpatch.

Also, last I checked, when java.base is defined in the VM, it's verified
that only packages from java.base has been defined so far, and if not it
is a fatal error; so even if someone tried to load a class outside of
java.base, that verification would kick in, and the VM would halt.

"Agents can use GetLoadedClasses function to generate the missed events"
doesn't really solve the problem. Yes, you can retransform the classes
afterwards, but that limits you to only change method bodies, thus cannot
add members to the classes.
As I said, I think will be possible once there is support for "module aware" agents. That piece just isn't there yet. It may require a new capability or maybe a new JVM TI phase, it will minimally require at least some specification changes. A module aware agent should be able to deal with CFLH events for classes loaded early in the startup but existing agents may not -- consider an agent that uses the CFLH to instrument code today to call into its own supporting library. Even if the supporting class could be loaded then it will fail immediately because it won't be able to link to its super-type, not even java.lang.Object because java.base has no exported packages in early startup. I'm guessing you are working around some of this by adding to or patching java.base.


:
Considering you also recently removed the system property "sun.boot.class
.path" (which is now live in the b94 build that just became available for
download), it would be very appreciated if an option were added back to
the JVM TI, so we have some way of either telling the VM to use this
patch dir/jar/jimage, and also be able to get CFLH events for classes
being loaded during primordial phase as well.

sun.boot.class.path is finally removed. It's value has been useless for a long time but the actual removal required several steps. The removal of this property shouldn't impact JVM TI AddToBootstrapClassLoaderSearch or -Xbootclasspath/a.

Is -Xpatch working for you? Can you use this in conjunction with -agentlib/-agentpath until there is further progress in this area.

-Alan

Reply via email to