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

Jonathan Gibbons jonathan.gibbons at oracle.com
Tue Apr 19 15:15:44 UTC 2016


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/20160419/9dfada2b/attachment-0001.html>


More information about the jtreg-use mailing list