From f8cff361245cc0c546211ff51100cbaf869d15eb Mon Sep 17 00:00:00 2001 From: Guillaume Le Vaillant Date: Mon, 13 Sep 2021 14:37:40 +0200 Subject: [PATCH] gnu: icedtea-6: Fix build. * gnu/packages/java.scm (icedtea-6)[arguments]: Add 'fix-openjdk' phase. --- gnu/packages/java.scm | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index 51fc5c60a1..c803a17d34 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -17,6 +17,7 @@ ;;; Copyright © 2021 Vincent Legoll ;;; Copyright © 2021 Mike Gerwitz ;;; Copyright © 2021 Pierre Langlois +;;; Copyright © 2021 Guillaume Le Vaillant ;;; ;;; This file is part of GNU Guix. ;;; @@ -907,6 +908,33 @@ machine."))) "patches/hotspot/hs23/drop_unlicensed_test.patch") (("#!/bin/sh") (string-append "#!" (which "sh")))) #t)) + (add-after 'unpack 'fix-openjdk + (lambda _ + (substitute* "openjdk/jdk/make/common/Defs-linux.gmk" + (("CFLAGS_COMMON = -fno-strict-aliasing" all) + (string-append all " -fcommon"))) + (substitute* "openjdk/hotspot/src/share/vm/code/relocInfo.hpp" + (("inline friend relocInfo prefix_relocInfo\\(int datalen = 0\\);") + "inline friend relocInfo prefix_relocInfo(int datalen);")) + (substitute* + '("openjdk/jdk/src/solaris/native/java/net/PlainSocketImpl.c" + "openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c") + (("#include ") + "#include ")) + ;; It looks like the "h = 31 * h + c" line of the jsum() + ;; function gets miscompiled. After a few iterations of the loop + ;; the result of "31 * h" is always 0x8000000000000000. + ;; Bad optimization maybe... + ;; Transform "31 * h + c" into a convoluted "32 * h + c - h" + ;; as a workaround. + (substitute* "openjdk/hotspot/src/share/vm/memory/dump.cpp" + (("h = 31 \\* h \\+ c;") + "jlong h0 = h;\nfor(int i = 0; i < 5; i++) h += h;\nh += c - h0;")) + ;; Our gcc version is higher than 4.3; replace the failing + ;; expression to test this by its result. + (substitute* "openjdk/jdk/make/sun/font/Makefile" + (("\"\\$\\(shell expr.*0\"") + "\"1\" \"0\"")))) (add-after 'unpack 'patch-paths (lambda* (#:key inputs #:allow-other-keys) ;; buildtree.make generates shell scripts, so we need to replace