< prev index next >
src/share/vm/runtime/threadLocalStorage.hpp
Print this page
*** 23,110 ****
*/
#ifndef SHARE_VM_RUNTIME_THREADLOCALSTORAGE_HPP
#define SHARE_VM_RUNTIME_THREADLOCALSTORAGE_HPP
- #include "gc/shared/gcUtil.hpp"
- #include "runtime/os.hpp"
#include "utilities/top.hpp"
! // Interface for thread local storage
! // Fast variant of ThreadLocalStorage::get_thread_slow
! extern "C" Thread* get_thread();
!
! // Get raw thread id: e.g., %g7 on sparc, fs or gs on x86
! extern "C" uintptr_t _raw_thread_id();
class ThreadLocalStorage : AllStatic {
// Exported API
public:
! static void set_thread(Thread* thread);
! static Thread* get_thread_slow();
! static void invalidate_all() { pd_invalidate_all(); }
static void init();
! static bool is_initialized();
!
! // Machine dependent stuff
! #ifdef TARGET_OS_ARCH_linux_x86
! # include "threadLS_linux_x86.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_linux_sparc
! # include "threadLS_linux_sparc.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_linux_zero
! # include "threadLS_linux_zero.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_solaris_x86
! # include "threadLS_solaris_x86.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_solaris_sparc
! # include "threadLS_solaris_sparc.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_windows_x86
! # include "threadLS_windows_x86.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_linux_arm
! # include "threadLS_linux_arm.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_linux_ppc
! # include "threadLS_linux_ppc.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_linux_aarch64
! # include "threadLS_linux_aarch64.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_aix_ppc
! # include "threadLS_aix_ppc.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_bsd_x86
! # include "threadLS_bsd_x86.hpp"
! #endif
! #ifdef TARGET_OS_ARCH_bsd_zero
! # include "threadLS_bsd_zero.hpp"
! #endif
!
! #ifndef SOLARIS
! public:
! // Accessor
! static inline int thread_index() { return _thread_index; }
! static inline void set_thread_index(int index) { _thread_index = index; }
!
! private:
! static int _thread_index;
!
! static void generate_code_for_get_thread();
!
! // Processor dependent parts of set_thread and initialization
! static void pd_set_thread(Thread* thread);
! static void pd_init();
!
! #endif // SOLARIS
!
! // Invalidate any thread cacheing or optimization schemes.
! static void pd_invalidate_all();
!
};
#endif // SHARE_VM_RUNTIME_THREADLOCALSTORAGE_HPP
--- 23,50 ----
*/
#ifndef SHARE_VM_RUNTIME_THREADLOCALSTORAGE_HPP
#define SHARE_VM_RUNTIME_THREADLOCALSTORAGE_HPP
#include "utilities/top.hpp"
! // forward-decl as we can't have an include cycle
! class Thread;
! // Wrapper class for library-based (as opposed to compiler-based)
! // thread-local storage (TLS). All platforms require this for
! // signal-handler based TLS access (which while not strictly async-signal
! // safe in theory, is and has-been for a long time, in practice).
! // Platforms without compiler-based TLS (i.e. __thread storage-class modifier)
! // will use this implementation for all TLS access - see thread.hpp/cpp
class ThreadLocalStorage : AllStatic {
// Exported API
public:
! static Thread* thread(); // return current thread, if attached
! static void set_thread(Thread* thread); // set current thread
static void init();
! static bool is_initialized(); // can't use TLS prior to initialization
};
#endif // SHARE_VM_RUNTIME_THREADLOCALSTORAGE_HPP
< prev index next >