changeset 2638:15ee0af0207b

Merge
author Andrew John Hughes <ahughes@redhat.com>
date Wed, 30 Mar 2011 23:14:30 +0100
parents b3627e530d7c (current diff) 44dde878b860 (diff)
children bef042dcbb2a
files ChangeLog Makefile.am patches/cacao/arm-arch-defines.patch patches/cacao/ignore-unknown-options.patch
diffstat 15 files changed, 1252 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Mar 09 23:47:23 2011 +0000
+++ b/ChangeLog	Wed Mar 30 23:14:30 2011 +0100
@@ -1,3 +1,161 @@
+2011-03-29  Pavel Tisnovsky  <ptisnovs@redhat.com>
+
+	* Makefile.am: Add new patch.
+	* patches/revert-6885123.patch:
+	Patch which fixes the behaviour of JavaFileManager
+	and JavaFileObject classes. This patch also contains
+	regression test for check if the fix is correct.
+
+2011-03-29  Andrew John Hughes  <ahughes@redhat.com>
+
+	* INSTALL: Update test documentation.
+	* NEWS: Cleanup.
+
+2011-03-28  Andrew John Hughes  <ahughes@redhat.com>
+	Patch contributed by: Alexis Ballier <aballier@gentoo.org>
+
+	* Makefile.am: Add patch.
+	* THANKYOU: List Alexis.
+	* NEWS: Updated.
+	* patches/g356743-libpng-1.5.patch:
+	Patch to build against libpng 1.5.
+
+2011-03-26  Xerxes Ranby  <xerxes@zafena.se>
+
+	JamVM: Handle overflow in getPhysicalMemory().
+	* NEWS: Updated.
+	* Makefile.am
+	(JAMVM_VERSION): Updated to latest JamVM revision.
+	(JAMVM_SHA256SUM): Updated.
+
+2011-03-25  Pavel Tisnovsky  <ptisnovs@redhat.com>
+
+	* Makefile.am: Add new patch.
+	* NEWS: Updated (added info about new fix).
+	* patches/mark_sun_toolkit_privileged_code.patch:
+	Patch which fixes the AccessControlException while
+	working with Color class in a PropertyEditor
+
+2011-03-24  Omair Majid  <omajid@redhat.com>
+
+	* patches/openjdk/6768387-jtable_not_serializable.patch: Fix path in patch
+	so the test is added to openjdk/test.
+
+2011-03-24  Omair Majid  <omajid@redhat.com>
+
+	S6768387, PR670: REGRESSION: JTable no longer serializable
+	* NEWS: Add backport.
+	* Makefile.am (ICEDTEA_PATCHES): Add new patch.
+	* patches/openjdk/6768387-jtable_not_serializable.patch: New file.
+
+2011-03-24  Xerxes Ranby  <xerxes@zafena.se>
+
+	JamVM: Base default min and max heap size on physical memory.
+	* NEWS: Updated.
+	* Makefile.am
+	(JAMVM_VERSION): Updated to latest JamVM revision.
+	(JAMVM_SHA256SUM): Updated.
+
+2011-03-23  Andrew John Hughes  <ahughes@redhat.com>
+
+	* hotspot.map:
+	Bump to hs20 b11.
+
+2011-03-21  Xerxes Ranby  <xerxes@zafena.se>
+
+	JamVM: Fix reflective array access.
+	* NEWS: Updated.
+	* Makefile.am
+	(JAMVM_VERSION): Updated to latest JamVM revision.
+	(JAMVM_SHA256SUM): Updated.
+
+2011-03-17  Xerxes Ranby  <xerxes@zafena.se>
+
+	CACAO: Update to latest CACAO revision and remove upstreamed pathes.
+	Update contains the following new CACAO improvements:
+	Fixes build for newer gcc (at least 4.4) on PPC64, breaks older gcc.
+	CA123: LD_LIBRARY_PATH and java.library.path.
+	CA143: don't hang with invalid locale.
+	CA144: aligned patchers on x86_64.
+	CA148: support for LCMP bytecode.
+	CA152: Calling Policy.setPolicy with a new Policy object
+	has no effect on the DefaultSecurityManager.
+	CA156: uncaughtExceptionHandler doesn't work with OpenJDK 6 b21.
+	* NEWS: Updated.
+	* Makefile.am: Remove upstreamed CACAO patches.
+	(CACAO_VERSION): Updated to latest CACAO revision.
+	(CACAO_SHA256SUM): Updated.
+	* patches/cacao/arm-arch-defines.patch: Deleted.
+	* patches/cacao/arm-memory-barrier.patch: Deleted.
+	* patches/cacao/ignore-unknown-options.patch: Deleted.
+
+2011-03-17  Xerxes Ranby  <xerxes@zafena.se>
+
+	JamVM: Update to latest JamVM revision and remove upstreamed pathes.
+	Update contains the following new JamVM improvements:
+	Handle O_DELETE in JVM_Open
+	Minor performance improvement on ARM
+	First set of changes to support JamVM/OpenJDK on MacOS X
+	Minor memory leak (missing free)
+	Handle integer overflow on i386/amd64
+	* NEWS: Updated.
+	* Makefile.am: Remove upstreamed JamVM patches.
+	(JAMVM_VERSION): Updated to latest JamVM revision.
+	(JAMVM_SHA256SUM): Updated.
+	* patches/jamvm/arm-interp_cflags-marm.patch: Deleted.
+	* patches/jamvm/mips64el.patch: Deleted.
+
+2011-03-16  Denis Lila  <dlila@redhat.com>
+
+	* patches/openjdk/7027667-AAShapePipeRegTest.patch:
+	Removed comma from the bug tag of the regression test.
+
+2011-03-16  Denis Lila  <dlila@redhat.com>
+
+	* Makefile.am: Add patch.
+	* patches/openjdk/7019861-AA-regression-fix.patch:
+	Backport.
+	* NEWS:
+	Updated with backport.
+
+2011-03-16  Denis Lila  <dlila@redhat.com>
+
+	* Makefile.am: Add patches.
+	* patches/openjdk/7027667-AAShapePipeRegTest.patch:
+	Backport.
+	* patches/openjdk/7023591-AAShapePipe.patch:
+	Backport.
+	* NEWS:
+	Updated with backports.
+
+2011-03-16  Pavel Tisnovsky  <ptisnovs@redhat.com>
+
+	* Makefile.am: Fixed tests at the end in check-* targets to work
+	correctly in Dash and various versions of Bash.
+
+2011-03-13  Xerxes Ranby  <xerxes@zafena.se>
+	    Robert Loughter  <rob@jamvm.org.uk>
+
+	JamVM: Compile interp using -marm to work on ARM Thumb2 systems.
+	* Makefile.am: Add new JamVM patch.
+	* patches/jamvm/arm-interp_cflags-marm.patch: New patch.
+
+2011-03-11  Xerxes Ranby  <xerxes@zafena.se>
+
+	JamVM: mips
+	* NEWS: Updated.
+	* Makefile.am: Add new JamVM patch.
+	(JAMVM_VERSION): Updated to latest JamVM revision.
+	(JAMVM_SHA256SUM): Updated.
+	* patches/jamvm/mips64el.patch: New patch.
+
+2011-03-11  Xerxes Ranby  <xerxes@zafena.se>
+
+	CACAO PR157: ARM SMP Assertion thinlock failed.
+	* NEWS: Updated.
+	* Makefile.am: Add new CACAO patch.
+	* patches/cacao/arm-memory-barrier.patch: New patch.
+
 2011-03-09  Pavel Tisnovsky  <ptisnovs@redhat.com>
 
 	* Makefile.am: Add new patch.
