aboutsummaryrefslogtreecommitdiff
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
parent49d2e9e973d46c69ffe7a44adedd94c48e8b0e7b (diff)
downloadports-37e17acfdfd91917bf8589a8ba14ed9a6629cf8d.tar.gz
ports-37e17acfdfd91917bf8589a8ba14ed9a6629cf8d.zip
Notes
-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
+