On Aug 2, 2013, at 11:11 PM, Bill Pittore wrote:

> On 8/2/2013 9:12 PM, serguei.spit...@oracle.com wrote:
>> Hi Bill,
>> 
>> A couple of more questions.
>> 
>> webrev.01/jvmti.html
>> 
>> An agent L whose image has been combined with the VM *is defined* as 
>> /statically linked/
>> if and only if the agent exports a function called Agent_OnLoad_L.
>> 
>> A question to the above.
>> Are we going to allow to link a library dynamically if it exports both
>> the Agent_OnLoad and Agent_OnLoad_L functions?
>> It can be convenient if a library exports both Agent_OnLoad and 
>> Agent_OnLoad_L
>> as it can be linked statically or dynamically depending on the need without 
>> changes.
>> 
> It would be nice but the problem is that you could only link one agent into 
> the VM if it exported Agent_OnLoad. Otherwise there would be a symbol 
> collision with the second agent you linked in that also had Agent_OnLoad. As 
> an agent developer you will have to select one or the other at build time, 
> either statically linked in or dynamic.
>> You already added the following statement to the JVMTI spec:
>> If a /statically linked/ agent L exports a function called Agent_OnLoad_L and
>>  a function called Agent_OnLoad, the Agent_OnLoad function will be ignored.
>> 
>> Could we say it in a shorter form?:
>> If a /statically linked/ agent L exports a function called Agent_OnLoad,
>>  the Agent_OnLoad function will be ignored.
> I believe I copied this from JNI static linking JEP.  If so, I'll probably 
> leave it as is just for consistency with JNI static spec. JVM TI static 
> linking spec is closely related to JNI static linking spec.
>> 
>> In this context would it be reasonable to add another statement:
>> If a /dynamically linked/ agent L exports a function called Agent_OnLoad_L,
>>  the Agent_OnLoad_L function will be ignored.
>> 

I'd rather leave this undefined since the behavior is very platform specific. 
The way we determine if a library is statically linked is by the presence of 
the Agent_OnLoad_L function.  
If this function exists in a dynamically linked library, it will be treated as 
a static library if by some chance 
it's attempted to be loaded twice, since the symbol will may be visible in the 
running process.

Bob.