--- a/INSTALL	Wed Mar 09 23:47:23 2011 +0000
+++ b/INSTALL	Wed Mar 30 23:14:30 2011 +0100
@@ -180,9 +180,12 @@
 
 IcedTea6 includes support for running the test suite included with
 OpenJDK, using the in-tree copy of JTReg.  Invoking 'make check' will
-cause the HotSpot, JDK and langtools test suites to be run.  The
-individual test suites may be run using the check-hotspot, check-jdk
-and check-langtools targets respectively.
+cause the HotSpot, JDK and langtools test suites to be run.  It will
+exit with an error code if a regression test fails, so use 'make check
+-k' if you want to run all three test suites, regardless of if
+failures occur in one.  The individual test suites may be run using
+the check-hotspot, check-jdk and check-langtools targets respectively,
+or by setting jtreg_checks e.g. jtreg_checks="langtools hotspot".
 
 The PulseAudio provider
 =======================
--- a/Makefile.am	Wed Mar 09 23:47:23 2011 +0000
+++ b/Makefile.am	Wed Mar 30 23:14:30 2011 +0100
@@ -5,14 +5,14 @@
 OPENJDK_VERSION = b23
 OPENJDK_URL = http://download.java.net/openjdk/jdk6/promoted/$(OPENJDK_VERSION)/
 
-CACAO_VERSION = 6a5eda011e49
-CACAO_SHA256SUM = 57f3abd73688cb8861875e2f21be9ec8a0c7c234e1e694489e3efa4436e9228c
+CACAO_VERSION = c7bf150bfa46
+CACAO_SHA256SUM = 73629f5ac9514afbcf63b6cdf58556e889a5f6a22d4bd70de1dd2816c6500aee
 CACAO_BASE_URL = http://icedtea.classpath.org/download/drops/cacao
 CACAO_URL = $(CACAO_BASE_URL)/$(CACAO_VERSION).tar.gz
 CACAO_SRC_ZIP = cacao-$(CACAO_VERSION).tar.gz
 
-JAMVM_VERSION = 30c4a6b93ffa385833360921bfc613829fb081c9
-JAMVM_SHA256SUM = e77434a7d02d75de7fe44e9e1d7d6a3fd7ddcd5447ddd175fde2a7ccb40f8838
+JAMVM_VERSION = a95ca049d3bb257d730535a5d5ec3f73a943d0aa
+JAMVM_SHA256SUM = 18bb5c97c03fb73f70b481440e3e11803448d327c024d4570a338b899693fefd
 JAMVM_BASE_URL = http://icedtea.classpath.org/download/drops/jamvm
 JAMVM_URL = $(JAMVM_BASE_URL)/jamvm-$(JAMVM_VERSION).tar.gz
 JAMVM_SRC_ZIP = jamvm-$(JAMVM_VERSION).tar.gz
@@ -326,7 +326,14 @@
 	patches/openjdk/6934977-MappedByteBuffer.load.patch \
 	patches/jaxp-serial-version-uid.patch \
 	patches/jtreg-hotspot-bug-6196102.patch \
-	patches/jtreg-double-to-string.patch
+	patches/jtreg-double-to-string.patch \
+	patches/openjdk/7023591-AAShapePipe.patch \
+	patches/openjdk/7027667-AAShapePipeRegTest.patch \
+	patches/openjdk/7019861-AA-regression-fix.patch \
+	patches/openjdk/6768387-jtable_not_serializable.patch \
+	patches/mark_sun_toolkit_privileged_code.patch \
+	patches/g356743-libpng-1.5.patch \
+	patches/revert-6885123.patch
 
 if WITH_ALT_HSBUILD
 ICEDTEA_PATCHES += \
@@ -349,10 +356,8 @@
 if BUILD_CACAO
 ICEDTEA_PATCHES += \
 	patches/cacao/launcher.patch \
-	patches/cacao/arm-arch-defines.patch \
 	patches/cacao/jsig.patch \
-	patches/cacao/memory.patch \
-	patches/cacao/ignore-unknown-options.patch
+	patches/cacao/memory.patch
 endif
 
 if ENABLE_CACAO
@@ -2075,7 +2080,7 @@
 		$(ICEDTEA_JTREG_OPTIONS) \
 		`pwd`/openjdk/hotspot/test \
 	    | tee test/$@.log
-	test -z `grep "^Error:\|^FAILED:" test/$@.log`
+	test -z `grep \"^Error:\|^FAILED:\" test/$@.log`
 
 check-langtools: stamps/jtreg.stamp
 	mkdir -p test/langtools/JTwork test/langtools/JTreport
@@ -2086,7 +2091,7 @@
 		$(ICEDTEA_JTREG_OPTIONS) \
 		`pwd`/openjdk/langtools/test \
 	    | tee test/$@.log
-	test -z `grep "^Error:\|^FAILED:" test/$@.log`
+	test -z `grep \"^Error:\|^FAILED:\" test/$@.log`
 
 check-jdk: stamps/jtreg.stamp
 	mkdir -p test/jdk/JTwork test/jdk/JTreport
@@ -2103,7 +2108,7 @@
 		$(ICEDTEA_JTREG_OPTIONS) \
 		`pwd`/openjdk/jdk/test \
 	    | tee test/$@.log
-	test -z `grep "^Error:\|^FAILED:" test/$@.log`
+	test -z `grep \"^Error:\|^FAILED:\" test/$@.log`
 
 clean-jtreg-reports:
 	rm -rf test/hotspot test/langtools test/jdk
--- a/NEWS	Wed Mar 09 23:47:23 2011 +0000
+++ b/NEWS	Wed Mar 30 23:14:30 2011 +0100
@@ -5,19 +5,45 @@
 RHX - https://bugzilla.redhat.com/show_bug.cgi?id=X
 DX  - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=X
 GX  - http://bugs.gentoo.org/show_bug.cgi?id=X
+CAX - http://server.complang.tuwien.ac.at/cgi-bin/bugzilla/show_bug.cgi?id=X
 
 CVE-XXXX-YYYY: http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=XXXX-YYYY
 
 New in release 1.11 (2011-XX-XX):
 
 * Use HotSpot 20 as the default virtual machine.
+* Backports
+  - S7023591, S7027667: Clipped antialiased rectangles are filled, not drawn.
+  - S7019861: Last scanline skpped when doing AA.
+  - S6768387, PR670: REGRESSION: JTable no longer serializable
+  - Add missing privileged block around access to the sun.awt.nativedebug property.
 * Bug fixes
