Mercurial > hg > truffle
diff src/os_cpu/windows_x86/vm/os_windows_x86.cpp @ 5903:da4be62fb889
7147740: add assertions to check stack alignment on VM entry from generated code (x64)
Summary: check stack alignment on VM entry on x64.
Reviewed-by: kvn, never
author | roland |
---|---|
date | Mon, 27 Feb 2012 09:17:44 +0100 |
parents | 828eafbd85cc |
children | 957c266d8bc5 716e6ef4482a |
line wrap: on
line diff
--- a/src/os_cpu/windows_x86/vm/os_windows_x86.cpp Fri Feb 24 12:33:31 2012 -0800 +++ b/src/os_cpu/windows_x86/vm/os_windows_x86.cpp Mon Feb 27 09:17:44 2012 +0100 @@ -370,6 +370,26 @@ return frame(fr->sender_sp(), fr->link(), fr->sender_pc()); } +#ifndef AMD64 +// Returns an estimate of the current stack pointer. Result must be guaranteed +// to point into the calling threads stack, and be no lower than the current +// stack pointer. +address os::current_stack_pointer() { + int dummy; + address sp = (address)&dummy; + return sp; +} +#else +// Returns the current stack pointer. Accurate value needed for +// os::verify_stack_alignment(). +address os::current_stack_pointer() { + typedef address get_sp_func(); + get_sp_func* func = CAST_TO_FN_PTR(get_sp_func*, + StubRoutines::x86::get_previous_sp_entry()); + return (*func)(); +} +#endif + #ifndef AMD64 intptr_t* _get_previous_fp() { @@ -546,3 +566,11 @@ __asm fldcw fpu_cntrl_word; #endif // !AMD64 } + +#ifndef PRODUCT +void os::verify_stack_alignment() { +#ifdef AMD64 + assert(((intptr_t)os::current_stack_pointer() & (StackAlignmentInBytes-1)) == 0, "incorrect stack alignment"); +#endif +} +#endif