summaryrefslogtreecommitdiff
path: root/java/openjdk6
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2013-07-25 15:32:43 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2013-07-25 15:32:43 +0000
commit37e17acfdfd91917bf8589a8ba14ed9a6629cf8d (patch)
tree25646ae1d7acc186371edf7d4aaefa48ac98a08f /java/openjdk6
parentUpdate to version 0.3.0 (diff)
Fix excessive memory consumption on head amd64, this prevent the package building cluster from dying when building java ports.
This bug is referenced upstream here: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6636110 Submitted by: dim With hat: portmgr
Notes
Notes: svn path=/head/; revision=323651
Diffstat (limited to 'java/openjdk6')
-rw-r--r--java/openjdk6/Makefile2
-rw-r--r--java/openjdk6/Makefile.icedtea1
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6636110-deoptimization_unaligned_stackpointer.patch76
3 files changed, 78 insertions, 1 deletions
diff --git a/java/openjdk6/Makefile b/java/openjdk6/Makefile
index 76b8a7195283..bc062bc976de 100644
--- a/java/openjdk6/Makefile
+++ b/java/openjdk6/Makefile
@@ -3,7 +3,7 @@
PORTNAME= openjdk6
PORTVERSION= b27
-PORTREVISION?= 5
+PORTREVISION?= 6
CATEGORIES= java devel
MASTER_SITES= http://download.java.net/openjdk/jdk6/promoted/${PORTVERSION}/ \
http://download.java.net/jaxp/openjdk/jdk6/:jaxp \
diff --git a/java/openjdk6/Makefile.icedtea b/java/openjdk6/Makefile.icedtea
index 12e0cf3eb01c..f015285b6a6e 100644
--- a/java/openjdk6/Makefile.icedtea
+++ b/java/openjdk6/Makefile.icedtea
@@ -53,6 +53,7 @@ _PATCHES= \
security/20130416/8000724.patch \
security/20130416/8004986.patch \
openjdk/6501644-icu_sync.patch \
+ openjdk/6636110-deoptimization_unaligned_stackpointer.patch \
openjdk/6886358-layout_update.patch \
security/20130416/8001031.patch \
openjdk/7017324-kerning_crash.patch \
diff --git a/java/openjdk6/files/icedtea/openjdk/6636110-deoptimization_unaligned_stackpointer.patch b/java/openjdk6/files/icedtea/openjdk/6636110-deoptimization_unaligned_stackpointer.patch
new file mode 100644
index 000000000000..5e0a35091546
--- /dev/null
+++ b/java/openjdk6/files/icedtea/openjdk/6636110-deoptimization_unaligned_stackpointer.patch
@@ -0,0 +1,76 @@
+
+# HG changeset patch
+# User never
+# Date 1320440131 25200
+# Node ID 1feb272af3a704c03d544ef6c606db32049e492c
+# Parent 448691f285a54cd944c45c79ff0ba13ec8e3e205
+6636110: unaligned stackpointer leads to crash during deoptimization
+Reviewed-by: never, kvn
+Contributed-by: Andreas Schoesser <andreas.schoesser@sap.com>
+
+--- hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp.orig Thu Nov 03 04:12:49 2011 -0700
++++ hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Fri Nov 04 13:55:31 2011 -0700
+@@ -2797,17 +2797,25 @@ void SharedRuntime::generate_deopt_blob(
+ // void Deoptimization::unpack_frames(JavaThread* thread, int exec_mode)
+
+ // Use rbp because the frames look interpreted now
+- __ set_last_Java_frame(noreg, rbp, NULL);
+-
++ // Save "the_pc" since it cannot easily be retrieved using the last_java_SP after we aligned SP.
++ // Don't need the precise return PC here, just precise enough to point into this code blob.
++ address the_pc = __ pc();
++ __ set_last_Java_frame(noreg, rbp, the_pc);
++
++ __ andptr(rsp, -(StackAlignmentInBytes)); // Fix stack alignment as required by ABI
+ __ mov(c_rarg0, r15_thread);
+ __ movl(c_rarg1, r14); // second arg: exec_mode
+ __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::unpack_frames)));
++ // Revert SP alignment after call since we're going to do some SP relative addressing below
++ __ movptr(rsp, Address(r15_thread, JavaThread::last_Java_sp_offset()));
+
+ // Set an oopmap for the call site
+- oop_maps->add_gc_map(__ pc() - start,
++ // Use the same PC we used for the last java frame
++ oop_maps->add_gc_map(the_pc - start,
+ new OopMap( frame_size_in_words, 0 ));
+
+- __ reset_last_Java_frame(true, false);
++ // Clear fp AND pc
++ __ reset_last_Java_frame(true, true);
+
+ // Collect return values
+ __ movdbl(xmm0, Address(rsp, RegisterSaver::xmm0_offset_in_bytes()));
+@@ -2968,7 +2976,10 @@ void SharedRuntime::generate_uncommon_tr
+ // Prolog
+
+ // Use rbp because the frames look interpreted now
+- __ set_last_Java_frame(noreg, rbp, NULL);
++ // Save "the_pc" since it cannot easily be retrieved using the last_java_SP after we aligned SP.
++ // Don't need the precise return PC here, just precise enough to point into this code blob.
++ address the_pc = __ pc();
++ __ set_last_Java_frame(noreg, rbp, the_pc);
+
+ // Call C code. Need thread but NOT official VM entry
+ // crud. We cannot block on this call, no GC can happen. Call should
+@@ -2977,14 +2988,17 @@ void SharedRuntime::generate_uncommon_tr
+ //
+ // BasicType unpack_frames(JavaThread* thread, int exec_mode);
+
++ __ andptr(rsp, -(StackAlignmentInBytes)); // Align SP as required by ABI
+ __ mov(c_rarg0, r15_thread);
+ __ movl(c_rarg1, Deoptimization::Unpack_uncommon_trap);
+ __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::unpack_frames)));
+
+ // Set an oopmap for the call site
+- oop_maps->add_gc_map(__ pc() - start, new OopMap(SimpleRuntimeFrame::framesize, 0));
+-
+- __ reset_last_Java_frame(true, false);
++ // Use the same PC we used for the last java frame
++ oop_maps->add_gc_map(the_pc - start, new OopMap(SimpleRuntimeFrame::framesize, 0));
++
++ // Clear fp AND pc
++ __ reset_last_Java_frame(true, true);
+
+ // Pop self-frame.
+ __ leave(); // Epilog
+