mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-04 00:40:27 +00:00
Tidy up the threading implementation
The organization of the source files is now much more rational. Old experiments that didn't work out are now deleted. Naming of things like files is now more intuitive.
This commit is contained in:
parent
e9272f03fb
commit
155b378a39
199 changed files with 526 additions and 685 deletions
45
libc/thread/tls.h
Normal file
45
libc/thread/tls.h
Normal file
|
@ -0,0 +1,45 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_THREAD_TLS_H_
|
||||
#define COSMOPOLITAN_LIBC_THREAD_TLS_H_
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
struct CosmoFtrace { /* 16 */
|
||||
bool ft_once; /* 0 */
|
||||
bool ft_noreentry; /* 1 */
|
||||
int ft_skew; /* 4 */
|
||||
int64_t ft_lastaddr; /* 8 */
|
||||
};
|
||||
|
||||
struct CosmoTib {
|
||||
struct CosmoTib *tib_self; /* 0x00 */
|
||||
struct CosmoFtrace tib_ftrace; /* 0x08 */
|
||||
void *tib_garbages; /* 0x18 */
|
||||
intptr_t tib_locale; /* 0x20 */
|
||||
intptr_t tib_pthread; /* 0x28 */
|
||||
struct CosmoTib *tib_self2; /* 0x30 */
|
||||
int32_t tib_tid; /* 0x38 */
|
||||
int32_t tib_errno; /* 0x3c */
|
||||
};
|
||||
|
||||
extern int __threaded;
|
||||
extern bool __tls_enabled;
|
||||
extern unsigned __tls_index;
|
||||
|
||||
void __require_tls(void);
|
||||
|
||||
#if defined(__GNUC__) && defined(__x86_64__) && !defined(__STRICT_ANSI__)
|
||||
/**
|
||||
* Returns location of thread information block.
|
||||
*
|
||||
* This can't be used in privileged functions.
|
||||
*/
|
||||
static inline struct CosmoTib *__get_tls(void) {
|
||||
struct CosmoTib *_tib;
|
||||
asm("mov\t%%fs:0,%0" : "=r"(_tib) : /* no inputs */ : "memory");
|
||||
return _tib;
|
||||
}
|
||||
#endif /* GNU x86-64 */
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_THREAD_TLS_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue