On Aug 6, 2013, at 3:10 PM, serguei.spit...@oracle.com wrote:

> On 8/6/13 11:57 AM, serguei.spit...@oracle.com wrote:
>> On 8/5/13 7:41 AM, Bob Vandette wrote:
>>> 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.
>> (I've added Alan and Coleen to the cc-list)
>> 
>> It is still not clear to me how the second load might happen.
> 
> It is inaccurate statement above.
> I wanted to say "such a second load" that will determine the dynamically 
> loaded agent as statically loaded.

Could you please restate the issue you'd like addressed.

I don't think we can guarantee that an Agent_OnLoad_L symbol located in a 
shared library will not be
visible to our running process on all operating system platforms.

Bob.


> 
> Thanks,
> Serguei
> 
>> 
>> The agent is determined as statically loaded if the Agent_OnLoad_L function
>> is found in the main program, not in the dynamic library.
>> At least, the dll_lookup is done for the main program (for 
>> DefaultProcessHandle).
>> If the agent is loaded dynamically, the Agent_OnLoad_L function in the agent 
>> library
>> can be ignored because the dll_lookup in the main program will not find it.
>> In a case of the second load this function will be ignored again.
>> So that there is no conflict with the dynamically loaded agent here.
>> 
>> We can skip this issue for now.
>> Alan is going to review the JEP from the dynamic Attach point of view and 
>> hopefully will pay attention to these details.
>> 
>> Thanks,
>> Serguei
>> 
>>> 
>>> 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