< prev index next >

src/os_cpu/linux_zero/vm/os_linux_zero.cpp

Print this page
rev 7905 : 8074552:  SafeFetch32 and SafeFetchN do not work in error handling
Summary: handle SafeFetch faults in secondary signal handlers
Contributed-by: Thomas Stuefe


  83   // even in its subfields (as defined by the CPU immediate fields,
  84   // if the CPU splits constants across multiple instructions).
  85 #ifdef SPARC
  86   // On SPARC, 0 != %hi(any real address), because there is no
  87   // allocation in the first 1Kb of the virtual address space.
  88   return (char *) 0;
  89 #else
  90   // This is the value for x86; works pretty well for PPC too.
  91   return (char *) -1;
  92 #endif // SPARC
  93 }
  94 
  95 void os::initialize_thread(Thread * thr){
  96   // Nothing to do.
  97 }
  98 
  99 address os::Linux::ucontext_get_pc(ucontext_t* uc) {
 100   ShouldNotCallThis();
 101 }
 102 




 103 ExtendedPC os::fetch_frame_from_context(void* ucVoid,
 104                                         intptr_t** ret_sp,
 105                                         intptr_t** ret_fp) {
 106   ShouldNotCallThis();
 107 }
 108 
 109 frame os::fetch_frame_from_context(void* ucVoid) {
 110   ShouldNotCallThis();
 111 }
 112 
 113 extern "C" JNIEXPORT int
 114 JVM_handle_linux_signal(int sig,
 115                         siginfo_t* info,
 116                         void* ucVoid,
 117                         int abort_if_unrecognized) {
 118   ucontext_t* uc = (ucontext_t*) ucVoid;
 119 
 120   Thread* t = ThreadLocalStorage::get_thread_slow();
 121 
 122   SignalHandlerMark shm(t);




  83   // even in its subfields (as defined by the CPU immediate fields,
  84   // if the CPU splits constants across multiple instructions).
  85 #ifdef SPARC
  86   // On SPARC, 0 != %hi(any real address), because there is no
  87   // allocation in the first 1Kb of the virtual address space.
  88   return (char *) 0;
  89 #else
  90   // This is the value for x86; works pretty well for PPC too.
  91   return (char *) -1;
  92 #endif // SPARC
  93 }
  94 
  95 void os::initialize_thread(Thread * thr){
  96   // Nothing to do.
  97 }
  98 
  99 address os::Linux::ucontext_get_pc(ucontext_t* uc) {
 100   ShouldNotCallThis();
 101 }
 102 
 103 void os::Linux::ucontext_set_pc(ucontext_t * uc, address pc) {
 104   ShouldNotCallThis();
 105 }
 106 
 107 ExtendedPC os::fetch_frame_from_context(void* ucVoid,
 108                                         intptr_t** ret_sp,
 109                                         intptr_t** ret_fp) {
 110   ShouldNotCallThis();
 111 }
 112 
 113 frame os::fetch_frame_from_context(void* ucVoid) {
 114   ShouldNotCallThis();
 115 }
 116 
 117 extern "C" JNIEXPORT int
 118 JVM_handle_linux_signal(int sig,
 119                         siginfo_t* info,
 120                         void* ucVoid,
 121                         int abort_if_unrecognized) {
 122   ucontext_t* uc = (ucontext_t*) ucVoid;
 123 
 124   Thread* t = ThreadLocalStorage::get_thread_slow();
 125 
 126   SignalHandlerMark shm(t);


< prev index next >