Mercurial > hg > graal-compiler
comparison src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp @ 11153:af21010d1062
Merge
author | dcubed |
---|---|
date | Thu, 18 Jul 2013 12:35:55 -0700 |
parents | 5e3b6f79d280 980532a806a5 |
children | 2c2a99f6cf83 |
comparison
equal
deleted
inserted
replaced
11151:5e3b6f79d280 | 11153:af21010d1062 |
---|---|
350 return addr != NULL; | 350 return addr != NULL; |
351 #endif // AMD64 | 351 #endif // AMD64 |
352 | 352 |
353 } | 353 } |
354 | 354 |
355 extern "C" void Fetch32PFI () ; | |
356 extern "C" void Fetch32Resume () ; | |
357 #ifdef AMD64 | |
358 extern "C" void FetchNPFI () ; | |
359 extern "C" void FetchNResume () ; | |
360 #endif // AMD64 | |
361 | |
362 extern "C" JNIEXPORT int | 355 extern "C" JNIEXPORT int |
363 JVM_handle_solaris_signal(int sig, siginfo_t* info, void* ucVoid, | 356 JVM_handle_solaris_signal(int sig, siginfo_t* info, void* ucVoid, |
364 int abort_if_unrecognized) { | 357 int abort_if_unrecognized) { |
365 ucontext_t* uc = (ucontext_t*) ucVoid; | 358 ucontext_t* uc = (ucontext_t*) ucVoid; |
366 | 359 |
438 //%note os_trap_1 | 431 //%note os_trap_1 |
439 if (info != NULL && uc != NULL && thread != NULL) { | 432 if (info != NULL && uc != NULL && thread != NULL) { |
440 // factor me: getPCfromContext | 433 // factor me: getPCfromContext |
441 pc = (address) uc->uc_mcontext.gregs[REG_PC]; | 434 pc = (address) uc->uc_mcontext.gregs[REG_PC]; |
442 | 435 |
443 // SafeFetch32() support | 436 if (StubRoutines::is_safefetch_fault(pc)) { |
444 if (pc == (address) Fetch32PFI) { | 437 uc->uc_mcontext.gregs[REG_PC] = intptr_t(StubRoutines::continuation_for_safefetch_fault(pc)); |
445 uc->uc_mcontext.gregs[REG_PC] = intptr_t(Fetch32Resume) ; | 438 return true; |
446 return true ; | 439 } |
447 } | |
448 #ifdef AMD64 | |
449 if (pc == (address) FetchNPFI) { | |
450 uc->uc_mcontext.gregs [REG_PC] = intptr_t(FetchNResume) ; | |
451 return true ; | |
452 } | |
453 #endif // AMD64 | |
454 | 440 |
455 // Handle ALL stack overflow variations here | 441 // Handle ALL stack overflow variations here |
456 if (sig == SIGSEGV && info->si_code == SEGV_ACCERR) { | 442 if (sig == SIGSEGV && info->si_code == SEGV_ACCERR) { |
457 address addr = (address) info->si_addr; | 443 address addr = (address) info->si_addr; |
458 if (thread->in_stack_yellow_zone(addr)) { | 444 if (thread->in_stack_yellow_zone(addr)) { |