--- old/src/cpu/sparc/vm/macroAssembler_sparc.cpp 2013-11-05 11:43:58.607542925 -0800 +++ new/src/cpu/sparc/vm/macroAssembler_sparc.cpp 2013-11-05 11:43:58.367665942 -0800 @@ -3526,8 +3526,11 @@ delayed()->sub(Rtsp, Roffset, Rtsp); // Bang down shadow pages too. - // The -1 because we already subtracted 1 page. - for (int i = 0; i< StackShadowPages-1; i++) { + // At this point, (tmp-0) is the last address touched, so don't touch it again. + // (It was touched as (tmp-pagesize) but then tmp was post-decremented.) + // Skip this address by starting at i=1, and touch a few more pages below. + // N.B. It is important to touch all the down to and including i=StackShadowPages. + for (int i = 1; i <= StackShadowPages; i++) { set((-i*offset)+STACK_BIAS, Rscratch); st(G0, Rtsp, Rscratch); }