RFR(S): 8220348: [ntintel] asserts about copying unalinged array
martin.doerr at sap.com
Thu Dec 5 10:59:59 UTC 2019
Hi Thomas and Christoph,
thanks for the reviews.
Other code in java.security.jgss also uses these #defined checks:
src/java.security.jgss/share/native/libj2gss/gssapi.h:#if defined (_WIN32) && defined (_MSC_VER)
I’d like to have it consistent with that.
@Christoph: I think having ATTRIBUTE_ALIGNED(x) would be nice. It could get defined easily for Visual Studio and GCC, but some other compilers may be more difficult. Note that this macro is only defined for a selected set of compilers in hotspot. If we wanted to add it, where should we define it?
Windows 32 bit seems to be the only platform which is affected by the problem that jlongs on stack are not 8 byte aligned.
(AFAIK, GCC uses -malign-double by default on 32 bit which should do the job for jlongs, too:
From: Thomas Stüfe <thomas.stuefe at gmail.com>
Sent: Mittwoch, 4. Dezember 2019 17:56
To: Doerr, Martin <martin.doerr at sap.com>
Cc: core-libs-dev at openjdk.java.net; security-dev <security-dev at openjdk.java.net>; Lindenmaier, Goetz <goetz.lindenmaier at sap.com>
Subject: Re: RFR(S): 8220348: [ntintel] asserts about copying unalinged array
this makes sense. This is the right way to force alignment. I do not like the platform code in the shared file but do not think this is a big deal.
+#if defined (_WIN32) && defined (_MSC_VER)
Why do you think we need _MSC_VER too? Is OpenJDK on Windows even buildable with anything other than VC++?
On Mon, Dec 2, 2019 at 4:14 PM Doerr, Martin <martin.doerr at sap.com<mailto:martin.doerr at sap.com>> wrote:
I'd like to propose a fix for an old issue on 32 bit Windows (also for an 11u backport):
Some jdk native methods use jni_SetLongArrayRegion with a stack allocated buffer.
jni_SetLongArrayRegion uses Copy::conjoint_jlongs_atomic which requires jlongs to be 8 byte aligned (asserted).
However, Windows 32 bit only uses 4 byte alignment for jlong arrays by default.
I found such issues in the following files:
I suggest to use __declspec(align(8)) there.
I think using 8 byte alignment is not a disadvantage for 64 bit.
I guess there are still people interested in this platform with jdk14. Otherwise I could contribute it as 11u only fix.
Is there a better way to force 8 byte alignment for jlongs or jlong arrays on stack?
More information about the core-libs-dev