Mercurial > hg > truffle
comparison src/cpu/sparc/vm/macroAssembler_sparc.cpp @ 13047:be525e91f65b
8026775: nsk/jvmti/RedefineClasses/StressRedefine crashes due to EXCEPTION_ACCESS_VIOLATION
Summary: Uncommon trap blob did not bang all the stack shadow pages
Reviewed-by: kvn, twisti, iveresov, jrose
author | mikael |
---|---|
date | Wed, 06 Nov 2013 06:51:24 -0800 |
parents | b4aa8fc5d0d5 |
children | 0bf37f737702 |
comparison
equal
deleted
inserted
replaced
13046:613e6a6fc328 | 13047:be525e91f65b |
---|---|
3524 cmp(Rsize, G0); | 3524 cmp(Rsize, G0); |
3525 br(Assembler::greater, false, Assembler::pn, loop); | 3525 br(Assembler::greater, false, Assembler::pn, loop); |
3526 delayed()->sub(Rtsp, Roffset, Rtsp); | 3526 delayed()->sub(Rtsp, Roffset, Rtsp); |
3527 | 3527 |
3528 // Bang down shadow pages too. | 3528 // Bang down shadow pages too. |
3529 // The -1 because we already subtracted 1 page. | 3529 // At this point, (tmp-0) is the last address touched, so don't |
3530 for (int i = 0; i< StackShadowPages-1; i++) { | 3530 // touch it again. (It was touched as (tmp-pagesize) but then tmp |
3531 // was post-decremented.) Skip this address by starting at i=1, and | |
3532 // touch a few more pages below. N.B. It is important to touch all | |
3533 // the way down to and including i=StackShadowPages. | |
3534 for (int i = 1; i <= StackShadowPages; i++) { | |
3531 set((-i*offset)+STACK_BIAS, Rscratch); | 3535 set((-i*offset)+STACK_BIAS, Rscratch); |
3532 st(G0, Rtsp, Rscratch); | 3536 st(G0, Rtsp, Rscratch); |
3533 } | 3537 } |
3534 } | 3538 } |
3535 | 3539 |