RFR(L): 8032410: compiler/uncommontrap/TestStackBangRbp.java times out on Solaris-Sparc V9
Roland Westrelin
roland.westrelin at oracle.com
Wed Apr 2 08:46:29 UTC 2014
> The question is why you got EXCEPTION_ACCESS_VIOLATION for normal stack bang? May be it is 8026775 again when one page is skipped during banging. Windows requires sequential pages touche.
I wasn’t aware of this requirement on windows. Thanks, Vladimir.
The interpreter bangs up to and including sp + StackShadowPages while the compiled code, with this change, bangs at sp + StackShadowPages + 1. So a page can be skipped and the requirement that all pages be touched sequentially cannot be guaranteed. So we either have to go back to banging at sp + StackShadowPages for the compiled code or enable the code that I pointed to in the signal on 32 bit. What do you think?
Roland.
>
> Thanks,
> Vladimir
>
> On 4/1/14 8:00 AM, Roland Westrelin wrote:
>> I tried to push that change and couldn’t because of a crash on windows 32 bit. The VM crashes at a stack banging instruction in compiled code but the sp looks to be perfectly valid (not in the yellow zone or red zone, within the stack bounds). I noticed this code in the windows signal handler:
>>
>> #ifdef _WIN64
>> //
>> // If it's a legal stack address map the entire region in
>> //
>> PEXCEPTION_RECORD exceptionRecord = exceptionInfo->ExceptionRecord;
>> address addr = (address) exceptionRecord->ExceptionInformation[1];
>> if (addr > thread->stack_yellow_zone_base() && addr < thread->stack_base() ) {
>> addr = (address)((uintptr_t)addr &
>> (~((uintptr_t)os::vm_page_size() - (uintptr_t)1)));
>> os::commit_memory((char *)addr, thread->stack_base() - addr,
>> !ExecMem);
>> return EXCEPTION_CONTINUE_EXECUTION;
>> }
>> else
>> #endif
>>
>> If I enable it on 32 bit, the jprt tests pass. Does anybody know why this is needed? Why this is WIN64 only?
>>
>> Roland.
>>
More information about the ppc-aix-port-dev
mailing list