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

Jonathan Gibbons jonathan.gibbons at oracle.com
Mon Apr 18 19:59:19 UTC 2016


HI Staffan,

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

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

-- 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/20160418/2d0d2a38/attachment-0001.html>


More information about the jtreg-use mailing list