-  - PR637: make check should exit with an error code if any of regression test
-    failed. Use make check -k if you want to run all three test suites. And it
-    is now also possible to run individual jtreg testsuite (jdk,langtools and
-    hotspot) with the jtreg_checks argument:
-    make check jtreg_checks="langtools hotspot".
-    If none is provided make check runs all testsuites.
+  - PR637: make check should exit with an error code if any regression test failed.
+  - G356743: Support libpng 1.5.
+* Allow selection of test suites using the jtreg_checks argument e.g. jtreg_checks="langtools"
+* CACAO
+  - Ignore all unknown options, but report them.
+  - Fixes build for newer gcc (at least 4.4) on PPC64, breaks older gcc.
+  - CA123: LD_LIBRARY_PATH and java.library.path.
+  - CA143: don't hang with invalid locale.
+  - CA144: aligned patchers on x86_64.
+  - CA148: support for LCMP bytecode.
+  - CA152: Calling Policy.setPolicy with a new Policy object has no effect on the DefaultSecurityManager.
+  - CA156: uncaughtExceptionHandler doesn't work with OpenJDK 6 b21.
+  - CA157: ARM SMP Assertion thinlock failed.
+* JamVM
+  - Ignore all unknown options.
+  - Handle overflow in getPhysicalMemory().
+  - Base default min and max heap size on physical memory.
+  - Fix reflective array access.
+  - Handle O_DELETE in JVM_Open.
+  - Minor performance improvement on ARM.
+  - First set of changes to support JamVM/OpenJDK on MacOS X.
+  - Minor memory leak (missing free).
+  - Handle integer overflow on i386/amd64.
+  - On ARM, force interpreter to be built in ARM mode.
+  - MIPS: 64-bit and interpreter inlining by default.
+  - Trivial implementation of stubs for MIPS.
 
 New in release 1.10 (2011-XX-XX):
 
--- a/THANKYOU	Wed Mar 09 23:47:23 2011 +0000
+++ b/THANKYOU	Wed Mar 30 23:14:30 2011 +0100
@@ -4,6 +4,7 @@
 patches. If your name does not appear on either list, but should, let
 us know. Please keep this list in alphabetic order.
 
+Alexis Ballier (aballier@gentoo.org)
 Alon Bar-Lev (alon.barlev@gmail.com)
 C. K. Jester-Young  (cky944@gmail.com)
 Torsten Werner (mail.twerner@googlemail.com)
\ No newline at end of file
--- a/hotspot.map	Wed Mar 09 23:47:23 2011 +0000
+++ b/hotspot.map	Wed Mar 30 23:14:30 2011 +0100
@@ -1,2 +1,2 @@
 # version url changeset md5sum
