RFR (L, tedious again, sorry) 8189610: Reconcile jvm.h and all jvm_md.h between java.base and hotspot
Daniel D. Daugherty
daniel.daugherty at oracle.com
Wed Nov 1 18:34:25 UTC 2017
> So, we have a variety of opinions. Please open another ticket to
> discuss this.
Sorry, I didn't realize that this fix pushed yesterday.
I'm not completely caught up on all of the email. It's
not worth another bug report (and more changes).
Dan
On 11/1/17 2:09 PM, coleen.phillimore at oracle.com wrote:
>
>
> On 11/1/17 12:51 PM, Daniel D. Daugherty wrote:
>> Just one comment about the location of "jvm.h".
>>
>>
>> On 10/30/17 8:07 AM, coleen.phillimore at oracle.com wrote:
>>>
>>>
>>> On 10/28/17 3:46 AM, David Holmes wrote:
>>>> On 28/10/2017 3:47 AM, mandy chung wrote:
>>>>> On 10/27/17 7:08 AM, coleen.phillimore at oracle.com wrote:
>>>>>>
>>>>>>
>>>>>> On 10/27/17 9:37 AM, David Holmes wrote:
>>>>>>>
>>>>>>> The one file that is needed is a hotspot file - jvm.h defines
>>>>>>> the interface that hotspot exports via jvm.cpp.
>>>>>>>
>>>>>>> If you leave jvm.h in hotspot/prims then a very large chunk of
>>>>>>> your boilerplate changes are not needed. The JDK code doesn't
>>>>>>> care what the name of the directory is - whatever it is just
>>>>>>> gets added as a -I directive (the JDK code will include "jvm.h"
>>>>>>> not "prims/jvm.h" the way hotspot sources do.
>>>>>>>
>>>>>>> This isn't something we want to change back or move again later.
>>>>>>> Whatever we do now we live with.
>>>>>>
>>>>>> I think it belongs with jni.h and I think the core libraries
>>>>>> group would agree. It seems more natural there than buried in
>>>>>> the hotspot prims directory. I guess this is on hold while we
>>>>>> have this debate. Sigh.
>>>>>>
>>>>>> Actually with -I directives, changing to jvm.h from prims/jvm.h
>>>>>> would still work. Maybe we should change the name to jvm.hpp
>>>>>> since it's jvm.cpp though? Or maybe just have two divergent
>>>>>> copies and close this as WNF.
>>>>>
>>>>> I also think hotspot/prims is not a good location.
>>>>> src/java.base/share/include is a well-defined location for native
>>>>> header files. Maybe internal header files could be placed in
>>>>> include/internal but this is a separate issue . I should create an
>>>>> issue for jvm.h and jmm.h (I looked at the files under the include
>>>>> directory and jvm.h and jmm.h are the only two internal header
>>>>> files in the include directory).
>>>>
>>>> Keeping it in prims avoids the need to touch many hotspot files,
>>>> and with no changes needed on the JDK side because we use a -I
>>>> directive to set the include path anyway. This is the exported VM
>>>> interface so it makes sense to me for it to be located in the VM
>>>> sources.
>>>>
>>>> But I'm not going to oppose this either way so it's up to Coleen.
>>>
>>> I've already disagreed that this file belongs in
>>> src/hotspot/share/prims, so the include directive without prims is
>>> preferred. This allows putting jvm.h in a new place if/when that is
>>> agreed upon.
>>
>> The jvm.h file describes the internal JVM_* API implemented by
>> prims/jvm.cpp.
>> Because this is an internal interface, the jvm.h file would
>> traditionally be
>> co-located with the implementation (jvm.cpp) (and not in an include
>> directory).
>>
>> So I disagree with the proposal to move jvm.h and believe the single
>> copy
>> should be in prims/jvm.h.
>
> So, we have a variety of opinions. Please open another ticket to
> discuss this.
> thanks,
> Coleen
>>
>> Dan
>>
>>
>>>>
>>>>> I do think removing the duplicated copy of jvm.h is a good change.
>>>>> This is finally possible with the consolidated repository and we
>>>>> no longer need to update two copies of jvm.h for any change to the
>>>>> JVM
>>>>
>>>> Unfortunately we did not do this though - hence the divergence
>>>> between the two. The use of int versus long for jint is causing a
>>>> real problem.
>>>>
>>>> Coleen also hit the other issue on the head. The JNI and JVM
>>>> interfaces are C interfaces, not C++. The JDK code that uses them
>>>> is compiled as C - so all good. But the JVM code that implements
>>>> them is compiled as C++, and that is why we are getting issues with
>>>> differing linkage directives.
>>>
>>> Well, there is now one source file for jvm.h and jni.h and their
>>> machine dependent counterparts and 2500 lines of duplicated code is
>>> removed with this change. The issues with jint and linkages are
>>> resolved and tested as well with this changeset.
>>>
>>> Thanks,
>>> Coleen
>>>>
>>>> David
>>>> -----
>>>>
>>>>> interface. This change will work with -I directive setting to
>>>>> the new location, if changed later.
>>>>>
>>>>> What do you think?
>>>>>
>>>>> Mandy
>>>
>>
>
>
More information about the hotspot-dev
mailing list