> On 17 Mar 2023, at 14:11, Thomas Stüfe <thomas.stu...@gmail.com> wrote:
> 
> Thank you for the clarification.
> 
> Oddly enough, -XX:-EnableDynamicAgentLoading seems to be broken. Tried head 
> (fastdebug, release) and JDK17, even with this switch my sample library loads 
> just fine:
> 
> ```
> thomas@starfish$ ./images/jdk/bin/java -XX:-EnableDynamicAgentLoading 
> -XX:+PrintFlagsFinal  -cp $REPROS_JAR de.stuefe.repros.Simple                 
>                                                                               
> [Global flags]                                                                
>                                                             
> ...
>      bool EnableDynamicAgentLoading                = false                    
>                  {product} {command line}
> ...
> <press key>
> OnAttach! Loading JVMTI sample agent
> ```
> 
> Investigation shows that there seems to be a bug in attachListener.cpp where 
> we compare AttachOperation::name for "load", but it contains "jcmd": 
> 
> ```
> Thread 22 "Attach Listener" hit Breakpoint 1, attach_listener_thread_entry 
> (thread=0x7fff94000fd0, __the_thread__=0x7fff94000fd0) at 
> /shared/projects/openjdk/jdk-jdk/source/src/hotspot/share/services/attachListener.cpp:404
> 404         } else if (!EnableDynamicAgentLoading && strcmp(op->name(), 
> "load") == 0) {
> (gdb) p op
> $1 = (AttachOperation *) 0x7fff7401b640
> (gdb) p *op
> $2 = {<CHeapObj<(MEMFLAGS)9>> = {<No data fields>}, _vptr.AttachOperation = 
> 0x7ffff7b61210 <vtable for LinuxAttachOperation+16>, _name = "jcmd\000", 
> '\361' <repeats 11 times>, <incomplete sequence \361>, _arg = {
>     "JVMTI.agent_load /shared/projects/jvmti-sample/sample.so\000", '\361' 
> <repeats 967 times>..., "\000", '\361' <repeats 1023 times>..., "\000", 
> '\361' <repeats 1023 times>...}}
> (gdb) p op->name()
> $3 = 0x7fff7401b648 "jcmd"
> ```
> 
> This was on Linux x64.
> 
> So if people have been using -XX:-EnableDynamicAgentLoading to check their 
> code, this may not have worked as intended.
> 
> Cheers, Thomas

There may be a missing check in JVMTIAgentLoadDCmd::execute in 
diagnosticCommand.cpp.
Thank you for reporting this!

— Ron

Reply via email to