>> The same questions apply to the Agent_OnAttach and Agent_OnAttach_L entry 
>> points.
>> 
> I'm out on vacation for a couple of weeks so I'll leave it up to Bob V. and 
> yourself if you guys want to hash out better/different wording.
> 
> bill
>> 
>> Thanks,
>> Serguei
>> 
>> 
>> On 7/30/13 12:17 PM, bill.pitt...@oracle.com wrote:
>>> Thanks Serguei for the comments. Some comments inline. I updated the 
>>> webrevs at
>>> http://cr.openjdk.java.net/~bpittore/8014135/jdk/webrev.02/
>>> http://cr.openjdk.java.net/~bpittore/8014135/hotspot/webrev.01/
>>> 
>>> http://cr.openjdk.java.net/~bpittore/8014135/javadoc/index.html
>>> http://cr.openjdk.java.net/~bpittore/8014135/hotspot/webrev.01/jvmti.html
>>> 
>>> 
>>> On 7/26/2013 5:00 AM, serguei.spit...@oracle.com wrote:
>>>> Hi Bill,
>>>> 
>>>> Sorry for the big delay.
>>>> 
>>>> 
>>>> http://cr.openjdk.java.net/~bpittore/8014135/jdk/webrev.01/
>>>> 
>>>> 
>>>> src/share/classes/com/sun/tools/attach/VirtualMachine.java:
>>>> 
>>>> 
>>>> I'm suggesting to use the reference *<code>Agent_OnAttach[_L]</code>**||* 
>>>> even more consistently.
>>>> (If, in some cases, you prefer the longer form to underline the difference 
>>>> between
>>>> dynamically and statically linked libraries then feel free to leave it as 
>>>> it is.)
>>>> 
>>>> It would simplify the following fragments:
>>>> 
>>>> 304      * It then causes the target VM to invoke the 
>>>> <code>Agent_OnAttach</code> function
>>>> 305      * or, for a statically linked agent named 'L', the 
>>>> <code>Agent_OnAttach_L</code> function
>>>>   ==>
>>>> 
>>>> 304      * It then causes the target VM to invoke the 
>>>> <code>Agent_OnAttach[_L]</code> function
>>>> 
>>>> 409      * It then causes the target VM to invoke the 
>>>> <code>Agent_OnAttach</code>
>>>> 410      * function or, for a statically linked agent named 'L', the
>>>> 411      * <code>Agent_OnAttach_L</code> function as specified in the
>>>>  ==>
>>>>  409      * It then causes the target VM to invoke the 
>>>> <code>Agent_OnAttach[_L]</code>
>>>>  410      * function as specified in the
>>>> 
>>> I left the above as is since it's part of the method description. The 
>>> following fragments below I simplified as you suggested.
>>> 
>>>> 
>>>> the following 4 identical fragments:
>>>> 
>>>>  341      *          If the <code>Agent_OnAttach</code> function returns 
>>>> an error
>>>>  342      *          or, for a statically linked agent named 'L', if the
>>>>  343      *          <code>Agent_OnAttach_L</code> function returns
>>>>  344      *          an error.
>>>>  375      *          If the <code>Agent_OnAttach</code> function returns 
>>>> an error
>>>>  376      *          or, for a statically linked agent named 'L', if the
>>>>  377      *          <code>Agent_OnAttach_L</code> function returns
>>>>  378      *          an error.
>>>>  442      *          If the <code>Agent_OnAttach</code> function returns 
>>>> an error
>>>>  443      *          or, for a statically linked agent named 'L', if the
>>>>  444      *          <code>Agent_OnAttach_L</code> function returns an 
>>>> error
>>>>  475      *          If the <code>Agent_OnAttach</code> function returns 
>>>> an error
>>>>  476      *          or, for a statically linked agent named 'L', if the
>>>>  477      *          <code>Agent_OnAttach_L</code> function returns
>>>>  478      *          an error.
>>>>  ==>
>>>> 
>>>> 336      *          If the <code>Agent_OnAttach[_L]</code> function 
>>>> returns an error.
>>>> 
>>> 
>>>> 
>>>> 
>>>> http://cr.openjdk.java.net/~bpittore/8014135/hotspot/webrev.00/
>>>> 
>>>> 
>>>> http://cr.openjdk.java.net/~bpittore/8014135/hotspot/webrev.00/jvmti.html
>>>>  src/share/vm/prims/jvmti.xml
>>>> 
>>>> Lines 442-462:  many extra <p/>'s. The fragment does not look well.
>>>> I'd suggest to remove most of them.
>>>> Also, these lines are too long. Could you make them shorter, please?
>>>> The same is applied to other long new lines in this file.
>>> Cleaned this up a bit.
>>>> 
>>>> Lines 490-491, 502-503, 505-506:
>>>>     The same sentence is repeated 3 times: "the agent library may be 
>>>> statically linked ..."
>>>> 
>>>> 490     Note that the agent library may be statically linked into the 
>>>> executable
>>>> 491     in which case no actual loading takes place.
>>> Fixed.
>>>> 
>>>> 501 <code>-agentpath:c:\myLibs\foo.dll=opt1,opt2</code> is specified, the 
>>>> VM will attempt to
>>>> 502         load the shared library <code>c:\myLibs\foo.dll</code>. As 
>>>> mentioned above, the agent library may be statically linked into the 
>>>> executable
>>>> 503         in which case no actual loading takes place
>>>> 
>>>> 505     Note that the agent library may be statically linked into the 
>>>> executable
>>>> 506     in which case no actual loading takes place.
>>>> 
>>> Tweaked the above a bit to make it less wordy.
>>> 
>>>> Lines 677-678: The dot is missed at the end of line 677:
>>>> 
>>>> 677     and enabled the event
>>>> 
>>> Fixed.
>>>> 
>>>> src/os/posix/vm/os_posix.cpp
>>>> 
>>>>   - no comments
>>>> 
>>>> src/os/windows/vm/os_windows.cpp
>>>> 
>>>>   - no comments
>>>> 
>>>> src/share/vm/prims/jvmtiExport.cpp
>>>> 
>>>>   - no comments
>>>> 
>>>> src/share/vm/runtime/arguments.hpp
>>>> 
>>>>   - no comments
>>>> 
>>>> src/share/vm/runtime/os.cpp
>>>> 
>>>> Space is missed after the 'if':
>>>>   471     if(entryName != NULL) {
>>>> 
>>> Fixed.
>>>> Extra space after the '*':
>>>>  483   void * saveHandle;
>>>> 
>>> Fixed.
>>>> src/share/vm/runtime/os.hpp
>>>> 
>>>>   - no comments
>>>> 
>>>> src/share/vm/runtime/thread.cpp
>>>> 
>>>>  The line has been removed:
>>>>  3866         break;
>>>> 
>>> Correct, the inner for loop was removed so no need for the break;
>>>> 
>>>> I'm still in process of reading the code.
>>>> Another pass is needed to make sure that nothing is missed.
>>>> But in general, the code quality is pretty good.
>>>> 
>>>> Thanks,
>>>> Serguei
>>>> 
>>>> 
>>>> 
>>>> On 7/25/13 10:47 AM, bill.pitt...@oracle.com wrote:
>>>>> Still need an official reviewer for the hotspot changes for statically 
>>>>> linked agents.
>>>>> 
>>>>> thanks,
>>>>> bill
>>>>> 
>>>>>> These changes address bug 8014135 which adds support for statically 
>>>>>> linked agents in the VM. This is a followup to the recent JNI spec 
>>>>>> changes that addressed statically linked JNI libraries( 8005716).
>>>>>> The JEP for this change is the same JEP as the JNI changes:
>>>>>> http://openjdk.java.net/jeps/178
>>>>>> 
>>>>>> Webrevs are here:
>>>>>> 
>>>>>> http://cr.openjdk.java.net/~bpittore/8014135/jdk/webrev.00/
>>>>>> http://cr.openjdk.java.net/~bpittore/8014135/hotspot/webrev.00/
>>>>>> 
>>>>>> The changes to jvmti.xml can also be seen in the output file that I 
>>>>>> placed here:
>>>>>> http://cr.openjdk.java.net/~bpittore/8014135/hotspot/webrev.00/jvmti.html
>>>>>>  
>>>>>> 
>>>>>> Thanks,
>>>>>> bill
>>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
>> 
> 

Reply via email to