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
This commit is contained in:
parent
49d2e9e973
commit
37e17acfdf
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=323651
3 changed files with 78 additions and 1 deletions
|
@ -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 \
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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
|
||||
|
Loading…
Reference in a new issue