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

Staffan Larsen staffan.larsen at oracle.com
Tue Apr 19 20:02:17 UTC 2016


I would say nativepath should be prepended, so that we don't accidentally pick up some other library. 

Thanks,
Staffan

> On 19 apr. 2016, at 17:15, Jonathan Gibbons <jonathan.gibbons at oracle.com> wrote:
> 
> 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/20160419/6711602a/attachment.html>


More information about the jtreg-use mailing list