changeset 1054:b5b66d8e6014

* patches/icedtea-lucene-crash.patch: New patch. * Makefile.am (NON_ZERO_PATCHES): Add icedtea-lucene-crash.patch. * HACKING: Document icedtea-lucene-crash.patch.
author Mark Wielaard <mark@klomp.org>
date Thu, 25 Sep 2008 23:35:32 +0200
parents 09fccdb9f333
children f2f33bede67b
files ChangeLog HACKING Makefile.am patches/icedtea-lucene-crash.patch
diffstat 4 files changed, 75 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Sep 25 20:42:43 2008 +0200
+++ b/ChangeLog	Thu Sep 25 23:35:32 2008 +0200
@@ -1,4 +1,10 @@
-2008-08-28  Mark Wielaard  <mjw@redhat.com>
+2008-09-25  Mark Wielaard  <mark@klomp.org>
+
+	* patches/icedtea-lucene-crash.patch: New patch.
+	* Makefile.am (NON_ZERO_PATCHES): Add icedtea-lucene-crash.patch.
+	* HACKING: Document icedtea-lucene-crash.patch.
+
+2008-09-25  Mark Wielaard  <mjw@redhat.com>
 
 	* patches/icedtea-clean-crypto.patch: Cleaned up.
 	Remove unneeded classes JarVerifier and JceSecurityManager
--- a/HACKING	Thu Sep 25 20:42:43 2008 +0200
+++ b/HACKING	Thu Sep 25 23:35:32 2008 +0200
@@ -64,6 +64,7 @@
 
 * icedtea-sparc.patch: Add support for GNU/Linux on SPARC.
 * icedtea-jdk-docs-target.patch: Always set DOCS_TARGET.
+* icedtea-lucene-crash.patch: Fix lucene bad code generation bug #6707044.
 
 The following patches are only applied to OpenJDK in IcedTea:
 
--- a/Makefile.am	Thu Sep 25 20:42:43 2008 +0200
+++ b/Makefile.am	Thu Sep 25 23:35:32 2008 +0200
@@ -427,7 +427,9 @@
 	patches/icedtea-ia64-bugfix.patch
 
 # Patches needed when not using the newer OpenJDK 7 HotSpot for zero.
-NON_ZERO_PATCHES = patches/icedtea-signed-types-hot6.patch
+NON_ZERO_PATCHES = \
+	patches/icedtea-signed-types-hot6.patch \
+	patches/icedtea-lucene-crash.patch
 
 if ZERO_BUILD
   ZERO_PATCHES_COND = $(ZERO_PATCHES)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/icedtea-lucene-crash.patch	Thu Sep 25 23:35:32 2008 +0200
@@ -0,0 +1,64 @@
+diff -r 4aebfff4f8a2 hotspot/src/share/vm/opto/parse2.cpp
+--- openjdk.orig/hotspot/src/share/vm/opto/parse2.cpp	Mon Sep 15 11:38:34 2008 +0200
++++ openjdk/hotspot/src/share/vm/opto/parse2.cpp	Thu Sep 25 21:54:26 2008 +0200
+@@ -868,6 +868,8 @@
+   return prob < PROB_MIN;
+ }
+ 
++//-------------------------------repush_if_args--------------------------------
++// Push arguments of an "if" bytecode back onto the stack by adjusting _sp.
+ inline void Parse::repush_if_args() {
+ #ifndef PRODUCT
+   if (PrintOpto && WizardMode) {
+@@ -896,7 +898,6 @@
+     if (PrintOpto && Verbose)
+       tty->print_cr("Never-taken backedge stops compilation at bci %d",bci());
+ #endif
+-    repush_if_args(); // to gather stats on loop
+     uncommon_trap(Deoptimization::Reason_unreached,
+                   Deoptimization::Action_reinterpret,
+                   NULL, "cold");
+diff -r 51798f0e554f test/compiler/6707044/LuceneCrash.java
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ openjdk/hotspot/test/compiler/6707044/LuceneCrash.java	Thu Sep 25 21:55:28 2008 +0200
+@@ -0,0 +1,40 @@
++/*
++ * @test
++ * @bug 6707044
++ * @summary uncommon_trap of ifnull bytecode leaves garbage on expression stack
++ * @run main/othervm -Xbatch LuceneCrash
++ */
++public class LuceneCrash {
++
++  public static void main(String[] args) throws Throwable {
++    new LuceneCrash().crash();
++  }
++
++  private Object alwaysNull;
++
++  final void crash() throws Throwable {
++    for (int r = 0; r < 3; r++) {
++      for (int docNum = 0; docNum < 10000;) {
++        if (r < 2) {
++          for(int j=0;j<3000;j++)
++            docNum++;
++        } else {
++          docNum++;
++          doNothing(getNothing());
++          if (alwaysNull != null) {
++            throw new RuntimeException("BUG: checkAbort is always null: r=" + r + " of 3; docNum=" + docNum);
++          }
++        }
++      }
++    }
++  }
++
++  Object getNothing() {
++    return this;
++  }
++
++  int x;
++  void doNothing(Object o) {
++    x++;
++  }
++}