# HG changeset patch # User Mark Wielaard # Date 1222378532 -7200 # Node ID b5b66d8e6014f37de1e906e0580a78cf40e7fe6c # Parent 09fccdb9f33317081e39a3cd73258c35d2611193 * patches/icedtea-lucene-crash.patch: New patch. * Makefile.am (NON_ZERO_PATCHES): Add icedtea-lucene-crash.patch. * HACKING: Document icedtea-lucene-crash.patch. diff -r 09fccdb9f333 -r b5b66d8e6014 ChangeLog --- 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 +2008-09-25 Mark Wielaard + + * 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 * patches/icedtea-clean-crypto.patch: Cleaned up. Remove unneeded classes JarVerifier and JceSecurityManager diff -r 09fccdb9f333 -r b5b66d8e6014 HACKING --- 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: diff -r 09fccdb9f333 -r b5b66d8e6014 Makefile.am --- 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) diff -r 09fccdb9f333 -r b5b66d8e6014 patches/icedtea-lucene-crash.patch --- /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++; ++ } ++}