How to specity the -agentlib option in a jtreg test?

Alexander Kulyakhtin alexander.kulyakhtin at oracle.com
Wed Apr 20 12:22:17 UTC 2016


Jon, 

I think, in the majority of the cases a jvmti test involves creating both a java source and a native agent library (which then gets passed to the test via the -agentlib option). 
Probably, there are no jvmti tests involving some 'well-known' or 'prebuilt' agent libraries. 
Therefore, the risk of having the -nativepath pointing to the wrong artifacts seems to be very low. Probably, appending the nativepath to the end of the env variable would be safer in any case. 

As was agreed before, I have filed https://bugs.openjdk.java.net/browse/CODETOOLS-7901662 to address the -agnetlib issue 

Best regards, 
Alexander 

----- Original Message ----- 
From: jonathan.gibbons at oracle.com 
To: staffan.larsen at oracle.com 
Cc: alexander.kulyakhtin at oracle.com, jtreg-use at openjdk.java.net 
Sent: Tuesday, April 19, 2016 7:07:37 PM GMT +03:00 Iraq 
Subject: Re: How to specity the -agentlib option in a jtreg test? 



OK, 

The one complication from the jtreg side is that the nativepath has to be merged with any externally supplied value on the PATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATH. 

With that complication in mind, should the nativepath be prepended or appending to any existing value on the env variable? 

-- Jon 

On 04/19/2016 12:48 AM, Staffan Larsen wrote: 







On 18 apr. 2016, at 21:59, Jonathan Gibbons < jonathan.gibbons at oracle.com > wrote: 


HI Staffan, 

The text specifically describes Windows and Solaris. Should we assume that Mac and Linux also use LD_LIBRARY_PATH. 


As David said, Mac uses DYLD_LIBRARY_PATH. 





And, my question still stands: which is the better one to fix: jtreg, or jvmti? 



I think the fix needs to be in jtreg. 


/Staffan 





-- Jon 


On 04/18/2016 11:07 AM, Staffan Larsen wrote: 


The JVMTI spec is kind of vague on this point, but does not mention system properties. 


-agentlib:<agent-lib-name>=<options> 
The name following -agentlib: is the name of the library to load. Lookup of the library, both its full name and location, proceeds in a platform-specific manner. Typically, the <agent-lib-name> is expanded to an operating system specific file name. The <options> will be passed to the agent on start-up. For example, if the option -agentlib:foo=opt1,opt2 is specified, the VM will attempt to load the shared library foo.dllfrom the system PATH under WindowsTM or libfoo.so from the LD_LIBRARY_PATH under the SolarisTM operating environment. If the agent library is statically linked into the executable then no actual loading takes place. 


http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html 









On 18 apr. 2016, at 19:51, Jonathan Gibbons < jonathan.gibbons at oracle.com > wrote: 


OK, thanks for clarifying. 

The question is, should -agentlib use the system property (that is already being set) or should jtreg set LD_LIBRARY_PATH (which is platform specific.) 

-- Jon 

On 04/18/2016 04:53 AM, Alexander Kulyakhtin wrote: 


Jon, 

In the 'rerun' section I have: 

images/jdk/bin/java \\ 
... 
-Dtest.nativepath=<...>images/test/hotspot/jtreg/native 
-Djava.library.path=<...>images/test/hotspot/jtreg/native 
-agentlib:TestGetModules 
... 

While TestGetModules.so does reside in the images/test/hotspot/jtreg/native, jtreg does not set LD_LIBRARY_PATH to that directory before invoking java. 
Therefore -agentlib does not know where to look for the library. 
The System.loadLibrary, on the contrary, does succeed because of the -Djava.library.path passed to java. 

Best regards, 
Alexander 

----- Original Message ----- 
From: jonathan.gibbons at oracle.com 
To: jtreg-use at openjdk.java.net 
Sent: Friday, April 15, 2016 7:05:18 PM GMT +03:00 Iraq 
Subject: Re: How to specity the -agentlib option in a jtreg test? 

jtreg should report the command it is trying to execute in the "rerun" 
section. 

If you execute that command directly, does it work? In other words, 
can you isolate the problem to jtreg or to the execution of the command 
that jtreg execs? 

-- Jon 

On 04/15/2016 07:53 AM, Staffan Larsen wrote: 


I don’t know why it does not work for -agentlib, but as a workaround you can create an @driver class that launches your test program with the -agentpath parameter and get the location of the native libraries through the system property test.nativepath. 

Staffan 



On 15 apr. 2016, at 16:29, Alexander Kulyakhtin < alexander.kulyakhtin at oracle.com > wrote: 

Hi, 

I'm trying to create a jtreg test which compiles and then executes a java class with the -agentlib option (to test some JVMTI functionality) 

In my test I have 

@compile MyTest.java 
@run main/othervm -agentlib:mylib MyTest 

I run the test with: 

jtreg -nativepath:<path to libmylib.so> MyTest 

However, it fails with: 

"Could not find agent library mylib on the library path, libmylib.so: cannot open shared object file: No such file or directory" 

The -nativepath does provide for the successful loading of the library when I use System.loadLibrary("mylib"). 
However, for the -agentlib option, it does not help. 

Does someone know if it is possible to specify the library path for the -agentlib option, from within a jtreg test or using the jtreg options? 

Thank you very much for your help. 

Best regards, 
Alexander 






-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/jtreg-use/attachments/20160420/569a7b18/attachment-0001.html>


More information about the jtreg-use mailing list