00001 #if !defined(CMITLS_H) 00002 #define CMITLS_H 00003 00004 #include "conv-config.h" 00005 00006 #if CMK_HAS_TLS_VARIABLES 00007 00008 #if CMK_HAS_ELF_H \ 00009 && ((CMK_DLL_USE_DLOPEN && CMK_HAS_RTLD_DEFAULT) || CMK_HAS_DL_ITERATE_PHDR) 00010 00011 #include <elf.h> 00012 00013 #if ( defined(__LP64__) || defined(_LP64) ) 00014 #define ELF64 00015 #else 00016 #define ELF32 00017 #endif 00018 00019 #endif 00020 00021 #endif 00022 00023 #if defined ELF32 00024 typedef Elf32_Addr Addr; 00025 typedef Elf32_Ehdr Ehdr; 00026 typedef Elf32_Phdr Phdr; 00027 #elif defined ELF64 00028 typedef Elf64_Addr Addr; 00029 typedef Elf64_Ehdr Ehdr; 00030 typedef Elf64_Phdr Phdr; 00031 #else 00032 typedef void * Addr; 00033 #endif 00034 00035 typedef struct tlsseg { 00036 Addr memseg; 00037 size_t size; 00038 size_t align; 00039 } tlsseg_t; 00040 00041 #ifdef __cplusplus 00042 extern "C" { 00043 #endif 00044 00045 void CmiTLSInit(void); 00046 void allocNewTLSSeg(tlsseg_t* t, CthThread th); 00047 void switchTLS(tlsseg_t*, tlsseg_t*); 00048 void currentTLS(tlsseg_t*); 00049 00050 #ifdef __cplusplus 00051 } 00052 #endif 00053 00054 #endif