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