< prev index next >

src/hotspot/os_cpu/solaris_sparc/thread_solaris_sparc.hpp

Print this page
rev 47415 : Add Thread Local handshakes and thread local polling


  46   // In polling_page_safepoint_handler_blob(s) we have to tail call other
  47   // blobs without blowing any registers.  A tail call requires some
  48   // register to jump with and we can't blow any registers, so it must
  49   // be restored in the delay slot.  'restore' cannot be used as it
  50   // will chop the heads off of 64-bit %o registers in the 32-bit
  51   // build.  Instead we reload the registers using G2_thread and this
  52   // location.  Must be 64bits in the 32-bit LION build.
  53   jdouble _o_reg_temps[6];
  54 
  55   // a stack pointer older than any java frame stack pointer.  It is
  56   // used to validate stack pointers in frame::next_younger_sp (it
  57   // provides the upper bound in the range check).  This is necessary
  58   // on Solaris/SPARC since the ucontext passed to a signal handler is
  59   // sometimes corrupt and we need a way to check the extracted sp.
  60   intptr_t* _base_of_stack_pointer;
  61 
  62 public:
  63 
  64   static int o_reg_temps_offset_in_bytes() { return offset_of(JavaThread, _o_reg_temps); }
  65 
  66   static int saved_exception_npc_offset_in_bytes() { return offset_of(JavaThread,_saved_exception_npc); }
  67 
  68   address  saved_exception_npc()             { return _saved_exception_npc; }
  69   void set_saved_exception_npc(address a)    { _saved_exception_npc = a; }
  70 
  71 
  72 public:
  73 
  74   intptr_t* base_of_stack_pointer() { return _base_of_stack_pointer; }
  75 
  76   void set_base_of_stack_pointer(intptr_t* base_sp) {
  77     _base_of_stack_pointer = base_sp;
  78   }
  79 
  80   void record_base_of_stack_pointer() {
  81     intptr_t *sp = (intptr_t *)(((intptr_t)StubRoutines::Sparc::flush_callers_register_windows_func()()));
  82     intptr_t *ysp;
  83     while((ysp = (intptr_t*)sp[FP->sp_offset_in_saved_window()]) != NULL) {
  84       sp = (intptr_t *)((intptr_t)ysp + STACK_BIAS);
  85     }
  86     _base_of_stack_pointer = sp;


  46   // In polling_page_safepoint_handler_blob(s) we have to tail call other
  47   // blobs without blowing any registers.  A tail call requires some
  48   // register to jump with and we can't blow any registers, so it must
  49   // be restored in the delay slot.  'restore' cannot be used as it
  50   // will chop the heads off of 64-bit %o registers in the 32-bit
  51   // build.  Instead we reload the registers using G2_thread and this
  52   // location.  Must be 64bits in the 32-bit LION build.
  53   jdouble _o_reg_temps[6];
  54 
  55   // a stack pointer older than any java frame stack pointer.  It is
  56   // used to validate stack pointers in frame::next_younger_sp (it
  57   // provides the upper bound in the range check).  This is necessary
  58   // on Solaris/SPARC since the ucontext passed to a signal handler is
  59   // sometimes corrupt and we need a way to check the extracted sp.
  60   intptr_t* _base_of_stack_pointer;
  61 
  62 public:
  63 
  64   static int o_reg_temps_offset_in_bytes() { return offset_of(JavaThread, _o_reg_temps); }
  65 
  66   static ByteSize saved_exception_npc_offset() { return byte_offset_of(JavaThread,_saved_exception_npc); }
  67 
  68   address  saved_exception_npc()             { return _saved_exception_npc; }
  69   void set_saved_exception_npc(address a)    { _saved_exception_npc = a; }
  70 
  71 
  72 public:
  73 
  74   intptr_t* base_of_stack_pointer() { return _base_of_stack_pointer; }
  75 
  76   void set_base_of_stack_pointer(intptr_t* base_sp) {
  77     _base_of_stack_pointer = base_sp;
  78   }
  79 
  80   void record_base_of_stack_pointer() {
  81     intptr_t *sp = (intptr_t *)(((intptr_t)StubRoutines::Sparc::flush_callers_register_windows_func()()));
  82     intptr_t *ysp;
  83     while((ysp = (intptr_t*)sp[FP->sp_offset_in_saved_window()]) != NULL) {
  84       sp = (intptr_t *)((intptr_t)ysp + STACK_BIAS);
  85     }
  86     _base_of_stack_pointer = sp;
< prev index next >