8201226 missing JNIEXPORT / JNICALL at some places in function declarations/implementations - was : RE: missing JNIEXPORT / JNICALL at some places in function declarations/implementations

Magnus Ihse Bursie magnus.ihse.bursie at oracle.com
Tue Apr 10 16:15:53 UTC 2018


> 10 apr. 2018 kl. 12:14 skrev Baesken, Matthias <matthias.baesken at sap.com>:
> 
> Hello,  I  had to  do another small adjustment  to make jimage.hpp/cpp match.    Please review :
> 
> http://cr.openjdk.java.net/~mbaesken/webrevs/8201226.2/

Looks good to me. 

/Magnus

> 
> With the latest webrev I could finally    build    jdk/jdk   successfully on both  win32bit   and win64 bit .
> 
> 
> 
> Thanks again  to Alexey  to provide  the   incorporated patch .
> 
> 
> Best regards, Matthias
> 
> 
> 
>> -----Original Message-----
>> From: Alexey Ivanov [mailto:alexey.ivanov at oracle.com]
>> Sent: Montag, 9. April 2018 17:14
>> To: Baesken, Matthias <matthias.baesken at sap.com>; Magnus Ihse Bursie
>> <magnus.ihse.bursie at oracle.com>
>> Cc: build-dev <build-dev at openjdk.java.net>; Doerr, Martin
>> <martin.doerr at sap.com>
>> Subject: Re: 8201226 missing JNIEXPORT / JNICALL at some places in function
>> declarations/implementations - was : RE: missing JNIEXPORT / JNICALL at
>> some places in function declarations/implementations
>> 
>> Hi Matthias,
>> 
>>> On 09/04/2018 15:38, Baesken, Matthias wrote:
>>> Hi  Alexey,    thanks  for  the diff provided by you, and  for  the  explanations
>> .
>>> 
>>> I created  a second  webrev :
>>> 
>>> http://cr.openjdk.java.net/~mbaesken/webrevs/8201226.1/
>>> 
>>> -   it  adds  the diff  provided by you    (hope that’s fine with you)
>> 
>> Yes, that's fine with me.
>> There could be only one author ;)
>> 
>>> -    changes  2 launchers    src/java.base/share/native/launcher/main.c    and
>> src/jdk.pack/share/native/unpack200/main.cpp    where we face similar
>> issues after mapfile removal for exes
>> 
>> I'd rather remove both JNIEXPORT and JNICALL from main().
>> It wasn't exported, and it shouldn't be.
>> 
>> Regards,
>> Alexey
>> 
>>> 
>>> 
>>> 
>>> Best regards , Matthias
>>> 
>>> 
>>>> -----Original Message-----
>>>> From: Alexey Ivanov [mailto:alexey.ivanov at oracle.com]
>>>> Sent: Montag, 9. April 2018 15:52
>>>> To: Magnus Ihse Bursie <magnus.ihse.bursie at oracle.com>; Baesken,
>>>> Matthias <matthias.baesken at sap.com>
>>>> Cc: build-dev <build-dev at openjdk.java.net>; Doerr, Martin
>>>> <martin.doerr at sap.com>
>>>> Subject: Re: 8201226 missing JNIEXPORT / JNICALL at some places in
>> function
>>>> declarations/implementations - was : RE: missing JNIEXPORT / JNICALL at
>>>> some places in function declarations/implementations
>>>> 
>>>> Hi Matthias, Magnus,
>>>> 
>>>> The problem is with JNICALL added to the functions. JNICALL expands to
>>>> __stdcall [1] on Windows. On 64 bit, the modifier has no effect and is
>>>> ignored. On 32 bit, the modifier changes the way parameters are pass and
>>>> the function name is decorated with an underscore and with @ + the size
>>>> of arguments.
>>>> 
>>>> If I remove JNICALL modifier from the exported functions, they're
>>>> exported with plain name as in source code (plus, __cdecl [2] calling
>>>> convention is used.)
>>>> 
>>>> zip.dll and jimage.dll are affected by this. It's because the exported
>>>> functions are looked up by name rather than using a header file with
>>>> JNIIMPORT. See
>>>> 
>> http://hg.openjdk.java.net/jdk/client/file/tip/src/hotspot/share/classfile/cla
>>>> ssLoader.cpp#l1155
>>>> 
>> http://hg.openjdk.java.net/jdk/client/file/tip/src/hotspot/share/classfile/cla
>>>> ssLoader.cpp#l1194
>>>> 
>>>> JNICALL modifier must also be removed from type declarations for
>>>> functions from zip.dll:
>>>> 
>> http://hg.openjdk.java.net/jdk/client/file/tip/src/hotspot/share/classfile/cla
>>>> ssLoader.cpp#l81
>>>> 
>>>> I'm attaching the patch to zip and jimage as well as classLoader.cpp
>>>> which takes these changes into account. It does not replace Matthias'
>>>> patch but complements it.
>>>> 
>>>> 
>>>> Alternatively, if keeping JNICALL / __stdcall, it's possible to use
>>>> pragma comments [3][4] to export undecorated names. But this is
>> compiler
>>>> specific and may require if's for other platforms.
>>>> 
>>>> 
>>>> Regards,
>>>> Alexey
>>>> 
>>>> [1] https://msdn.microsoft.com/en-us/library/zxk0tw93.aspx
>>>> [2] https://msdn.microsoft.com/en-us/library/zkwh89ks.aspx
>>>> [3] https://docs.microsoft.com/en-ie/cpp/build/reference/exports
>>>> [4] https://docs.microsoft.com/en-ie/cpp/preprocessor/comment-c-cpp
>>>> 
>>>>> On 09/04/2018 12:42, Magnus Ihse Bursie wrote:
>>>>> Those were added by my patch that removed the map files.
>>>>> 
>>>>> /Magnus
>>>>> 
>>>>>> 9 apr. 2018 kl. 13:38 skrev Baesken, Matthias
>>>> <matthias.baesken at sap.com>:
>>>>>> I did  not add   JNICALL decorations  to  any  libzip functions , please see
>>>> my webrev :
>>>>>> http://cr.openjdk.java.net/~mbaesken/webrevs/8201226/
>>>>>> 
>>>>>>> , the problem here
>>>>>>> is the added JNICALL decoration, which affects only win32 (and
>>>> incorrectly,
>>>>>>> that is).
>>>>>> so I wonder  which added  JNICALL  decoration   you are refering to .
>>>>>> 
>>>>>> Best regards, Matthias
>>>>>> 
>>>>>> 
>>>>>>> -----Original Message-----
>>>>>>> From: Magnus Ihse Bursie [mailto:magnus.ihse.bursie at oracle.com]
>>>>>>> Sent: Montag, 9. April 2018 13:29
>>>>>>> To: Baesken, Matthias <matthias.baesken at sap.com>
>>>>>>> Cc: Alexey Ivanov <alexey.ivanov at oracle.com>; build-dev <build-
>>>>>>> dev at openjdk.java.net>; Doerr, Martin <martin.doerr at sap.com>
>>>>>>> Subject: Re: 8201226 missing JNIEXPORT / JNICALL at some places in
>>>> function
>>>>>>> declarations/implementations - was : RE: missing JNIEXPORT / JNICALL
>> at
>>>>>>> some places in function declarations/implementations
>>>>>>> 
>>>>>>> Reinstating the -export command line options is not the way forward
>>>> here.
>>>>>>> As I understood it from private conversation with Alexey, the problem
>>>> here
>>>>>>> is the added JNICALL decoration, which affects only win32 (and
>>>> incorrectly,
>>>>>>> that is).
>>>>>>> 
>>>>>>> /Magnus
>>>>>>> 
>>>>>>> 
>> <SNIP>



More information about the build-dev mailing list