[PATCH] Windows 32-bit DLL name decoration

Alexey Ivanov alexey.ivanov at oracle.com
Wed Dec 12 17:01:23 UTC 2018

On 12/12/2018 16:52, Magnus Ihse Bursie wrote:
> On 2018-12-12 16:34, Alexey Ivanov wrote:
>> On 12/12/2018 12:58, Magnus Ihse Bursie wrote:
>>> On 2018-12-12 12:35, Alan Bateman wrote:
>>>> On 12/12/2018 11:14, Magnus Ihse Bursie wrote:
>>>>> :
>>>>> I searched the code for "jdwpTransport_On" to see of there was any 
>>>>> corresponding OnUnload function (or other), but could not find any.
>>>> That's right, an unload wasn't needed when that SPI was originally 
>>>> added but could be added in the event that some future debugger 
>>>> agent need it. The SPI is a supported/documented JDK-specific 
>>>> mechanism, its "spec" is hosted here:
>>>> https://docs.oracle.com/en/java/javase/11/docs/specs/jdwp/jdwp-transport.html 
>>> ... yet in all that time, we have not fully supported the spec on 
>>> Windows 32. :-( (We never discovered this because of lack of 
>>> testing, I presume, and that our internal usage empoyed a 
>>> questonable workaround.)
>> The spec does not specify whether the mangled name should be exported 
>> or not (for Windows 32 bit).
>> I looked through JNI specification and have found no mention of 
>> https://docs.oracle.com/en/java/javase/11/docs/specs/jni/index.html
>> This example uses extern "C" modifier but neither JNIEXPORT or JNICALL:
>> https://docs.oracle.com/en/java/javase/11/docs/specs/jni/design.html#native-method-arguments 
> I'm not sure if it's worth continuing this discussion, but at the very 
> least the specs have been not very clear on this.

I absolutely agree it's not worth it.
It does not solve the problem at hand; it does not solve any problem at all.
So let's leave it here.


> The links you cite point to the JNI specification, not JDWP. I don't 
> bother go looking for the exact place in the JNI spec, but I assume 
> they state that you must implement the header file as generated by 
> javac (formerly javah). These do look like this:
> * DO NOT EDIT THIS FILE - it is machine generated */
> #include <jni.h>
> /* Header for class sun_nio_ch_FileKey */
> #ifndef _Included_sun_nio_ch_FileKey
> #define _Included_sun_nio_ch_FileKey
> #ifdef __cplusplus
> extern "C" {
> #endif
> /*
>  * Class:     sun_nio_ch_FileKey
>  * Method:    init
>  * Signature: (Ljava/io/FileDescriptor;)V
>  */
> JNIEXPORT void JNICALL Java_sun_nio_ch_FileKey_init
>   (JNIEnv *, jobject, jobject);
> So at least implicitly, they say that you need to use JNIEXPORT and 
> JNICALL. And there is no /export thingy here. And no instructions in 
> the specs to do a specific export; if it were, we would have needed it 
> for all the hundereds of JNI functions in the JDK. So obviously the 
> JNI code reads decorated names on Windows 32.
> Then again, it is not clear that the spec for JNI should apply to 
> JDWP. But, if they state that you must use the JNICALL, and this will, 
> unless other actions are taken, such as using /export, by default 
> create a decorated name, I think it's very clear that *if* this indeed 
> was intended to be the formal interface, it *should* have been 
> explicitly written in the spec.
> /Magnus
>>>> I see this thread is touching on the functions exported by libjli. 
>>>> This library is part of the launcher and shouldn't be used directly 
>>>> by anything outside of the JDK. However we have to be careful 
>>>> because JavaFX `javapackager` tool has been using it. There's a JEP 
>>>> to bring a similar tool, jpackage in the current proposal, that 
>>>> will supersede it but in the mean time we need to be careful not to 
>>>> break it. A second issue is that the libjli is listed in the 
>>>> property list (Info.plist) on macOS. This came from Apple in 7u4 
>>>> and periodically things show up that are using it, e.g. that recent 
>>>> breakage with Eclipse that was never fully diagnosed but we think 
>>>> it was using Info.plist.
>>> The latest patch, as suggested, will not modify JLI, but instead fix 
>>> the broken behaviour of JDWP on Windows 32.
>> Yes, that's right.
>> However, I believe the previous versions did not modify libjli.
>> Regards,
>> Alexey
>>> /Magnus

More information about the core-libs-dev mailing list