RFR:

Erik Helin erik.helin at oracle.com
Mon Feb 10 07:08:42 PST 2014


Hi all,

this patch fixes an issue with HotSpot's makefiles, IMPORT_JDK and jni_md.h.

The bug manifests itself when using an IMPORT_JDK which
include/linux/jni_md.h has a timestamp that is older than
hotspot/src/cpu/x86/jni_x86.h. When this happens, the Makefiles will 
copy hotspot/src/cpu/x86/jni_x86.h to
hotspot/build/jdk-linux-amd64/fastdebug/include/linux/jni_md.h.

The issue is that hotspot/src/cpu/x86/jni_x86.h differs slightly from 
jdk/include/jni.h, since it is used for all operating systems:

#if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)
... // common stuff
#else
... // windows stuff
#endif

We compile the SA agent, see make/linux/makefiles/saproc.make, without 
defining LINUX (LINUX is hotspot's own define, gcc uses __linux__).

In my opinion, there are two ways to solve this:
1. Add -DLINUX to make/linux/makefiles/saproc.make (and corresponding
    defines for Solaris and BSD).
2. Rewrite the #if check in jni_x86.h to use platform specific "native"
    defines.

I've created a patch for each alternative:
1: http://cr.openjdk.java.net/~ehelin/8034094/webrev.1/
2: http://cr.openjdk.java.net/~ehelin/8034094/webrev.2/

For the second patch, note that I've inverted the #if check so that it 
checks for _WIN32 is defined and treat all others operating systems as 
"#else".

Bug:
https://bugs.openjdk.java.net/browse/JDK-8034094

Testing:
- Compiled both version locally and made sure it worked
- JPRT

Thanks,
Erik


More information about the hotspot-dev mailing list