changeset 2291:63366753f9ba

7002666: Eclipse CDT projects crash with compressed oops 2010-12-01 Andrew John Hughes <ahughes@redhat.com> * patches/disable-default-compoops.patch: Removed. * Makefile.am: Replace disable compressed oops workaround with proper fix for 7002666. * patches/openjdk/7002666-eclipse_cdt_oops_crash.patch: Backport of 7002666: Eclipse CDT projects crash with compressed oops * NEWS: Updated.
author Andrew John Hughes <ahughes@redhat.com>
date Wed, 01 Dec 2010 18:41:42 +0000
parents fb7722abad72
children 16d45ce7afaf
files ChangeLog Makefile.am NEWS patches/disable-default-compoops.patch patches/openjdk/7002666-eclipse_cdt_oops_crash.patch
diffstat 5 files changed, 94 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Nov 29 15:56:43 2010 +0100
+++ b/ChangeLog	Wed Dec 01 18:41:42 2010 +0000
@@ -1,10 +1,20 @@
-2010-11-29  Matthias Klose  <doko@ubuntu.com>
+2010-12-01  Andrew John Hughes  <ahughes@redhat.com>
 
 	* patches/hotspot/hs19/ia64-fix.patch: Reapply chunk from
 	patches/zero/6896043.patch.
 
 2010-11-29  Matthias Klose  <doko@ubuntu.com>
 
+	* patches/disable-default-compoops.patch: Removed.
+	* Makefile.am: Replace disable compressed oops workaround
+	with proper fix for 7002666.
+	* patches/openjdk/7002666-eclipse_cdt_oops_crash.patch:
+	Backport of 7002666: Eclipse CDT projects crash with
+	compressed oops
+	* NEWS: Updated.
+
+2010-11-29  Matthias Klose  <doko@ubuntu.com>
+
 	* patches/hotspot/hs19/params-cast-size_t.patch: Update for hs19.
 
 2010-11-24  Andrew John Hughes  <ahughes@redhat.com>
--- a/Makefile.am	Mon Nov 29 15:56:43 2010 +0100
+++ b/Makefile.am	Wed Dec 01 18:41:42 2010 +0000
@@ -321,7 +321,7 @@
 if WITH_ALT_HSBUILD
 ICEDTEA_PATCHES += \
 	patches/openjdk/6994130-ppc_fix.patch \
-	patches/disable-default-compoops.patch \
+	patches/openjdk/7002666-eclipse_cdt_oops_crash.patch \
 	patches/hotspot/hs19/ia64-fix.patch
 else
 ICEDTEA_PATCHES += \
--- a/NEWS	Mon Nov 29 15:56:43 2010 +0100
+++ b/NEWS	Wed Dec 01 18:41:42 2010 +0000
@@ -10,6 +10,9 @@
 
 New in release 1.9.3 (201X-XX-XX):
 
+* Backports
+  - S7002666: Eclipse CDT projects crash with compressed oops
+
 New in release 1.9.2 (2010-11-24):
 
 * Upgrade to latest revision of hs19 (b09).
--- a/patches/disable-default-compoops.patch	Mon Nov 29 15:56:43 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
---- openjdk.orig/hotspot/src/share/vm/runtime/arguments.cpp    2010-11-08 23:50:59.000000000 -0500
-+++ openjdk/hotspot/src/share/vm/runtime/arguments.cpp        2010-11-08 23:52:53.000000000 -0500
-@@ -1301,7 +1301,8 @@ void Arguments::set_ergonomics_flags() {
-   if (MaxHeapSize <= max_heap_for_compressed_oops()) {
- #ifndef COMPILER1
-     if (FLAG_IS_DEFAULT(UseCompressedOops) && !UseG1GC) {
--      FLAG_SET_ERGO(bool, UseCompressedOops, true);
-+      // Temporarily fix rhbz#647737 -- disable compressed oops by default
-+      //FLAG_SET_ERGO(bool, UseCompressedOops, true);
-     }
- #endif
- #ifdef _WIN64
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7002666-eclipse_cdt_oops_crash.patch	Wed Dec 01 18:41:42 2010 +0000
@@ -0,0 +1,79 @@
+--- openjdk.orig/hotspot/src/share/vm/opto/memnode.cpp	Tue Nov 30 11:47:17 2010
++++ openjdk/hotspot/src/share/vm/opto/memnode.cpp	Tue Nov 30 11:47:17 2010
+@@ -3599,10 +3599,12 @@
+     intptr_t size_limit = phase->find_intptr_t_con(size_in_bytes, max_jint);
+     if (zeroes_done + BytesPerLong >= size_limit) {
+       assert(allocation() != NULL, "");
+-      Node* klass_node = allocation()->in(AllocateNode::KlassNode);
+-      ciKlass* k = phase->type(klass_node)->is_klassptr()->klass();
+-      if (zeroes_done == k->layout_helper())
+-        zeroes_done = size_limit;
++      if (allocation()->Opcode() == Op_Allocate) {
++        Node* klass_node = allocation()->in(AllocateNode::KlassNode);
++        ciKlass* k = phase->type(klass_node)->is_klassptr()->klass();
++        if (zeroes_done == k->layout_helper())
++          zeroes_done = size_limit;
++      }
+     }
+     if (zeroes_done < size_limit) {
+       rawmem = ClearArrayNode::clear_memory(rawctl, rawmem, rawptr,
+--- /dev/null	Tue Nov 30 11:47:18 2010
++++ openjdk/hotspot/test/compiler/7002666/Test7002666.java	Tue Nov 30 11:47:17 2010
+@@ -0,0 +1,57 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ *
++ */
++
++/**
++ * @test
++ * @bug 7002666
++ * @summary eclipse CDT projects crash with compressed oops
++ *
++ * @run main/othervm -Xbatch -XX:CompileOnly=Test7002666.test,java/lang/reflect/Array Test7002666
++ *
++ * This will only reliably fail with a fastdebug build since it relies
++ * on seeing garbage in the heap to die.  It could be made more
++ * reliable in product mode but that would require greatly increasing
++ * the runtime.
++ */
++
++public class Test7002666 {
++    public static void main(String[] args) {
++        for (int i = 0; i < 25000; i++) {
++            Object[] a = test(Test7002666.class, new Test7002666());
++            if (a[0] != null) {
++                // The element should be null but if it's not then
++                // we've hit the bug.  This will most likely crash but
++                // at least throw an exception.
++                System.err.println(a[0]);
++                throw new InternalError(a[0].toString());
++                
++            }
++        }
++    }
++    public static Object[] test(Class c, Object o) {
++        // allocate an array small enough to be trigger the bug
++        Object[] a = (Object[])java.lang.reflect.Array.newInstance(c, 1);
++        return a;
++    }
++}