< prev index next >

src/os_cpu/windows_x86/vm/os_windows_x86.cpp

Print this page

        

*** 83,100 **** // Warning: This routine must NEVER be inlined since we'd end up with // multiple offsets. // volatile Thread* wrapperthread = thread; ! if ( ThreadLocalStorage::get_thread_ptr_offset() == 0 ) { int thread_ptr_offset; __asm { lea eax, dword ptr wrapperthread; sub eax, dword ptr FS:[0H]; mov thread_ptr_offset, eax }; ! ThreadLocalStorage::set_thread_ptr_offset(thread_ptr_offset); } #ifdef ASSERT // Verify that the offset hasn't changed since we initally captured // it. This might happen if we accidentally ended up with an // inlined version of this routine. --- 83,100 ---- // Warning: This routine must NEVER be inlined since we'd end up with // multiple offsets. // volatile Thread* wrapperthread = thread; ! if (os::win32::get_thread_ptr_offset() == 0) { int thread_ptr_offset; __asm { lea eax, dword ptr wrapperthread; sub eax, dword ptr FS:[0H]; mov thread_ptr_offset, eax }; ! os::win32::set_thread_ptr_offset(thread_ptr_offset); } #ifdef ASSERT // Verify that the offset hasn't changed since we initally captured // it. This might happen if we accidentally ended up with an // inlined version of this routine.
*** 103,113 **** __asm { lea eax, dword ptr wrapperthread; sub eax, dword ptr FS:[0H]; mov test_thread_ptr_offset, eax }; ! assert(test_thread_ptr_offset == ThreadLocalStorage::get_thread_ptr_offset(), "thread pointer offset from SEH changed"); } #endif // ASSERT #endif // !AMD64 --- 103,113 ---- __asm { lea eax, dword ptr wrapperthread; sub eax, dword ptr FS:[0H]; mov test_thread_ptr_offset, eax }; ! assert(test_thread_ptr_offset == os::win32::get_thread_ptr_offset(), "thread pointer offset from SEH changed"); } #endif // ASSERT #endif // !AMD64
< prev index next >