You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2007/08/07 19:04:08 UTC
svn commit: r563557 - in /harmony/enhanced/drlvm/trunk: build/make/excludes/
vm/jitrino/src/codegenerator/ia32/ vm/port/src/lil/em64t/pim/
vm/vmcore/include/ vm/vmcore/src/exception/ vm/vmcore/src/jit/
vm/vmcore/src/util/linux/ vm/vmcore/src/util/win/i...
Author: gshimansky
Date: Tue Aug 7 10:04:04 2007
New Revision: 563557
URL: http://svn.apache.org/viewvc?view=rev&rev=563557
Log:
Applied patch from HARMONY-4264
[drlvm][stack] Tune size requred for set up guard page, class loading and method compilation.
Modified:
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jet
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jit
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.opt
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.srv
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jet
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jit
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.opt
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.srv
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jet
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jit
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.opt
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.srv
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jet
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jit
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.opt
harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.srv
harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackInfo.cpp
harmony/enhanced/drlvm/trunk/vm/port/src/lil/em64t/pim/stack_iterator_em64t.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h
harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_jit.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jet
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jet?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jet (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jet Tue Aug 7 10:04:04 2007
@@ -7,6 +7,9 @@
# HARMONY-3495 hangs intermittently
gc/NPE.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# HARMONY-3917
gc/PhantomReferenceTest.java
gc/WeakReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jit
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jit?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jit (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.jit Tue Aug 7 10:04:04 2007
@@ -7,6 +7,9 @@
# HARMONY-3495 hangs intermittently
gc/NPE.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# HARMONY-3917
gc/PhantomReferenceTest.java
gc/WeakReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.opt
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.opt?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.opt (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.opt Tue Aug 7 10:04:04 2007
@@ -7,6 +7,9 @@
# HARMONY-3495 hangs intermittently
gc/NPE.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# HARMONY-3917
gc/PhantomReferenceTest.java
gc/WeakReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.srv
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.srv?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.srv (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86.srv Tue Aug 7 10:04:04 2007
@@ -7,8 +7,8 @@
# HARMONY-3495 hangs intermittently
gc/NPE.java
-# HARMONY-3731
-StackTest.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
# HARMONY-3917
gc/PhantomReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jet
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jet?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jet (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jet Tue Aug 7 10:04:04 2007
@@ -6,16 +6,14 @@
gc/MultiThreads.java
perf/MultiThreadsSimple.java
-# HARMONY-2972
-StackTest.java
-exception/FinalizeStackTest.java
-stress/Stack.java
-
# fails on Ubuntu6 x86_64
gc/Mark.java
# HARMONY-2772 fails intermittently
stress/Mix.java
+
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
# HARMONY-3495 hangs intermittently
gc/NPE.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jit
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jit?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jit (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.jit Tue Aug 7 10:04:04 2007
@@ -6,16 +6,14 @@
gc/MultiThreads.java
perf/MultiThreadsSimple.java
-# HARMONY-2972
-StackTest.java
-exception/FinalizeStackTest.java
-stress/Stack.java
-
# fails on Ubuntu6 x86_64
gc/Mark.java
# HARMONY-2772 fails intermittently
stress/Mix.java
+
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
# HARMONY-3495 hangs intermittently
gc/NPE.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.opt
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.opt?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.opt (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.opt Tue Aug 7 10:04:04 2007
@@ -6,16 +6,14 @@
gc/MultiThreads.java
perf/MultiThreadsSimple.java
-# HARMONY-2972
-StackTest.java
-exception/FinalizeStackTest.java
-stress/Stack.java
-
# fails on Ubuntu6 x86_64
gc/Mark.java
# HARMONY-2772
stress/Mix.java
+
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
# HARMONY-3299 intermittent
stress/Sync.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.srv
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.srv?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.srv (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.linux.x86_64.srv Tue Aug 7 10:04:04 2007
@@ -6,16 +6,14 @@
gc/MultiThreads.java
perf/MultiThreadsSimple.java
-# HARMONY-2972
-StackTest.java
-exception/FinalizeStackTest.java
-stress/Stack.java
-
# fails on Ubuntu6 x86_64
gc/Mark.java
# HARMONY-2772
stress/Mix.java
+
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
# HARMONY-3299 intermittent
stress/Sync.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jet
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jet?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jet (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jet Tue Aug 7 10:04:04 2007
@@ -4,6 +4,9 @@
# HARMONY-2977
io/Integers.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# HARMONY-3917
gc/PhantomReferenceTest.java
gc/WeakReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jit
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jit?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jit (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.jit Tue Aug 7 10:04:04 2007
@@ -4,6 +4,9 @@
# HARMONY-2977
io/Integers.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# HARMONY-3917
gc/PhantomReferenceTest.java
gc/WeakReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.opt
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.opt?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.opt (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.opt Tue Aug 7 10:04:04 2007
@@ -4,6 +4,9 @@
# HARMONY-2977
io/Integers.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# HARMONY-3917
gc/PhantomReferenceTest.java
gc/WeakReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.srv
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.srv?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.srv (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86.srv Tue Aug 7 10:04:04 2007
@@ -4,8 +4,8 @@
# HARMONY-2977
io/Integers.java
-# HARMONY-3731
-StackTest.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
# HARMONY-3917
gc/PhantomReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jet
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jet?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jet (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jet Tue Aug 7 10:04:04 2007
@@ -9,6 +9,9 @@
# HARMONY-2977
io/Integers.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# HARMONY-3917
gc/PhantomReferenceTest.java
gc/WeakReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jit
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jit?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jit (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.jit Tue Aug 7 10:04:04 2007
@@ -14,6 +14,9 @@
# HARMONY-2977
io/Integers.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# HARMONY-3917
gc/PhantomReferenceTest.java
gc/WeakReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.opt
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.opt?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.opt (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.opt Tue Aug 7 10:04:04 2007
@@ -11,6 +11,9 @@
exception/FinalizeStackTest.java
stress/Stack.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# HARMONY-3917
gc/PhantomReferenceTest.java
gc/WeakReferenceTest.java
Modified: harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.srv
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.srv?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.srv (original)
+++ harmony/enhanced/drlvm/trunk/build/make/excludes/exclude.drlvm_smoke.windows.x86_64.srv Tue Aug 7 10:04:04 2007
@@ -11,6 +11,9 @@
exception/FinalizeStackTest.java
stress/Stack.java
+# HARMONY-3010 HARMONY-4292
+stress/Stack.java
+
# Server mode failures specific to Windows x86_64
stress/Mix.java
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackInfo.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackInfo.cpp?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackInfo.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackInfo.cpp Tue Aug 7 10:04:04 2007
@@ -213,43 +213,46 @@
<<::std::endl;
}
- assert(!(context->rsp & 15));
context->rsp += stackDepth;
+ assert((context->rsp & 0xf) == 0x8);
POINTER_SIZE_INT offset = context->rsp;
context->p_rip = (POINTER_SIZE_INT *) (offset);
- offset += icalleeOffset;
- if(getRegMask(RegName_R15) & icalleeMask) {
- context->p_r15 = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_R14) & icalleeMask) {
- context->p_r14 = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_R13) & icalleeMask) {
- context->p_r13 = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_R12) & icalleeMask) {
- context->p_r12 = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_RDI) & icalleeMask) {
- context->p_rdi = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_RSI) & icalleeMask) {
- context->p_rsi = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_RBP) & icalleeMask) {
- context->p_rbp = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_RBX) & icalleeMask) {
- context->p_rbx = (POINTER_SIZE_INT *) offset;
+ offset += icalleeOffset;
+
+ if(stackDepth != 0) {
+ if(getRegMask(RegName_R15) & icalleeMask) {
+ context->p_r15 = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_R14) & icalleeMask) {
+ context->p_r14 = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_R13) & icalleeMask) {
+ context->p_r13 = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_R12) & icalleeMask) {
+ context->p_r12 = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_RDI) & icalleeMask) {
+ context->p_rdi = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_RSI) & icalleeMask) {
+ context->p_rsi = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_RBP) & icalleeMask) {
+ context->p_rbp = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_RBX) & icalleeMask) {
+ context->p_rbx = (POINTER_SIZE_INT *) offset;
+ }
}
context->rsp += offset_step; //IP register size
#else
@@ -265,21 +268,23 @@
uint32 offset = context->esp;
context->p_eip = (POINTER_SIZE_INT *) offset;
- offset += icalleeOffset;
- if(getRegMask(RegName_EDI) & icalleeMask) {
- context->p_edi = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_ESI) & icalleeMask) {
- context->p_esi = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_EBP) & icalleeMask) {
- context->p_ebp = (POINTER_SIZE_INT *) offset;
- offset += offset_step;
- }
- if(getRegMask(RegName_EBX) & icalleeMask) {
- context->p_ebx = (POINTER_SIZE_INT *) offset;
+ offset += icalleeOffset;
+ if(stackDepth != 0) {
+ if(getRegMask(RegName_EDI) & icalleeMask) {
+ context->p_edi = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_ESI) & icalleeMask) {
+ context->p_esi = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_EBP) & icalleeMask) {
+ context->p_ebp = (POINTER_SIZE_INT *) offset;
+ offset += offset_step;
+ }
+ if(getRegMask(RegName_EBX) & icalleeMask) {
+ context->p_ebx = (POINTER_SIZE_INT *) offset;
+ }
}
context->esp += offset_step; //IP register size
#endif
Modified: harmony/enhanced/drlvm/trunk/vm/port/src/lil/em64t/pim/stack_iterator_em64t.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/port/src/lil/em64t/pim/stack_iterator_em64t.cpp?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/port/src/lil/em64t/pim/stack_iterator_em64t.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/port/src/lil/em64t/pim/stack_iterator_em64t.cpp Tue Aug 7 10:04:04 2007
@@ -495,7 +495,8 @@
}
void si_set_callback(StackIterator* si, NativeCodePtr* callback) {
- si->jit_frame_context.rsp = si->jit_frame_context.rsp - 4;
+ const static uint64 red_zone_size = 0x80;
+ si->jit_frame_context.rsp = si->jit_frame_context.rsp - red_zone_size - sizeof(void*);
*((uint64*) si->jit_frame_context.rsp) = *(si->jit_frame_context.p_rip);
si->jit_frame_context.p_rip = ((uint64*)callback);
}
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h Tue Aug 7 10:04:04 2007
@@ -270,6 +270,7 @@
void exn_rethrow_if_pending();
void set_guard_stack();
+void remove_guard_stack();
void init_stack_info();
#ifndef WIN32
void remove_guard_stack();
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_jit.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_jit.cpp?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_jit.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/exception/exceptions_jit.cpp Tue Aug 7 10:04:04 2007
@@ -158,7 +158,12 @@
tmn_suspend_enable();
jthrowable exc_object = create_exception(
(Class*) exn_class, (Method*) exn_constr, vm_exn_constr_args);
- result = exc_object->object;
+
+ if (exc_object) {
+ result = exc_object->object;
+ } else {
+ result = NULL;
+ }
tmn_suspend_disable();
}
set_unwindable(unwindable);
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jit/compile.cpp Tue Aug 7 10:04:04 2007
@@ -747,11 +747,9 @@
} else if (method->get_state()==Method::ST_NotCompiled && exn_raised()) {
method->unlock();
return JIT_FAILURE;
-#ifndef _EM64T_
- } else if(!check_available_stack_size(get_default_stack_size()/100)) {
+ } else if(!check_available_stack_size(0x4000)) {
method->unlock();
return JIT_FAILURE;
-#endif
}
if (method->is_native()) {
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp Tue Aug 7 10:04:04 2007
@@ -137,6 +137,21 @@
: /* no output operands */
: /* no input operands */
);
+#ifdef _DEBUG
+ asm (
+ "movq %%rbp, %%rsp\n"
+ "popq %%rbp\n"
+ "retq $0x80;\n"
+ : /* no output operands */
+ : /* no input operands */
+ );
+#else // _DEBUG
+ asm (
+ "retq $0x80;\n"
+ : /* no output operands */
+ : /* no input operands */
+ );
+#endif // ! _DEBUG}
}
// exception catch support for JVMTI
@@ -291,11 +306,42 @@
void set_guard_stack();
void init_stack_info() {
- p_TLS_vmthread->stack_addr = find_stack_addr();
- p_TLS_vmthread->stack_size = hythread_get_thread_stacksize(hythread_self());
+ char* stack_addr = (char *)find_stack_addr();
+ unsigned int stack_size = hythread_get_thread_stacksize(hythread_self());
+ p_TLS_vmthread->stack_addr = stack_addr;
+ p_TLS_vmthread->stack_size = stack_size;
common_guard_stack_size = find_guard_stack_size();
common_guard_page_size =find_guard_page_size();
+ // stack should be mapped so it's result of future mapping
+ char* res;
+
+ // begin of the stack can be protected by OS, but this part already mapped
+ // found address of current stack page
+ char* current_page_addr =
+ (char*)(((size_t)&res) & (~(common_guard_page_size-1)));
+
+ // leave place for mmap work
+ char* mapping_page_addr = current_page_addr - common_guard_page_size;
+
+ // makes sure that stack allocated till mapping_page_addr
+ //stack_holder(mapping_page_addr);
+
+ // found size of the stack area which should be maped
+ size_t stack_mapping_size = (size_t)mapping_page_addr
+ - (size_t)stack_addr + stack_size;
+
+ // maps unmapped part of the stack
+ res = (char*) mmap(stack_addr - stack_size,
+ stack_mapping_size,
+ PROT_READ | PROT_WRITE,
+ MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN,
+ -1,
+ 0);
+ // stack should be mapped, checks result
+ assert(res == (stack_addr - stack_size));
+
+ // set guard page
set_guard_stack();
}
@@ -306,6 +352,9 @@
size_t guard_stack_size = get_guard_stack_size();
size_t guard_page_size = get_guard_page_size();
+ assert(((size_t)(&stack_addr)) > ((size_t)((char*)stack_addr - stack_size
+ + guard_stack_size + 2 * guard_page_size)));
+
err = mprotect(stack_addr - stack_size + guard_page_size + guard_stack_size,
guard_page_size, PROT_NONE);
@@ -320,16 +369,31 @@
}
size_t get_available_stack_size() {
- char* stack_adrr = (char*) get_stack_addr();
- size_t used_stack_size = stack_adrr - ((char*)&stack_adrr);
- size_t available_stack_size =
- get_stack_size() - used_stack_size
+ char* stack_addr = (char*) get_stack_addr();
+ size_t used_stack_size = stack_addr - ((char*)&stack_addr);
+ int available_stack_size;
+
+ if (((char*)&stack_addr) > (stack_addr - get_stack_size() + get_guard_page_size() + get_guard_stack_size())) {
+ available_stack_size = get_stack_size() - used_stack_size
- 2 * get_guard_page_size() - get_guard_stack_size();
- return available_stack_size;
+ } else {
+ available_stack_size = get_stack_size() - used_stack_size - get_guard_page_size();
+ }
+
+ if (available_stack_size > 0) {
+ return (size_t) available_stack_size;
+ } else {
+ return 0;
+ }
}
bool check_available_stack_size(size_t required_size) {
- if (get_available_stack_size() < required_size) {
+ size_t available_stack_size = get_available_stack_size();
+
+ if (available_stack_size < required_size) {
+ if (available_stack_size < get_guard_stack_size()) {
+ remove_guard_stack();
+ }
Global_Env *env = VM_Global_State::loader_env;
exn_raise_by_class(env->java_lang_StackOverflowError_Class);
return false;
@@ -339,7 +403,7 @@
}
size_t get_restore_stack_size() {
- return 0x8000;
+ return 0x0800;
}
bool check_stack_size_enough_for_exception_catch(void* sp) {
@@ -379,6 +443,10 @@
char* guard_page_begin = stack_addr - stack_size + guard_page_size + guard_stack_size;
char* guard_page_end = guard_page_begin + guard_page_size;
+
+ // FIXME: Workaround for main thread
+ guard_page_end += guard_page_size;
+
char* fault_addr = (char*)(info->si_addr);
//char* esp_value = (char*)(uc->uc_mcontext.gregs[REG_ESP]);
@@ -410,7 +478,6 @@
} else {
remove_guard_stack();
exn_raise_by_class(env->java_lang_StackOverflowError_Class);
- p_TLS_vmthread->restore_guard_page = true;
}
}
}
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp Tue Aug 7 10:04:04 2007
@@ -391,6 +391,9 @@
size_t guard_stack_size = get_guard_stack_size();
size_t guard_page_size = get_guard_page_size();
+ assert(((size_t)(&stack_addr)) > ((size_t)((char*)stack_addr - stack_size
+ + guard_stack_size + 2 * guard_page_size)));
+
err = mprotect(stack_addr - stack_size + guard_page_size +
guard_stack_size, guard_page_size, PROT_NONE );
@@ -409,19 +412,34 @@
}
size_t get_available_stack_size() {
- char* stack_adrr = (char*) get_stack_addr();
- size_t used_stack_size = stack_adrr - ((char*)&stack_adrr);
- size_t available_stack_size =
- get_stack_size() - used_stack_size
+ char* stack_addr = (char*) get_stack_addr();
+ size_t used_stack_size = stack_addr - ((char*)&stack_addr);
+ int available_stack_size;
+
+ if (((char*)&stack_addr) > (stack_addr - get_stack_size() + get_guard_page_size() + get_guard_stack_size())) {
+ available_stack_size = get_stack_size() - used_stack_size
- 2 * get_guard_page_size() - get_guard_stack_size();
- return available_stack_size;
+ } else {
+ available_stack_size = get_stack_size() - used_stack_size - get_guard_page_size();
+ }
+
+ if (available_stack_size > 0) {
+ return (size_t) available_stack_size;
+ } else {
+ return 0;
+ }
}
size_t get_default_stack_size() {
size_t default_stack_size = get_stack_size();
return default_stack_size;
}
bool check_available_stack_size(size_t required_size) {
- if (get_available_stack_size() < required_size) {
+ size_t available_stack_size = get_available_stack_size();
+
+ if (available_stack_size < required_size) {
+ if (available_stack_size < get_guard_stack_size()) {
+ remove_guard_stack();
+ }
Global_Env *env = VM_Global_State::loader_env;
exn_raise_by_class(env->java_lang_StackOverflowError_Class);
return false;
@@ -431,7 +449,7 @@
}
size_t get_restore_stack_size() {
- return 0x8000;
+ return 0x0200;
}
bool check_stack_size_enough_for_exception_catch(void* sp) {
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp Tue Aug 7 10:04:04 2007
@@ -273,6 +273,9 @@
size_t guard_stack_size = get_guard_stack_size();
size_t guard_page_size = get_guard_page_size();
+ assert(((size_t)(&stack_addr)) > ((size_t)((char*)stack_addr - stack_size
+ + guard_stack_size + 2 * guard_page_size)));
+
// map the guard page and protect it
void UNUSED *res = mmap(stack_addr - stack_size + guard_page_size +
guard_stack_size, guard_page_size, PROT_READ | PROT_WRITE,
@@ -304,12 +307,22 @@
}
size_t get_available_stack_size() {
- char* stack_adrr = (char*) get_stack_addr();
- size_t used_stack_size = stack_adrr - ((char*)&stack_adrr);
- size_t available_stack_size =
- get_stack_size() - used_stack_size
+ char* stack_addr = (char*) get_stack_addr();
+ size_t used_stack_size = stack_addr - ((char*)&stack_addr);
+ int available_stack_size;
+
+ if (((char*)&stack_addr) > (stack_addr - get_stack_size() + get_guard_page_size() + get_guard_stack_size())) {
+ available_stack_size = get_stack_size() - used_stack_size
- 2 * get_guard_page_size() - get_guard_stack_size();
- return available_stack_size;
+ } else {
+ available_stack_size = get_stack_size() - used_stack_size - get_guard_page_size();
+ }
+
+ if (available_stack_size > 0) {
+ return (size_t) available_stack_size;
+ } else {
+ return 0;
+ }
}
size_t get_default_stack_size() {
@@ -318,7 +331,12 @@
}
bool check_available_stack_size(size_t required_size) {
- if (get_available_stack_size() < required_size) {
+ size_t available_stack_size = get_available_stack_size();
+
+ if (available_stack_size < required_size) {
+ if (available_stack_size < get_guard_stack_size()) {
+ remove_guard_stack();
+ }
exn_raise_by_name("java/lang/StackOverflowError");
return false;
} else {
@@ -327,7 +345,7 @@
}
size_t get_restore_stack_size() {
- return 0x8000;
+ return 0x0200;
}
bool check_stack_size_enough_for_exception_catch(void* sp) {
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp?view=diff&rev=563557&r1=563556&r2=563557
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp Tue Aug 7 10:04:04 2007
@@ -156,6 +156,7 @@
void* stack_addr = get_stack_addr();
size_t stack_size = get_stack_size();
size_t page_size = get_guard_page_size();
+ assert(((size_t)(&stack_addr)) > ((size_t)((char*)stack_addr - stack_size + 3 * page_size)));
if (!VirtualFree((char*)stack_addr - stack_size + page_size,
page_size, MEM_DECOMMIT)) {
@@ -174,20 +175,45 @@
p_TLS_vmthread->restore_guard_page = false;
}
+void remove_guard_stack() {
+ void* stack_addr = get_stack_addr();
+ size_t stack_size = get_stack_size();
+ size_t page_size = get_guard_page_size();
+ DWORD oldProtect;
+
+ assert(((size_t)(&stack_addr)) > ((size_t)((char*)stack_addr - stack_size + 3 * page_size)));
+ p_TLS_vmthread->restore_guard_page = true;
+
+ if (!VirtualProtect((char*)stack_addr - stack_size + page_size + page_size,
+ page_size, PAGE_READWRITE, &oldProtect)) {
+ // should be successful always
+ assert(0);
+ }
+}
+
size_t get_available_stack_size() {
- char* stack_adrr = (char*) get_stack_addr();
- size_t used_stack_size = ((size_t)stack_adrr) - ((size_t)(&stack_adrr));
- size_t available_stack_size =
+ char* stack_addr = (char*) get_stack_addr();
+ size_t used_stack_size = ((size_t)stack_addr) - ((size_t)(&stack_addr));
+ int available_stack_size =
get_stack_size() - used_stack_size
- 2 * get_guard_page_size() - get_guard_stack_size();
- return available_stack_size;
+
+ if (available_stack_size > 0) {
+ return (size_t) available_stack_size;
+ } else {
+ return 0;
+ }
}
size_t get_default_stack_size() {
size_t default_stack_size = get_stack_size();
return default_stack_size;
}
bool check_available_stack_size(size_t required_size) {
- if (get_available_stack_size() < required_size) {
+ size_t available_stack_size = get_available_stack_size();
+ if (available_stack_size < required_size) {
+ if (available_stack_size < get_guard_stack_size()) {
+ remove_guard_stack();
+ }
Global_Env *env = VM_Global_State::loader_env;
exn_raise_by_class(env->java_lang_StackOverflowError_Class);
return false;
@@ -197,7 +223,7 @@
}
size_t get_restore_stack_size() {
- return 0x8000;
+ return 0x0100;
}
bool check_stack_size_enough_for_exception_catch(void* sp) {