summaryrefslogtreecommitdiff
path: root/gnu/packages/java.scm
diff options
context:
space:
mode:
authorGuillaume Le Vaillant <glv@posteo.net>2021-09-13 14:37:40 +0200
committerGuillaume Le Vaillant <glv@posteo.net>2021-09-14 18:07:23 +0200
commitf8cff361245cc0c546211ff51100cbaf869d15eb (patch)
tree23462fd4167b28ccac110b9cb4059f5dac8f1889 /gnu/packages/java.scm
parent921595fa65db00aacb5dc3cceda89359e25322f4 (diff)
downloadguix-patches-f8cff361245cc0c546211ff51100cbaf869d15eb.tar
guix-patches-f8cff361245cc0c546211ff51100cbaf869d15eb.tar.gz
gnu: icedtea-6: Fix build.
* gnu/packages/java.scm (icedtea-6)[arguments]: Add 'fix-openjdk' phase.
Diffstat (limited to 'gnu/packages/java.scm')
-rw-r--r--gnu/packages/java.scm28
1 files changed, 28 insertions, 0 deletions
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 <vincent.legoll@gmail.com>
;;; Copyright © 2021 Mike Gerwitz <mtg@gnu.org>
;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;;
;;; 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 <sys/sysctl.h>")
+ "#include <linux/sysctl.h>"))
+ ;; 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