Subject: [bug#41748] [PATCH 0/1] Fix JamVM to work with current gcc and glibc

From: Simon South <[email-masked]>
Date: Wed, 10 Jun 2020 11:03:39 -0400

Attached is an updated version of this patch that

- Adds a brief description to the patch it contains, indicating why it
  is necessary; and

- Updates gnu/local.mk, as is apparently now required.

-- 
Simon South
[email-masked]

>From 3dbc081418737b0901982f89b8eb260b6c8bd3f0 Mon Sep 17 00:00:00 2001
From: Simon South <[email-masked]>
Date: Sat, 6 Jun 2020 19:53:39 -0400
Subject: [PATCH] gnu: jamvm: Fix to work with current gcc and glibc.

* gnu/packages/java.scm (jamvm)[source]: Add patch.
(jamvm-1-bootstrap)[native-inputs]: Remove.
* gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/java.scm                         |  7 ++---
 .../jamvm-2.0.0-disable-branch-patching.patch | 31 +++++++++++++++++++
 3 files changed, 34 insertions(+), 5 deletions(-)
 create mode 100644 gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 76d6b5deba..7d65fbb605 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1107,6 +1107,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/irrlicht-use-system-libs.patch		\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
   %D%/packages/patches/jacal-fix-texinfo.patch			\
+  %D%/packages/patches/jamvm-2.0.0-disable-branch-patching.patch	\
   %D%/packages/patches/jamvm-arm.patch				\
   %D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch	\
   %D%/packages/patches/java-commons-collections-fix-java8.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 43f0f37b91..9a6f6fe0df 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -254,11 +254,6 @@ language.")
        ("libffi" ,libffi)
        ("zip" ,zip)
        ("zlib" ,zlib)))
-    ;; When built with a recent GCC and glibc the configure step of icedtea-6
-    ;; fails with an invalid instruction error.
-    (native-inputs
-     `(("gcc" ,gcc-5)
-       ("libc" ,glibc-2.28)))
     (home-page "http://jamvm.sourceforge.net/")
     (synopsis "Small Java Virtual Machine")
     (description "JamVM is a Java Virtual Machine conforming to the JVM
@@ -708,6 +703,8 @@ machine.")))
               (sha256
                (base32
                 "1nl0zxz8y5x8gwsrm7n32bry4dx8x70p8z3s9jbdvs8avyb8whkn"))
+              (patches
+               (search-patches "jamvm-2.0.0-disable-branch-patching.patch"))
               (snippet
                '(begin
                   ;; Remove precompiled software.
diff --git a/gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch b/gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch
new file mode 100644
index 0000000000..1352ed7803
--- /dev/null
+++ b/gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch
@@ -0,0 +1,31 @@
+From d80cfc83325f8e95d35ecd9f15b36b96fa9ed3ee Mon Sep 17 00:00:00 2001
+From: Simon South <[email-masked]>
+Date: Sat, 6 Jun 2020 18:56:56 -0400
+Subject: [PATCH] Disable branch-patching
+
+This patch disables JamVM's branch-patching optimization, which tends
+to make JamVM fail with an "Illegal instruction" error on x86_64 (and
+possibly other architectures that use variable-length instructions)
+when built using modern versions of gcc and glibc.
+---
+ src/init.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/init.c b/src/init.c
+index 32539cf..38ad54b 100644
+--- a/src/init.c
++++ b/src/init.c
+@@ -72,8 +72,8 @@ void setDefaultInitArgs(InitArgs *args) {
+ #ifdef INLINING
+     args->replication_threshold = 10;
+     args->profile_threshold     = 10;
+-    args->branch_patching_dup   = TRUE;
+-    args->branch_patching       = TRUE;
++    args->branch_patching_dup   = FALSE;
++    args->branch_patching       = FALSE;
+     args->print_codestats       = FALSE;
+     args->join_blocks           = TRUE;
+     args->profiling             = TRUE;
+-- 
+2.25.2
+
-- 
2.26.2