comparison src/cpu/x86/vm/macroAssembler_x86.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 209aa13ab8c0
children 096c224171c4 61746b5f0ed3
comparison
equal deleted inserted replaced
13046:613e6a6fc328 13047:be525e91f65b
1379 subptr(tmp, os::vm_page_size()); 1379 subptr(tmp, os::vm_page_size());
1380 subl(size, os::vm_page_size()); 1380 subl(size, os::vm_page_size());
1381 jcc(Assembler::greater, loop); 1381 jcc(Assembler::greater, loop);
1382 1382
1383 // Bang down shadow pages too. 1383 // Bang down shadow pages too.
1384 // The -1 because we already subtracted 1 page. 1384 // At this point, (tmp-0) is the last address touched, so don't
1385 for (int i = 0; i< StackShadowPages-1; i++) { 1385 // touch it again. (It was touched as (tmp-pagesize) but then tmp
1386 // was post-decremented.) Skip this address by starting at i=1, and
1387 // touch a few more pages below. N.B. It is important to touch all
1388 // the way down to and including i=StackShadowPages.
1389 for (int i = 1; i <= StackShadowPages; i++) {
1386 // this could be any sized move but this is can be a debugging crumb 1390 // this could be any sized move but this is can be a debugging crumb
1387 // so the bigger the better. 1391 // so the bigger the better.
1388 movptr(Address(tmp, (-i*os::vm_page_size())), size ); 1392 movptr(Address(tmp, (-i*os::vm_page_size())), size );
1389 } 1393 }
1390 } 1394 }