249 |
249 |
250 frame os::get_sender_for_C_frame(frame* fr) { |
250 frame os::get_sender_for_C_frame(frame* fr) { |
251 return frame(fr->sender_sp(), frame::unpatchable, fr->sender_pc()); |
251 return frame(fr->sender_sp(), frame::unpatchable, fr->sender_pc()); |
252 } |
252 } |
253 |
253 |
|
254 // Returns an estimate of the current stack pointer. Result must be guaranteed to |
|
255 // point into the calling threads stack, and be no lower than the current stack |
|
256 // pointer. |
|
257 address os::current_stack_pointer() { |
|
258 volatile int dummy; |
|
259 address sp = (address)&dummy + 8; // %%%% need to confirm if this is right |
|
260 return sp; |
|
261 } |
|
262 |
254 frame os::current_frame() { |
263 frame os::current_frame() { |
255 intptr_t* sp = StubRoutines::Sparc::flush_callers_register_windows_func()(); |
264 intptr_t* sp = StubRoutines::Sparc::flush_callers_register_windows_func()(); |
256 frame myframe(sp, frame::unpatchable, |
265 frame myframe(sp, frame::unpatchable, |
257 CAST_FROM_FN_PTR(address, os::current_frame)); |
266 CAST_FROM_FN_PTR(address, os::current_frame)); |
258 if (os::is_first_C_frame(&myframe)) { |
267 if (os::is_first_C_frame(&myframe)) { |
813 // For compiler1 the architecture is v8 and frps isn't present in v8 |
822 // For compiler1 the architecture is v8 and frps isn't present in v8 |
814 extern "C" void _mark_fpu_nosave() { |
823 extern "C" void _mark_fpu_nosave() { |
815 __asm__ __volatile__ ("wr %%g0, 0, %%fprs \n\t" : : :); |
824 __asm__ __volatile__ ("wr %%g0, 0, %%fprs \n\t" : : :); |
816 } |
825 } |
817 #endif //defined(__sparc) && defined(COMPILER2) |
826 #endif //defined(__sparc) && defined(COMPILER2) |
|
827 |
|
828 #ifndef PRODUCT |
|
829 void os::verify_stack_alignment() { |
|
830 } |
|
831 #endif |