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

Baesken, Matthias matthias.baesken at sap.com
Fri Apr 6 07:53:44 UTC 2018

Hello, please review :

Bug :


change :


mostly I added  JNIEXPORT / JNICALL at some places  where  the win32bit build missed it .

A difference is  src/java.desktop/share/native/libsplashscreen/splashscreen_impl.h
Where I removed   a few  declarations  (one  decl   with one without  JNIEXPORT / JNICALL – looked a bit strange ) .

Best regards , Matthias

From: Magnus Ihse Bursie [mailto:magnus.ihse.bursie at oracle.com]
Sent: Donnerstag, 5. April 2018 17:45
To: Baesken, Matthias <matthias.baesken at sap.com>
Cc: build-dev at openjdk.java.net; Doerr, Martin <martin.doerr at sap.com>
Subject: Re: missing JNIEXPORT / JNICALL at some places in function declarations/implementations

That's most likely a result of the new JNIEXPORT I added as part of the mapfile removal.

I tried to match header file and C file, but I can certainly have missed cases. If I didn't get any warnings, it was hard to know what I missed.

Please do submit your patch.

I'm a bit surprised 32-bit Window is still buildable. :)


5 apr. 2018 kl. 17:20 skrev Baesken, Matthias <matthias.baesken at sap.com<mailto:matthias.baesken at sap.com>>:
Hello, we noticed  that  at a number  of places in the coding  ,   the  JNIEXPORT and/or   JNICALL modifiers   do not match  when one compares  the declaration and
The implementation of functions.
While this is ok on most platforms, it seems to fail on Windows 32 bit and leads to errors like this one :

e:/priv/openjdk/repos/jdk/src/java.desktop/share/native/libmlib_image/mlib_ImageConvKernelConvert.c(87) : error C2373: 'j2d_mlib_ImageConvKernelConvert' : redefinition; different type modifiers
        e:\priv\openjdk\repos\jdk\src\java.desktop\share\native\libmlib_image\mlib_image_proto.h(2630) : see declaration of 'j2d_mlib_ImageConvKernelConvert'

(there are quite a few of these e.g. in mlib  / splashscreen etc.)

Another example is this one :

diff -r 4d98473ed33e src/java.base/share/native/libjimage/jimage.hpp
--- a/src/java.base/share/native/libjimage/jimage.hpp  Thu Apr 05 09:55:16 2018 +0200
+++ b/src/java.base/share/native/libjimage/jimage.hpp               Thu Apr 05 17:07:40 2018 +0200
@@ -126,7 +126,7 @@
  *   JImageLocationRef location = (*JImageFindResource)(image,
  *                                "java.base", "9.0", "java/lang/String.class", &size);
-extern "C" JNIEXPORT JImageLocationRef JIMAGE_FindResource(JImageFile* jimage,
+extern "C" JNIEXPORT JImageLocationRef JNICALL JIMAGE_FindResource(JImageFile* jimage,
         const char* module_name, const char* version, const char* name,
         jlong* size);

Is there some generic way to get  the  same  declarations / impementations   in the code  ?

Or should I just add a patch with my findings ?

Best regards, Matthias

More information about the build-dev mailing list