RFR(S/M): 8199472: Fix non-PCH build after JDK-8199319
Stefan Karlsson
stefan.karlsson at oracle.com
Wed Mar 14 12:14:00 UTC 2018
On 2018-03-14 11:42, Volker Simonis wrote:
> Ahh, just wanted to send you a mail to ask about the build failures of
> my submit-hs job on Solaris which I can't reproduce on our local
> machines :)
>
> Yes, please go ahead and push my change. I'm sure I'll find another
> one which I can finally push myself :)
:) I've pushed the change now.
StefanK
>
> Thanks,
> Volker
>
>
> On Wed, Mar 14, 2018 at 10:52 AM, Stefan Karlsson
> <stefan.karlsson at oracle.com> wrote:
>> Hi Volker,
>>
>> On 2018-03-13 18:13, Volker Simonis wrote:
>>>
>>> Hi,
>>>
>>> please find the new webrev here:
>>>
>>> http://cr.openjdk.java.net/~simonis/webrevs/2018/8199472.v2/
>>>
>>> I've moved allocate_instance_handle to instanceKlass.cpp as requested
>>> and updated some copyrights. The change is currently running through
>>> the new submit-hs repo testing.
>>>
>>> If you're OK with the new version and the tests succeed I'll push the
>>> change tomorrow.
>>
>>
>> The submit job failed because of missing handles.inline.hpp includes in our
>> closed JFR code. I've created closed patch to solve that. I can push both of
>> these patches, unless you really want to push the open part yourself.
>>
>> Thanks,
>> StefanK
>>
>>
>>>
>>> Best regards,
>>> Volker
>>>
>>>
>>> On Tue, Mar 13, 2018 at 10:16 AM, Stefan Karlsson
>>> <stefan.karlsson at oracle.com> wrote:
>>>>
>>>> Hi Volker,
>>>>
>>>> On 2018-03-13 10:12, Volker Simonis wrote:
>>>>>
>>>>>
>>>>> Hi Coleen, Stefan,
>>>>>
>>>>> sure I'm open for suggestions :)
>>>>>
>>>>> As you both ask for the same thing, I'll prepare a new webrev with
>>>>> allocate_instance_handle moved to instanceKlass.cpp. In my initial
>>>>> patch I just didn't wanted to change the current inlining behaviour
>>>>> but if you both think that allocate_instance_handle is not performance
>>>>> critical I'm happy to clean that up.
>>>>
>>>>
>>>>
>>>>
>>>> I don't think it's critical to get it inlined. With that said, I think
>>>> the
>>>> compiler will inline allocate_instance into allocate_instance_handle, so
>>>> you'll most likely only get one call anyway.
>>>>
>>>>> With the brand new submit-hs repo posted by Jesper just a few hours
>>>>> ago, I'll be also able to push this myself, so no more need for a
>>>>> sponsor :)
>>>>
>>>>
>>>>
>>>> Yay!
>>>>
>>>> StefanK
>>>>
>>>>
>>>>>
>>>>> Thanks,
>>>>> Volker
>>>>>
>>>>>
>>>>> On Mon, Mar 12, 2018 at 8:42 PM, <coleen.phillimore at oracle.com> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hi this looks good except:
>>>>>>
>>>>>>
>>>>>>
>>>>>> http://cr.openjdk.java.net/~simonis/webrevs/2018/8199472/src/hotspot/share/oops/instanceKlass.inline.hpp.udiff.html
>>>>>>
>>>>>> Can you move this a function in instanceKlass.cpp and would this
>>>>>> eliminate
>>>>>> the changes that add include instanceKlass.inline.hpp ?
>>>>>>
>>>>>> If Stefan is not still online, I'll sponsor this for you.
>>>>>>
>>>>>> I have a follow-on related change
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8199263 which is quickly
>>>>>> expanding
>>>>>> due to transitive includes that I hope you can help me test out (when I
>>>>>> get
>>>>>> it to compile on solaris).
>>>>>>
>>>>>> Thanks,
>>>>>> Coleen
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 3/12/18 3:34 PM, Volker Simonis wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> can I please have a review and a sponsor for the following fix:
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~simonis/webrevs/2018/8199472/
>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8199472
>>>>>>>
>>>>>>> The number changes files is "M" but the fix is actually "S" :)
>>>>>>>
>>>>>>> Here come the gory details:
>>>>>>>
>>>>>>> Change "8199319: Remove handles.inline.hpp include from
>>>>>>> reflectionUtils.hpp" breaks the non-PCH build (at least on Ubuntu
>>>>>>> 16.04 with gcc 5.4.0). If you configure with
>>>>>>> "--disable-precompiled-headers" you will get a whole lot of undefined
>>>>>>> reference for "Handle::Handle(Thread*, oopDesc*)" - see bug report.
>>>>>>>
>>>>>>> It seems that newer versions of GCC (and possibly other compilers as
>>>>>>> well) don't emit any code for inline functions if these functions can
>>>>>>> be inlined at all potential call sites.
>>>>>>>
>>>>>>> The problem in this special case is that "Handle::Handle(Thread*,
>>>>>>> oopDesc*)" is not declared "inline" in "handles.hpp", but its
>>>>>>> definition in "handles.inline.hpp" is declared "inline". This leads to
>>>>>>> a situation, where compilation units which only include "handles.hpp"
>>>>>>> will emit a call to "Handle::Handle(Thread*, oopDesc*)" while
>>>>>>> compilation units which include "handles.inline.hpp" will try to
>>>>>>> inline "Handle::Handle(Thread*, oopDesc*)". If all the inlining
>>>>>>> attempts are successful, no instance of "Handle::Handle(Thread*,
>>>>>>> oopDesc*)" will be generated in any of the object files. This will
>>>>>>> lead to the link errors listed in the .
>>>>>>>
>>>>>>> The quick fix for this issue is to include "handles.inline.hpp" into
>>>>>>> all the compilation units with undefined references (listed below).
>>>>>>>
>>>>>>> The correct fix (realized in this RFR) is to declare
>>>>>>> "Handle::Handle(Thread*, oopDesc*)" inline in "handles.hpp". This will
>>>>>>> lead to warnings (which are treated as errors) if the inline
>>>>>>> definition is not available at a call site and will avoid linking
>>>>>>> error due to compiler optimizations. Unfortunately this requires a
>>>>>>> whole lot of follow-up changes, because "handles.hpp" defines some
>>>>>>> derived classes of "Handle" which all have implicitly inline
>>>>>>> constructors which all reference the base class
>>>>>>> "Handle::Handle(Thread*, oopDesc*)" constructor. So the constructors
>>>>>>> of the derived classes have to be explicitly declared inline in
>>>>>>> "handles.hpp" and their implementation has to be moved to
>>>>>>> "handles.inline.hpp". This change again triggers other changes for all
>>>>>>> files which relayed on the derived Handle classes having inline
>>>>>>> constructors...
>>>>>>>
>>>>>>> Thank you and best regards,
>>>>>>> Volker
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>
>>
More information about the hotspot-dev
mailing list