On Fri, 19 May 2023 17:11:36 GMT, Alan Bateman <al...@openjdk.org> wrote:
>> This is the implementation for JEP 451. There are two parts to this: >> >> 1. A multi-line warning is printed when a JVM TI or Java agent is loaded >> into a running VM. For JVM TI, the message is printed to stderr from >> JvmtiAgent::load. For Java agents, it is printed to System.err (as that may >> be redirected) in the JPLIS (j.l.instrumentation) implementation. This part >> includes an update to the JVM TI spec and API docs to require the warning. >> >> 2. If running with -Djdk.instrument.traceUsage or >> -Djdk.instrument.traceUsage=true, the calls to the Instrumentation API print >> a trace message and stack trace. > > Alan Bateman has updated the pull request with a new target base due to a > merge or a rebase. The incremental webrev excludes the unrelated changes > brought in by the merge/rebase. The pull request contains 10 additional > commits since the last revision: > > - Merge > - Refresh package description > - Merge > - Tweak docs > - Merge > - Draft docs changes > - Merge > - Rename/cleanup > - Merge > - Initial commit src/java.instrument/share/classes/java/lang/instrument/package-info.java line 61: > 59: * manifest attributes for standalone applications that are packaged as > <em>executable > 60: * JAR files</em>. If an implementation supports a mechanism to start an > application as > 61: * an executable JAR then the main manifest of the JAR file can include > the Suggestion: * JAR files</em>. If an implementation supports a mechanism to start an application as * an executable JAR, then the main manifest of the JAR file can include the src/java.instrument/share/classes/java/lang/instrument/package-info.java line 65: > 63: * class that is packaged with the application. If the attribute is > present then the > 64: * JVM starts the agent, by loading the agent class and invoking its > {@code agentmain} > 65: * method, before the application {@code main} method is invoked. Suggestion: * class that is packaged with the application. If the attribute is present, then the * JVM starts the agent by loading the agent class and invoking its {@code agentmain} * method before the application {@code main} method is invoked. src/java.instrument/share/classes/java/lang/instrument/package-info.java line 73: > 71: * }</blockquote> > 72: * > 73: * <p> If the agent class does not define this method then the JVM will > attempt Suggestion: * <p> If the agent class does not define this method, then the JVM will attempt src/java.instrument/share/classes/java/lang/instrument/package-info.java line 106: > 104: * Premain-Class}. The value of this attribute is the binary name of the > agent class > 105: * in the JAR file. The JVM starts the agent, by loading the agent class > and invoking > 106: * its {@code premain} method, before the application {@code main} > method is invoked. Suggestion: * in the JAR file. The JVM starts the agent by loading the agent class and invoking * its {@code premain} method before the application {@code main} method is invoked. src/java.instrument/share/classes/java/lang/instrument/package-info.java line 146: > 144: * <p> An implementation may provide a mechanism to start agents in a > running VM (meaning > 145: * after JVM startup). The details as to how this is initiated are > implementation specific > 146: * but typically the application has already started and its {@code > main} method has Suggestion: * after JVM startup). The details as to how this is initiated are implementation specific, * but typically the application has already started and its {@code main} method has src/java.instrument/share/classes/java/lang/instrument/package-info.java line 194: > 192: * <p> The agent class may also have a {@code premain} method for use > when the agent > 193: * is started using a command-line option. When the agent is started in > a running JVM > 194: * the {@code premain} method is not invoked. Suggestion: * is started using a command-line option. When the agent is started in a running JVM, * the {@code premain} method is not invoked. src/java.instrument/share/classes/java/lang/instrument/package-info.java line 253: > 251: * <dt>{@code Launcher-Agent-Class}</dt> > 252: * <dd> If an implementation supports a mechanism to start an > application in an > 253: * executable JAR file then this attribute, if present, specifies the > binary name Suggestion: * <dd> If an implementation supports a mechanism to start an application in an * executable JAR file, then this attribute, if present, specifies the binary name src/java.instrument/share/classes/java/lang/instrument/package-info.java line 256: > 254: * of the agent class that is packaged with the application. > 255: * The agent is started, by invoking the agent class {@code agentmain} > method, > 256: * before the application {@code main} method is invoked. </dd> Suggestion: * The agent is started by invoking the agent class {@code agentmain} method * before the application {@code main} method is invoked. </dd> src/java.instrument/share/classes/java/lang/instrument/package-info.java line 262: > 260: * the binary name of the agent class in the JAR file. > 261: * The agent is started, by invoking the agent class {@code premain} > method, > 262: * before the application {@code main} method is invoked. Suggestion: * The agent is started by invoking the agent class {@code premain} method * before the application {@code main} method is invoked. src/java.instrument/share/native/libinstrument/InvocationAdapter.c line 161: > 159: } > 160: > 161: initerror = createNewJPLISAgent(vm, &agent, jarfile, JNI_FALSE); No warning is ever printed in this case since this is an agent being loaded due to -javaagent on the command line. Correct? src/java.instrument/share/native/libinstrument/InvocationAdapter.c line 501: > 499: > 500: // create JPLISAgent with JVMTI environment > 501: if (createNewJPLISAgent(vm, &agent, jarfile, JNI_FALSE) != > JPLIS_INIT_ERROR_NONE) { No warning is ever printed in this case since this is an agent being loaded from an executable JAR. Correct? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201264543 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201266407 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201266670 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201267997 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201269344 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201270901 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201271453 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201271684 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201272099 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201293583 PR Review Comment: https://git.openjdk.org/jdk/pull/13899#discussion_r1201292355