On 2018-04-25 11:06, Aleksey Shipilev wrote:
Hi,
I was doing the exercise of cross-compiling from x86_64 to most OpenJDK arches,
and we have
discovered the bug with endianness. Right now, compiling big-endian s390x
target on little-endian
x86_64 host produces the modules blob that cannot be read on real s390x.
It seems to be a simple overlook in image building, and we should pass
target-cpu endianness to
jlink. During the build, jlink is called twice: first for the interim image
build, then for the
final image build. In cross-compilation, it seems only the final image build
should take target-cpu
endianness.
(Aside: what is our backporting policy for build system bugs? Would love to
make the jdk10 backport
for this)
The rules are the same as for all backports. Build system is no different.
Bug:
https://bugs.openjdk.java.net/browse/JDK-8202210
Fix:
diff -r 5d2da44780ac make/Images.gmk
--- a/make/Images.gmk Wed Apr 25 10:38:07 2018 +0200
+++ b/make/Images.gmk Wed Apr 25 10:55:04 2018 +0200
@@ -117,7 +117,7 @@
JLINK_TOOL := $(JLINK) -J-Djlink.debug=true \
--module-path $(IMAGES_OUTPUTDIR)/jmods \
- --endian $(OPENJDK_BUILD_CPU_ENDIAN) \
+ --endian $(OPENJDK_TARGET_CPU_ENDIAN) \
--release-info $(BASE_RELEASE_FILE) \
--order-resources=$(call CommaList, $(JLINK_ORDER_RESOURCES)) \
--dedup-legal-notices=error-if-not-same-content \
Testing: x86_64 build, s390x cross-compiled build
Looks good to me.
/Magnus
Thanks,
-Aleksey