[oe] [meta-java][PATCH] icedtea7-native: Fix memory leak when compiled with GCC 5.0+

Erkka Kääriä erkka.kaaria at intel.com
Fri Oct 23 09:50:01 UTC 2015


Upstream-Status: Backport

Hotspot compiler has a bug where signed integers could overflow. This is
undefined behaviour, and causes massive memory leak when compiled with GCC 5.0+,
causing the build to fail.

This is fixed by backporting patch from
https://bugs.openjdk.java.net/browse/JDK-8078666 where it was fixed by
Severin Gehwolf.

Signed-off-by: Erkka Kääriä <erkka.kaaria at intel.com>
---
 .../icedtea-hotspot-fix-undefined-behaviour.patch  | 49 ++++++++++++++++++++++
 recipes-core/icedtea/openjdk-7-release-03b147.inc  |  2 +
 2 files changed, 51 insertions(+)
 create mode 100644 recipes-core/icedtea/openjdk-7-03b147/icedtea-hotspot-fix-undefined-behaviour.patch

diff --git a/recipes-core/icedtea/openjdk-7-03b147/icedtea-hotspot-fix-undefined-behaviour.patch b/recipes-core/icedtea/openjdk-7-03b147/icedtea-hotspot-fix-undefined-behaviour.patch
new file mode 100644
index 0000000..56513a0
--- /dev/null
+++ b/recipes-core/icedtea/openjdk-7-03b147/icedtea-hotspot-fix-undefined-behaviour.patch
@@ -0,0 +1,49 @@
+Upstream-Status: Backport
+
+Hotspot compiler has a bug where signed integers could overflow. This is 
+undefined behaviour, and causes massive memory leak when compiled with GCC 5.0+, 
+causing the build to fail.
+
+This is fixed by backporting patch from 
+https://bugs.openjdk.java.net/browse/JDK-8078666 where it was fixed by 
+Severin Gehwolf.
+
+Signed-off-by: Erkka Kääriä <erkka.kaaria at intel.com>
+
+--- openjdk/hotspot/src/share/vm/opto/type.cpp
++++ openjdk/hotspot/src/share/vm/opto/type.cpp
+@@ -1077,11 +1077,11 @@ static int normalize_int_widen( jint lo, jint hi, int w ) {
+   // Certain normalizations keep us sane when comparing types.
+   // The 'SMALLINT' covers constants and also CC and its relatives.
+   if (lo <= hi) {
+-    if ((juint)(hi - lo) <= SMALLINT)  w = Type::WidenMin;
+-    if ((juint)(hi - lo) >= max_juint) w = Type::WidenMax; // TypeInt::INT
++    if (((juint)hi - lo) <= SMALLINT)  w = Type::WidenMin;
++    if (((juint)hi - lo) >= max_juint) w = Type::WidenMax; // TypeInt::INT
+   } else {
+-    if ((juint)(lo - hi) <= SMALLINT)  w = Type::WidenMin;
+-    if ((juint)(lo - hi) >= max_juint) w = Type::WidenMin; // dual TypeInt::INT
++    if (((juint)lo - hi) <= SMALLINT)  w = Type::WidenMin;
++    if (((juint)lo - hi) >= max_juint) w = Type::WidenMin; // dual TypeInt::INT  
+   }
+   return w;
+ }
+@@ -1332,11 +1332,11 @@ static int normalize_long_widen( jlong lo, jlong hi, int w ) {
+   // Certain normalizations keep us sane when comparing types.
+   // The 'SMALLINT' covers constants.
+   if (lo <= hi) {
+-    if ((julong)(hi - lo) <= SMALLINT)   w = Type::WidenMin;
+-    if ((julong)(hi - lo) >= max_julong) w = Type::WidenMax; // TypeLong::LONG
++    if (((julong)hi - lo) <= SMALLINT)   w = Type::WidenMin;
++    if (((julong)hi - lo) >= max_julong) w = Type::WidenMax; // TypeLong::LONG  
+   } else {
+-    if ((julong)(lo - hi) <= SMALLINT)   w = Type::WidenMin;
+-    if ((julong)(lo - hi) >= max_julong) w = Type::WidenMin; // dual TypeLong::LONG
++    if (((julong)lo - hi) <= SMALLINT)   w = Type::WidenMin;
++    if (((julong)lo - hi) >= max_julong) w = Type::WidenMin; // dual TypeLong::LONG
+   }
+   return w;
+ }
+-- 
+2.1.4
+
diff --git a/recipes-core/icedtea/openjdk-7-release-03b147.inc b/recipes-core/icedtea/openjdk-7-release-03b147.inc
index 98266f7..b1cf6e9 100644
--- a/recipes-core/icedtea/openjdk-7-release-03b147.inc
+++ b/recipes-core/icedtea/openjdk-7-release-03b147.inc
@@ -84,6 +84,7 @@ OPENJDK_PATCHES = " \
 	file://icedtea-change-to-gdb-debug-format.patch;apply=no \
 	file://icedtea-disable-x11-in-headless.patch;apply=no \
 	file://icedtea-disable-sun.applet-for-tools-in-headless.patch;apply=no \
+	file://icedtea-hotspot-fix-undefined-behaviour.patch;apply=no \
         "
 
 OPENJDK_HEADLESS_PATCHES = " \
@@ -102,5 +103,6 @@ export DISTRIBUTION_PATCHES = " \
 	patches/icedtea-flags.patch \
 	patches/icedtea-openjdk-remove-currency-data-generation-expi.patch \
 	patches/icedtea-change-to-gdb-debug-format.patch \
+	patches/icedtea-hotspot-fix-undefined-behaviour.patch \
 	${CLEAN_X11_DISTRIBUTION_PATCH} \
         "
-- 
2.1.4

---------------------------------------------------------------------
Intel Finland Oy
Registered Address: PL 281, 00181 Helsinki 
Business Identity Code: 0357606 - 4 
Domiciled in Helsinki 

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.


More information about the Openembedded-devel mailing list