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;
|