-hs20 http://hg.openjdk.java.net/hsx/hsx20/master f46354849fb3 2791c8009eefee305538c81328a8dfd2
+hs20 http://hg.openjdk.java.net/hsx/hsx20/master f0f676c5a2c6 369ad745bf697d525d1a00fc09906829
--- a/patches/cacao/arm-arch-defines.patch	Wed Mar 09 23:47:23 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-diff -Nru cacao.orig/cacao/src/vm/jit/arm/md-atomic.hpp cacao/cacao/src/vm/jit/arm/md-atomic.hpp
---- cacao.orig/cacao/src/vm/jit/arm/md-atomic.hpp	2010-05-19 12:14:46.000000000 +0100
-+++ cacao/cacao/src/vm/jit/arm/md-atomic.hpp	2010-06-21 18:35:53.000000000 +0100
-@@ -45,26 +45,7 @@
-  */
- inline uint32_t compare_and_swap(volatile uint32_t *p, uint32_t oldval, uint32_t newval)
- {
--	uint32_t result;
--	uint32_t temp;
--
--	/* TODO: improve this one! */
--	__asm__ __volatile__ (
--		"1:\t"
--		"ldr   %0,[%2]\n\t"
--		"cmp   %0,%4\n\t"
--		"bne   2f\n\t"
--		"swp   %1,%3,[%2]\n\t"
--		"cmp   %1,%0\n\t"
--		"swpne %0,%1,[%2]\n\t"
--		"bne   1b\n\t"
--		"2:"
--		: "=&r" (result), "=&r" (temp)
--		: "r" (p), "r" (newval), "r" (oldval)
--		: "cc", "memory"
--	);
--
--	return result;
-+	return __sync_val_compare_and_swap (p, oldval, newval);
- }
- 
- 
--- a/patches/cacao/ignore-unknown-options.patch	Wed Mar 09 23:47:23 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-Index: cacao/cacao/src/vm/vm.cpp
-===================================================================
---- cacao.orig/cacao/src/vm/vm.cpp	2011-03-04 00:20:24.000000000 +0100
-+++ cacao/cacao/src/vm/vm.cpp	2011-03-04 01:12:45.000000000 +0100
-@@ -1239,9 +1239,10 @@
- 
- #endif
- 		default:
--			printf("Unknown option: %s\n",
-+			fprintf(stderr,"Unknown option: %s\n",
- 				   vm_args->options[opt_index].optionString);
--			usage();
-+			opt_index++;
-+			/* Ignore */
- 		}
- 	}
- 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/g356743-libpng-1.5.patch	Wed Mar 30 23:14:30 2011 +0100
@@ -0,0 +1,26 @@
+--- openjdk.orig/jdk/src/share/native/sun/awt/splashscreen/splashscreen_png.c
++++ openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_png.c
+@@ -36,7 +36,7 @@ my_png_read_stream(png_structp png_ptr,
+ {
+     png_uint_32 check;
+ 
+-    SplashStream * stream = (SplashStream*)png_ptr->io_ptr;
++    SplashStream * stream = (SplashStream*)png_get_io_ptr(png_ptr);
+     check = stream->read(stream, data, length);
+     if (check != length)
+         png_error(png_ptr, "Read Error");
+@@ -71,12 +71,11 @@ SplashDecodePng(Splash * splash, png_rw_
+         goto done;
+     }
+ 
+-    if (setjmp(png_ptr->jmpbuf)) {
++    if (setjmp(png_jmpbuf(png_ptr))) {
+         goto done;
+     }
+ 
+-    png_ptr->io_ptr = io_ptr;
+-    png_ptr->read_data_fn = read_func;
++    png_set_read_fn(png_ptr, io_ptr, read_func);
+ 
+     png_set_sig_bytes(png_ptr, SIG_BYTES);      /* we already read the 8 signature bytes */
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/mark_sun_toolkit_privileged_code.patch	Wed Mar 30 23:14:30 2011 +0100
@@ -0,0 +1,12 @@
+--- openjdk/jdk/src/share/classes/sun/awt/SunToolkit.orig.java	2011-03-11 10:48:29.000000000 +0100
++++ openjdk/jdk/src/share/classes/sun/awt/SunToolkit.java	2011-03-11 11:24:33.000000000 +0100
+@@ -65,8 +65,7 @@
+
+     /* Load debug settings for native code */
+     static {
+-        String nativeDebug = System.getProperty("sun.awt.nativedebug");
+-        if ("true".equalsIgnoreCase(nativeDebug)) {
++        if (AccessController.doPrivileged(new GetBooleanAction("sun.awt.nativedebug"))) {
+             DebugSettings.init();
+         }
+     };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/6768387-jtable_not_serializable.patch	Wed Mar 30 23:14:30 2011 +0100
@@ -0,0 +1,106 @@
+# HG changeset patch
+# User alexp
+# Date 1274805592 -14400
+# Node ID 8d59b361635f12e378b41b44c4b953849de0d9fa
+# Parent  1297a41dbb47e58e89f7f639cee933a677998318
+6768387: REGRESSION: JTable no longer serializable
+Reviewed-by: rupashka
+
+diff -r 1297a41dbb47 -r 8d59b361635f src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java
+--- openjdk/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java	Tue May 25 20:30:54 2010 +0400
++++ openjdk/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java	Tue May 25 20:39:52 2010 +0400
+@@ -24,6 +24,8 @@
+  */
+ package sun.swing.table;
+ 
++import sun.swing.DefaultLookup;
++
+ import java.awt.Component;
+ import java.awt.Color;
+ import java.awt.FontMetrics;
+@@ -31,12 +33,11 @@
+ import java.awt.Insets;
+ import java.awt.Point;
+ import java.awt.Rectangle;
++import java.io.Serializable;
+ import javax.swing.*;
+ import javax.swing.plaf.UIResource;
+ import javax.swing.border.Border;
+ import javax.swing.table.*;
+-import sun.swing.DefaultLookup;
+-
+ 
+ public class DefaultTableCellHeaderRenderer extends DefaultTableCellRenderer
+         implements UIResource {
+@@ -186,7 +187,7 @@
+         return new Point(x, y);
+     }
+ 
+-    private class EmptyIcon implements Icon {
++    private class EmptyIcon implements Icon, Serializable {
+         int width = 0;
+         int height = 0;
+         public void paintIcon(Component c, Graphics g, int x, int y) {}
+diff -r 1297a41dbb47 -r 8d59b361635f test/javax/swing/JTable/6768387/bug6768387.java
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ openjdk/jdk/test/javax/swing/JTable/6768387/bug6768387.java	Tue May 25 20:39:52 2010 +0400
+@@ -0,0 +1,59 @@
++/*
++ * 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 6768387
++   @summary REGRESSION: JTable no longer serializable
++   @author Alexander Potochkin
++   @run main bug6768387
++*/
++
++import javax.swing.*;
++import javax.swing.table.AbstractTableModel;
++import java.io.*;
++
++public class bug6768387 {
++
++    private static void createGui() {
++        JTable table = new JTable();
++        OutputStream os;
++        ObjectOutputStream out;
++        try {
++            os = new ByteArrayOutputStream();
++            out = new ObjectOutputStream(os);
++            out.writeObject(table);
++            out.close();
++        }
++        catch (Exception ex) {
++            throw new RuntimeException(ex);
++        }
++    }
++
++    public static void main(String[] args) throws Exception {
++        SwingUtilities.invokeAndWait(new Runnable() {
++            public void run() {
++                bug6768387.createGui();
++            }
++        });
++    }
++}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7019861-AA-regression-fix.patch	Wed Mar 30 23:14:30 2011 +0100
@@ -0,0 +1,502 @@
+# HG changeset patch
+# User dlila
+# Date 1300223102 14400
+# Node ID 253f3bc64961944b1886a243a662bd929e9ab605
+# Parent  fd8b81c558d307a984ad2dcd06b7de092c3f01f5
+7019861: Last scanline is skipped in pisces.Renderer.
+Summary: not skipping it anymore.
+Reviewed-by: flar
+
+diff -r fd8b81c558d3 -r 253f3bc64961 src/share/classes/sun/java2d/pisces/Helpers.java
+--- openjdk.orig/jdk/src/share/classes/sun/java2d/pisces/Helpers.java	Tue Mar 15 15:15:10 2011 -0400
++++ openjdk/jdk/src/share/classes/sun/java2d/pisces/Helpers.java	Tue Mar 15 17:05:02 2011 -0400
+@@ -154,9 +154,6 @@
+     // These use a hardcoded factor of 2 for increasing sizes. Perhaps this
+     // should be provided as an argument.
+     static float[] widenArray(float[] in, final int cursize, final int numToAdd) {
+-        if (in == null) {
+-            return new float[5 * numToAdd];
+-        }
+         if (in.length >= cursize + numToAdd) {
+             return in;
+         }
+diff -r fd8b81c558d3 -r 253f3bc64961 src/share/classes/sun/java2d/pisces/PiscesTileGenerator.java
+--- openjdk.orig/jdk/src/share/classes/sun/java2d/pisces/PiscesTileGenerator.java	Tue Mar 15 15:15:10 2011 -0400
++++ openjdk/jdk/src/share/classes/sun/java2d/pisces/PiscesTileGenerator.java	Tue Mar 15 17:05:02 2011 -0400
+@@ -191,8 +191,7 @@
+                     System.out.println("len = "+runLen);
+                     System.out.print(cache.toString());
+                     e0.printStackTrace();
+-                    System.exit(1);
+-                    return;
++                    throw e0;
+                 }
+ 
+                 int rx0 = cx;
+@@ -215,8 +214,7 @@
+                         System.out.println("len = "+runLen);
+                         System.out.print(cache.toString());
+                         e.printStackTrace();
+-                        System.exit(1);
+-                        return;
++                        throw e;
+                     }
+                 }
+                 pos += 2;
+@@ -250,4 +248,5 @@
+      * No further calls will be made on this instance.
+      */
+     public void dispose() {}
+-}
+\ No newline at end of file
++}
++
+diff -r fd8b81c558d3 -r 253f3bc64961 src/share/classes/sun/java2d/pisces/Renderer.java
+--- openjdk.orig/jdk/src/share/classes/sun/java2d/pisces/Renderer.java	Tue Mar 15 15:15:10 2011 -0400
++++ openjdk/jdk/src/share/classes/sun/java2d/pisces/Renderer.java	Tue Mar 15 17:05:02 2011 -0400
+@@ -47,16 +47,16 @@
+ 
+         private static final int INIT_CROSSINGS_SIZE = 10;
+ 
+-        private ScanlineIterator() {
++        // Preconditions: Only subpixel scanlines in the range
++        // (start <= subpixel_y <= end) will be evaluated. No
++        // edge may have a valid (i.e. inside the supplied clip)
++        // crossing that would be generated outside that range.
++        private ScanlineIterator(int start, int end) {
+             crossings = new int[INIT_CROSSINGS_SIZE];
+             edgePtrs = new int[INIT_CROSSINGS_SIZE];
+ 
+-            // We don't care if we clip some of the line off with ceil, since
+-            // no scan line crossings will be eliminated (in fact, the ceil is
+-            // the y of the first scan line crossing).
+-            final int minY = getFirstScanLineCrossing();
+-            nextY = minY;
+-            maxY = getScanLineCrossingEnd()-1;
++            nextY = start;
++            maxY = end;
+             edgeCount = 0;
+         }
+ 
+@@ -148,6 +148,7 @@
+     // don't just set NULL to -1, because we want NULL+NEXT to be negative.
+     private static final int NULL = -SIZEOF_EDGE;
+     private float[] edges = null;
++    private static final int INIT_NUM_EDGES = 8;
+     private int[] edgeBuckets = null;
+     private int[] edgeBucketCounts = null; // 2*newedges + (1 if pruning needed)
+     private int numEdges;
+@@ -156,7 +157,7 @@
+     private static final float INC_BND = 8f;
+ 
+     // each bucket is a linked list. this method adds eptr to the
+-    // start "bucket"th linked list.
++    // start of the "bucket"th linked list.
+     private void addEdgeToBucket(final int eptr, final int bucket) {
+         edges[eptr+NEXT] = edgeBuckets[bucket];
+         edgeBuckets[bucket] = eptr;
+@@ -168,7 +169,8 @@
+     // X0, Y0, D*[X|Y], COUNT; not variables used for computing scanline crossings).
+     private void quadBreakIntoLinesAndAdd(float x0, float y0,
+                                           final Curve c,
+-                                          final float x2, final float y2) {
++                                          final float x2, final float y2)
++    {
+         final float QUAD_DEC_BND = 32;
+         final int countlg = 4;
+         int count = 1 << countlg;
+@@ -204,7 +206,8 @@
+     // here, but then too many numbers are passed around.
+     private void curveBreakIntoLinesAndAdd(float x0, float y0,
+                                            final Curve c,
+-                                           final float x3, final float y3) {
++                                           final float x3, final float y3)
++    {
+         final int countlg = 3;
+         int count = 1 << countlg;
+ 
+@@ -259,8 +262,6 @@
+         }
+     }
+ 
+-    // Preconditions: y2 > y1 and the curve must cross some scanline
+-    // i.e.: y1 <= y < y2 for some y such that boundsMinY <= y < boundsMaxY
+     private void addLine(float x1, float y1, float x2, float y2) {
+         float or = 1; // orientation of the line. 1 if y increases, 0 otherwise.
+         if (y2 < y1) {
+@@ -272,12 +273,11 @@
+             x1 = or;
+             or = 0;
+         }
+-        final int firstCrossing = Math.max((int) Math.ceil(y1), boundsMinY);
++        final int firstCrossing = Math.max((int)Math.ceil(y1), boundsMinY);
+         final int lastCrossing = Math.min((int)Math.ceil(y2), boundsMaxY);
+         if (firstCrossing >= lastCrossing) {
+             return;
+         }
+-
+         if (y1 < edgeMinY) { edgeMinY = y1; }
+         if (y2 > edgeMaxY) { edgeMaxY = y2; }
+ 
+@@ -297,22 +297,10 @@
+         edges[ptr+OR] = or;
+         edges[ptr+CURX] = x1 + (firstCrossing - y1) * slope;
+         edges[ptr+SLOPE] = slope;
+-        edges[ptr+YMAX] = y2;
++        edges[ptr+YMAX] = lastCrossing;
+         final int bucketIdx = firstCrossing - boundsMinY;
+         addEdgeToBucket(ptr, bucketIdx);
+-        if (lastCrossing < boundsMaxY) {
+-            edgeBucketCounts[lastCrossing - boundsMinY] |= 1;
+-        }
+-    }
+-
+-    // preconditions: should not be called before the last line has been added
+-    // to the edge list (even though it will return a correct answer at that
+-    // point in time, it's not meant to be used that way).
+-    private int getFirstScanLineCrossing() {
+-        return Math.max(boundsMinY, (int)Math.ceil(edgeMinY));
+-    }
+-    private int getScanLineCrossingEnd() {
+-        return Math.min(boundsMaxY, (int)Math.ceil(edgeMaxY));
++        edgeBucketCounts[lastCrossing - boundsMinY] |= 1;
+     }
+ 
+ // END EDGE LIST
+@@ -366,9 +354,11 @@
+         this.boundsMaxX = (pix_boundsX + pix_boundsWidth) * SUBPIXEL_POSITIONS_X;
+         this.boundsMaxY = (pix_boundsY + pix_boundsHeight) * SUBPIXEL_POSITIONS_Y;
+ 
++        edges = new float[INIT_NUM_EDGES * SIZEOF_EDGE];
++        numEdges = 0;
+         edgeBuckets = new int[boundsMaxY - boundsMinY];
+         java.util.Arrays.fill(edgeBuckets, NULL);
+-        edgeBucketCounts = new int[edgeBuckets.length];
++        edgeBucketCounts = new int[edgeBuckets.length + 1];
+     }
+ 
+     private float tosubpixx(float pix_x) {
+@@ -394,7 +384,7 @@
+         y0 = y1;
+     }
+ 
+-    Curve c = new Curve();
++    private Curve c = new Curve();
+     @Override public void curveTo(float x1, float y1,
+                                   float x2, float y2,
+                                   float x3, float y3)
+@@ -431,8 +421,8 @@
+         throw new InternalError("Renderer does not use a native consumer.");
+     }
+ 
+-    private void _endRendering(final int pix_bboxx0, final int pix_bboxy0,
+-                               final int pix_bboxx1, final int pix_bboxy1)
++    private void _endRendering(final int pix_bboxx0, final int pix_bboxx1,
++                               int ymin, int ymax)
+     {
+         // Mask to determine the relevant bit of the crossing sum
+         // 0x1 if EVEN_ODD, all bits if NON_ZERO
+@@ -455,7 +445,7 @@
+         int pix_minX = Integer.MAX_VALUE;
+ 
+         int y = boundsMinY; // needs to be declared here so we emit the last row properly.
+-        ScanlineIterator it = this.new ScanlineIterator();
++        ScanlineIterator it = this.new ScanlineIterator(ymin, ymax);
+         for ( ; it.hasNext(); ) {
+             int numCrossings = it.next();
+             int[] crossings = it.crossings;
+@@ -477,7 +467,7 @@
+                 int curxo = crossings[i];
+                 int curx = curxo >> 1;
+                 // to turn {0, 1} into {-1, 1}, multiply by 2 and subtract 1.
+-                int crorientation = ((curxo & 0x1) << 1) -1;
++                int crorientation = ((curxo & 0x1) << 1) - 1;
+                 if ((sum & mask) != 0) {
+                     int x0 = Math.max(prev, bboxx0);
+                     int x1 = Math.min(curx, bboxx1);
+@@ -541,7 +531,7 @@
+         }
+ 
+         this.cache = new PiscesCache(pminX, pminY, pmaxX, pmaxY);
+-        _endRendering(pminX, pminY, pmaxX, pmaxY);
++        _endRendering(pminX, pmaxX, spminY, spmaxY);
+     }
+ 
+     public PiscesCache getCache() {
+diff -r fd8b81c558d3 -r 253f3bc64961 src/share/classes/sun/java2d/pisces/Stroker.java
+--- openjdk.orig/jdk/src/share/classes/sun/java2d/pisces/Stroker.java	Tue Mar 15 15:15:10 2011 -0400
++++ openjdk/jdk/src/share/classes/sun/java2d/pisces/Stroker.java	Tue Mar 15 17:05:02 2011 -0400
+@@ -764,6 +764,11 @@
+     private static final int MAX_N_CURVES = 11;
+     private float[] subdivTs = new float[MAX_N_CURVES - 1];
+ 
++    // If this class is compiled with ecj, then Hotspot crashes when OSR
++    // compiling this function. See bugs 7004570 and 6675699
++    // TODO: until those are fixed, we should work around that by
++    // manually inlining this into curveTo and quadTo.
++/******************************* WORKAROUND **********************************
+     private void somethingTo(final int type) {
+         // need these so we can update the state at the end of this method
+         final float xf = middle[type-2], yf = middle[type-1];
+@@ -866,6 +871,7 @@
+         this.cy0 = yf;
+         this.prev = DRAWING_OP_TO;
+     }
++****************************** END WORKAROUND *******************************/
+ 
+     // finds values of t where the curve in pts should be subdivided in order
+     // to get good offset curves a distance of w away from the middle curve.
+@@ -932,18 +938,168 @@
+         middle[2] = x1;  middle[3] = y1;
+         middle[4] = x2;  middle[5] = y2;
+         middle[6] = x3;  middle[7] = y3;
+-        somethingTo(8);
+-    }
+ 
+-    @Override public long getNativeConsumer() {
+-        throw new InternalError("Stroker doesn't use a native consumer");
++        // inlined version of somethingTo(8);
++        // See the TODO on somethingTo
++
++        // need these so we can update the state at the end of this method
++        final float xf = middle[6], yf = middle[7];
++        float dxs = middle[2] - middle[0];
++        float dys = middle[3] - middle[1];
++        float dxf = middle[6] - middle[4];
++        float dyf = middle[7] - middle[5];
++
++        boolean p1eqp2 = (dxs == 0f && dys == 0f);
++        boolean p3eqp4 = (dxf == 0f && dyf == 0f);
++        if (p1eqp2) {
++            dxs = middle[4] - middle[0];
++            dys = middle[5] - middle[1];
++            if (dxs == 0f && dys == 0f) {
++                dxs = middle[6] - middle[0];
++                dys = middle[7] - middle[1];
++            }
++        }
++        if (p3eqp4) {
++            dxf = middle[6] - middle[2];
++            dyf = middle[7] - middle[3];
++            if (dxf == 0f && dyf == 0f) {
++                dxf = middle[6] - middle[0];
++                dyf = middle[7] - middle[1];
++            }
++        }
++        if (dxs == 0f && dys == 0f) {
++            // this happens iff the "curve" is just a point
++            lineTo(middle[0], middle[1]);
++            return;
++        }
++
++        // if these vectors are too small, normalize them, to avoid future
++        // precision problems.
++        if (Math.abs(dxs) < 0.1f && Math.abs(dys) < 0.1f) {
++            float len = (float)Math.sqrt(dxs*dxs + dys*dys);
++            dxs /= len;
++            dys /= len;
++        }
++        if (Math.abs(dxf) < 0.1f && Math.abs(dyf) < 0.1f) {
++            float len = (float)Math.sqrt(dxf*dxf + dyf*dyf);
++            dxf /= len;
++            dyf /= len;
++        }
++
++        computeOffset(dxs, dys, lineWidth2, offset[0]);
++        final float mx = offset[0][0];
++        final float my = offset[0][1];
++        drawJoin(cdx, cdy, cx0, cy0, dxs, dys, cmx, cmy, mx, my);
++
++        int nSplits = findSubdivPoints(middle, subdivTs, 8, lineWidth2);
++
++        int kind = 0;
++        Iterator<Integer> it = Curve.breakPtsAtTs(middle, 8, subdivTs, nSplits);
++        while(it.hasNext()) {
++            int curCurveOff = it.next();
++
++            kind = computeOffsetCubic(middle, curCurveOff, lp, rp);
++            if (kind != 0) {
++                emitLineTo(lp[0], lp[1]);
++                switch(kind) {
++                case 8:
++                    emitCurveTo(lp[0], lp[1], lp[2], lp[3], lp[4], lp[5], lp[6], lp[7], false);
++                    emitCurveTo(rp[0], rp[1], rp[2], rp[3], rp[4], rp[5], rp[6], rp[7], true);
++                    break;
++                case 4:
++                    emitLineTo(lp[2], lp[3]);
++                    emitLineTo(rp[0], rp[1], true);
++                    break;
++                }
++                emitLineTo(rp[kind - 2], rp[kind - 1], true);
++            }
++        }
++
++        this.cmx = (lp[kind - 2] - rp[kind - 2]) / 2;
++        this.cmy = (lp[kind - 1] - rp[kind - 1]) / 2;
++        this.cdx = dxf;
++        this.cdy = dyf;
++        this.cx0 = xf;
++        this.cy0 = yf;
++        this.prev = DRAWING_OP_TO;
+     }
+ 
+     @Override public void quadTo(float x1, float y1, float x2, float y2) {
+         middle[0] = cx0; middle[1] = cy0;
+         middle[2] = x1;  middle[3] = y1;
+         middle[4] = x2;  middle[5] = y2;
+-        somethingTo(6);
++
++        // inlined version of somethingTo(8);
++        // See the TODO on somethingTo
++
++        // need these so we can update the state at the end of this method
++        final float xf = middle[4], yf = middle[5];
++        float dxs = middle[2] - middle[0];
++        float dys = middle[3] - middle[1];
++        float dxf = middle[4] - middle[2];
++        float dyf = middle[5] - middle[3];
++        if ((dxs == 0f && dys == 0f) || (dxf == 0f && dyf == 0f)) {
++            dxs = dxf = middle[4] - middle[0];
++            dys = dyf = middle[5] - middle[1];
++        }
++        if (dxs == 0f && dys == 0f) {
++            // this happens iff the "curve" is just a point
++            lineTo(middle[0], middle[1]);
++            return;
++        }
++        // if these vectors are too small, normalize them, to avoid future
++        // precision problems.
++        if (Math.abs(dxs) < 0.1f && Math.abs(dys) < 0.1f) {
++            float len = (float)Math.sqrt(dxs*dxs + dys*dys);
++            dxs /= len;
++            dys /= len;
++        }
++        if (Math.abs(dxf) < 0.1f && Math.abs(dyf) < 0.1f) {
++            float len = (float)Math.sqrt(dxf*dxf + dyf*dyf);
++            dxf /= len;
++            dyf /= len;
++        }
++
++        computeOffset(dxs, dys, lineWidth2, offset[0]);
++        final float mx = offset[0][0];
++        final float my = offset[0][1];
++        drawJoin(cdx, cdy, cx0, cy0, dxs, dys, cmx, cmy, mx, my);
++
++        int nSplits = findSubdivPoints(middle, subdivTs, 6, lineWidth2);
++
++        int kind = 0;
++        Iterator<Integer> it = Curve.breakPtsAtTs(middle, 6, subdivTs, nSplits);
++        while(it.hasNext()) {
++            int curCurveOff = it.next();
++
++            kind = computeOffsetQuad(middle, curCurveOff, lp, rp);
++            if (kind != 0) {
++                emitLineTo(lp[0], lp[1]);
++                switch(kind) {
++                case 6:
++                    emitQuadTo(lp[0], lp[1], lp[2], lp[3], lp[4], lp[5], false);
++                    emitQuadTo(rp[0], rp[1], rp[2], rp[3], rp[4], rp[5], true);
++                    break;
++                case 4:
++                    emitLineTo(lp[2], lp[3]);
++                    emitLineTo(rp[0], rp[1], true);
++                    break;
++                }
++                emitLineTo(rp[kind - 2], rp[kind - 1], true);
++            }
++        }
++
++        this.cmx = (lp[kind - 2] - rp[kind - 2]) / 2;
++        this.cmy = (lp[kind - 1] - rp[kind - 1]) / 2;
++        this.cdx = dxf;
++        this.cdy = dyf;
++        this.cx0 = xf;
++        this.cy0 = yf;
++        this.prev = DRAWING_OP_TO;
++    }
++
++    @Override public long getNativeConsumer() {
++        throw new InternalError("Stroker doesn't use a native consumer");
+     }
+ 
+     // a stack of polynomial curves where each curve shares endpoints with
+diff -r fd8b81c558d3 -r 253f3bc64961 test/sun/java2d/pisces/Renderer/Test7019861.java
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ openjdk/jdk/test/sun/java2d/pisces/Renderer/Test7019861.java	Tue Mar 15 17:05:02 2011 -0400
+@@ -0,0 +1,76 @@
++/*
++ * Copyright (c) 2011, 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     7019861
++ *
++ * @summary Verifies that the last scanline isn't skipped when doing
++ *          antialiased rendering.
++ *
++ * @run     main Test7019861
++ */
++
++import java.awt.BasicStroke;
++import java.awt.Color;
++import java.awt.Graphics2D;
++import java.awt.geom.Path2D;
++import java.awt.image.BufferedImage;
++import java.util.Arrays;
++
++import static java.awt.RenderingHints.*;
++
++public class Test7019861 {
++
++    public static void main(String[] argv) throws Exception {
++        BufferedImage im = getWhiteImage(30, 30);
++        Graphics2D g2 = (Graphics2D)im.getGraphics();
++        g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
++        g2.setRenderingHint(KEY_STROKE_CONTROL, VALUE_STROKE_PURE);
++        g2.setStroke(new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
++        g2.setBackground(Color.white);
++        g2.setColor(Color.black);
++
++        Path2D p = getPath(0, 0, 20);
++        g2.draw(p);
++
++        if (!(new Color(im.getRGB(20, 19))).equals(Color.black)) {
++            throw new Exception("This pixel should be black");
++        }
++    }
++
++    private static Path2D getPath(int x, int y, int len) {
++        Path2D p = new Path2D.Double();
++        p.moveTo(x, y);
++        p.quadTo(x + len, y, x + len, y + len);
++        return p;
++    }
++
++    private static BufferedImage getWhiteImage(int w, int h) {
++        BufferedImage ret = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
++        final int[] white = new int[w * h];
++        Arrays.fill(white, 0xffffff);
++        ret.setRGB(0, 0, w, h, white, 0, w);
++        return ret;
++    }
++}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7023591-AAShapePipe.patch	Wed Mar 30 23:14:30 2011 +0100
@@ -0,0 +1,20 @@
+# HG changeset patch
+# User prr
+# Date 1299282881 28800
+# Node ID f82f0af7de5bb0e41cb957d654e8a1beaeab0008
+# Parent  01dcb496946e514fe5e61504d0bd2516d6a42783
+7023591: Xrender: java2D font demo - text highlighting tab content is black
+Reviewed-by: flar
+
+diff -r 01dcb496946e -r f82f0af7de5b src/share/classes/sun/java2d/pipe/AAShapePipe.java
+--- openjdk.orig/jdk/src/share/classes/sun/java2d/pipe/AAShapePipe.java	Thu Mar 03 16:06:42 2011 -0800
++++ openjdk/jdk/src/share/classes/sun/java2d/pipe/AAShapePipe.java	Fri Mar 04 15:54:41 2011 -0800
+@@ -109,7 +109,7 @@
+         Region clip = sg.getCompClip();
+         int abox[] = new int[4];
+         AATileGenerator aatg =
+-            renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, 0, 0,
++            renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, lw1, lw2,
+                                             clip, abox);
+         if (aatg == null) {
+             // Nothing to render
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7027667-AAShapePipeRegTest.patch	Wed Mar 30 23:14:30 2011 +0100
@@ -0,0 +1,62 @@
+# HG changeset patch
+# User dlila
+# Date 1300216510 14400
+# Node ID fd8b81c558d307a984ad2dcd06b7de092c3f01f5
+# Parent  87444344d6169cce2ef7fbbf48582728769a8d85
+7027667: clipped aa rectangles are not drawn properly.
+Summary: Already fixed. This is just a regression test for it.
+Reviewed-by: prr
+
+diff -r 87444344d616 -r fd8b81c558d3 test/sun/java2d/pipe/Test7027667.java
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ openjdk/jdk/test/sun/java2d/pipe/Test7027667.java	Tue Mar 15 15:15:10 2011 -0400
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (c) 2011, 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     7027667 7023591
++ *
++ * @summary Verifies that aa clipped rectangles are drawn, not filled.
++ *
++ * @run     main Test7027667
++ */
++
++import java.awt.*;
++import java.awt.geom.*;
++import java.awt.image.*;
++import static java.awt.RenderingHints.*;
++
++public class Test7027667 {
++    public static void main(String[] args) throws Exception {
++        BufferedImage bImg = new BufferedImage(512, 512, BufferedImage.TYPE_INT_RGB);
++        Graphics2D g2d = (Graphics2D) bImg.getGraphics();
++        g2d.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
++        g2d.setClip(new Ellipse2D.Double(0, 0, 100, 100));
++        g2d.drawRect(10, 10, 100, 100);
++        if (new Color(bImg.getRGB(50, 50)).equals(Color.white)) {
++            throw new Exception("Rectangle should be drawn, not filled");
++        }
++    }
++}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/revert-6885123.patch	Wed Mar 30 23:14:30 2011 +0100
@@ -0,0 +1,310 @@
+--- openjdk.old/langtools/src/share/classes/com/sun/tools/javac/file/RegularFileObject.java	2011-02-28 17:07:28.000000000 +0100
++++ openjdk/langtools/src/share/classes/com/sun/tools/javac/file/RegularFileObject.java	2011-03-25 10:16:13.646180000 +0100
+@@ -78,7 +78,7 @@
+ 
+     //@Override
+     public String getName() {
+-        return file.getPath();
++        return this.name;
+     }
+ 
+     //@Override
+--- /dev/null	1970-01-01 01:00:00.000000000 +0100
++++ openjdk/jdk/test/javax/tools/JavaFileManager/JavaFileManagerTest.java	2011-03-28 15:51:43.000000000 +0200
+@@ -0,0 +1,119 @@
++/*
++ * Copyright 2011 Red Hat, Inc. 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.
++ */
++
++
++import java.util.*;
++import java.io.*;
++import java.nio.charset.*;
++
++import javax.tools.*;
++import javax.tools.JavaFileManager.*;
++import javax.tools.JavaFileObject.*;
++
++public class JavaFileManagerTest {
++
++    /**
++     * Test data files are stored in a subdirectory named "test_data".
++     */
++    private static final String TEST_DATA_DIRECTORY = "test_data";
++
++    /**
++     * Charset used by JavaFileManager.
++     */
++    private static final Charset FILE_MANAGER_CHARSET = Charset.forName("US-ASCII");
++
++    /**
++     * Locale used by JavaFileManager.
++     */
++    private static final Locale FILE_MANAGER_LOCALE = (java.util.Locale)null;
++
++    /**
++     * Location of file objects being tested.
++     */
++    private static final Location FILE_OBJECTS_LOCATION = javax.tools.StandardLocation.SOURCE_PATH;
++
++    public static DiagnosticListener<JavaFileObject> listener = new DiagnosticCollector<JavaFileObject>();
++
++    private void doTest() throws IOException {
++        StandardJavaFileManager fileManager = getStandardFileManager();
++        fileManager.setLocation(FILE_OBJECTS_LOCATION, Collections.singleton(getSourceDirPathFile()));
++
++        checkFileManagerLocation(fileManager.getLocation(FILE_OBJECTS_LOCATION));
++        checkFileManagerGetName(fileManager);
++    }
++
++    private StandardJavaFileManager getStandardFileManager() {
++        return ToolProvider.getSystemJavaCompiler().getStandardFileManager(
++                listener, FILE_MANAGER_LOCALE, FILE_MANAGER_CHARSET);
++    }
++
++    public static File getSourceDirPathFile() {
++        return new File(new File("."), TEST_DATA_DIRECTORY);
++    }
++
++    /**
++     * Check if there's "./test_data" location included in a locations argument.
++     * @param locations set of locations returned by fileManager.getLocation()
++     */
++    private void checkFileManagerLocation(Iterable<? extends File> locations) {
++        for (File file : locations) {
++            if (".".equals(file.getParent()) && TEST_DATA_DIRECTORY.equals(file.getName())) {
++                System.out.println("checkFileManagerLocation: ok");
++                return;
++            }
++        }
++        throw new RuntimeException("fileManager.getLocation() returns wrong locations! " + locations.toString());
++    }
++
++    /**
++     * Check if method JavaFileManager.getName() returns correct file name.
++     * @param fileManager
++     * @throws IOException
++     */
++    private void checkFileManagerGetName(JavaFileManager fileManager) throws IOException {
++        Map<Kind, String> kinds = new HashMap<Kind, String>();
++        kinds.put(Kind.SOURCE, "Test.java");
++        kinds.put(Kind.CLASS,  "Test.class");
++        kinds.put(Kind.HTML,   "Test.html");
++        kinds.put(Kind.OTHER,  "Test.txt");
++        for (Map.Entry<Kind, String> kind : kinds.entrySet()) {
++            System.out.println("Testing JavaFileManager for kind " + kind.getKey());
++            Iterable<JavaFileObject> fileObjects = fileManager.list(
++                    FILE_OBJECTS_LOCATION, "", Collections.singleton(kind.getKey()), false);
++            checkIfFileObjectsContainName(fileObjects, kind.getValue());
++        }
++    }
++
++    private void checkIfFileObjectsContainName(Iterable<JavaFileObject> fileObjects, String name) {
++        //System.out.println(fileObjects);
++        for (JavaFileObject fileObject : fileObjects) {
++            //System.out.println(fileObject.getName());
++            if (name.equals(fileObject.getName())) {
++                System.out.println("JavaFileObject.getName(): ok  ('" + fileObject.getName() + "')");
++                return;
++            }
++        }
++        throw new RuntimeException("JavaFileObject.getName() returns wrong name!");
++    }
++
++    public static void main(String argv[]) throws IOException {
++        new JavaFileManagerTest().doTest();
++    }
++
++}
+--- /dev/null	1970-01-01 01:00:00.000000000 +0100
++++ openjdk/jdk/test/javax/tools/JavaFileManager/JavaFileManagerTest.sh	2011-03-28 15:47:23.000000000 +0200
+@@ -0,0 +1,153 @@
++#!/bin/sh
++
++#
++# Copyright 2011 Red Hat, Inc. 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.
++
++#
++# This script is the actual launcher of JavaFileManagerTest.java
++# 
++
++# @test
++# @summary Test that check proper behaviour of JavaFileManager and
++#          JavaFileObject classes.
++
++
++
++# check arguments set by JTreg
++function checkArgs() {
++    if [ "${TESTSRC}" = "" ]
++    then
++        echo "TESTSRC not set.  Test cannot execute.  Failed."
++        exit 1
++    fi
++    echo "TESTSRC=${TESTSRC}"
++    if [ "${TESTJAVA}" = "" ]
++    then
++        echo "TESTJAVA not set.  Test cannot execute.  Failed."
++        exit 1
++    fi
++    echo "TESTJAVA=${TESTJAVA}"
++    if [ "${TESTCLASSES}" = "" ]
++    then
++        echo "TESTCLASSES not set.  Test cannot execute.  Failed."
++        exit 1
++    fi
++}
++
++
++
++# print paths to test sources and test classes
++function printPaths() {
++    echo "TESTCLASSES=${TESTCLASSES}"
++    echo "CLASSPATH=${CLASSPATH}"
++}
++
++
++
++# copy of all necessarry files into work directory
++function copyWorkFiles() {
++    cp -r "${TESTSRC}/test_data" "${TESTCLASSES}/"
++    result=$?
++    if [ $result -eq 0 ]
++    then
++        echo "Copy of work files was successful."
++    else 
++        echo "copy of work files have failed."
++        exit $result
++    fi
++
++    cp "${TESTSRC}/JavaFileManagerTest.java" "${TESTCLASSES}"
++    result=$?
++    if [ $result -eq 0 ]
++    then
++        echo "Copy of work files was successful."
++    else 
++        echo "copy of work files have failed."
++        exit $result
++    fi
++}
++
++
++
++# compilation of Test class which is stored in test_data subdirectory
++function compileTestClass() {
++    COMPILE="${TESTJAVA}/bin/javac ${TESTCLASSES}/test_data/Test.java"
++    echo ${COMPILE}
++    ${COMPILE}
++    result=$?
++
++    if [ $result -eq 0 ]
++    then
++        echo "Compilation of the test class was successful."
++    else 
++        echo "Compilation of the test class have failed."
++        # Cleanup
++        rm -rf ${TESTCLASSES}/
++        exit $result
++    fi
++}
++
++
++
++# compilation of the Test itself
++function compileTest() {
++    COMPILE="${TESTJAVA}/bin/javac ${TESTCLASSES}/JavaFileManagerTest.java"
++    echo ${COMPILE}
++    ${COMPILE}
++    result=$?
++
++    if [ $result -eq 0 ]
++    then
++        echo "Compilation of the test case was successful."
++    else 
++        echo "Compilation of the test case failed."
++        # Cleanup
++        rm -rf ${TESTCLASSES}/
++        exit $result
++    fi
++}
++
++
++
++# run the test
++function runTest() {
++    cd ${TESTCLASSES}
++    RUNCMD="${TESTJAVA}/bin/java JavaFileManagerTest"
++    echo ${RUNCMD}
++    ${RUNCMD}
++    result=$?
++
++    if [ $result -eq 0 ]
++    then
++        echo "Execution successful"
++    else
++        echo "Execution of the test case failed."
++    fi
++    rm -rf ${TESTCLASSES}/
++    exit $result
++}
++
++
++
++checkArgs
++printPaths
++copyWorkFiles
++compileTestClass
++compileTest
++runTest
++
+--- /dev/null	1970-01-01 01:00:00.000000000 +0100
++++ openjdk/jdk/test/javax/tools/JavaFileManager/test_data/Test.html	2011-03-25 18:19:45.000000000 +0100
+@@ -0,0 +1,5 @@
++<html>
++<body>
++42
++</body>
++</html>
+--- /dev/null	1970-01-01 01:00:00.000000000 +0100
++++ openjdk/jdk/test/javax/tools/JavaFileManager/test_data/Test.java	2011-03-28 14:53:50.000000000 +0200
+@@ -0,0 +1,5 @@
++package test_data;
++
++public class Test {
++	// nothing here
++}
+--- /dev/null	1970-01-01 01:00:00.000000000 +0100
++++ openjdk/jdk/test/javax/tools/JavaFileManager/test_data/Test.txt	2011-03-28 16:15:09.000000000 +0200
+@@ -0,0 +1,2 @@
++42
++