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

Jonathan Gibbons jonathan.gibbons at oracle.com
Wed Apr 20 14:44:19 UTC 2016


I pushed a fix for this to jtreg tip yesterday;  you should be able to 
try the code in the 4.2 nightly build, available in the standard place 
on jre.us.oracle.com/java/re/jtreg/4.2

I chose to append to the path.  The only risk is on Windows, where PATH 
is inherited into test JVMs;  on other platforms, (DY)LD_LIBRARY_PATH is 
not inherited by default, so appended/prepended is mostly a moot point, 
unless you explicitly use options to enable these variables to be inherited.

I'll make sure 7901662 is updated.

-- Jon


On 04/20/2016 05:22 AM, Alexander Kulyakhtin wrote:
> 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
>         <mailto: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
>                 <mailto: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
>                     <mailto:jonathan.gibbons at oracle.com>
>                     To: jtreg-use at openjdk.java.net
>                     <mailto: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
>                             <mailto: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/0a0c4a40/attachment.html>


More information about the jtreg-use mailing list