44c0c4d3d0
This patch introduces support of ELF based TLS handling with lazy allocation and initalization of TLS block for each DSO and thread. The implementation generally follows the official ABI except that generation counter in dtv is in fact a pointer to Generation object that contains both generation counter and size of the dtv. That simplified the implementation a bit, but could be changed later. The ABI requirements regariding in memory position of TLS block is not honoured what results in static TLS model being unsupported. However, that should not be a problem as long as "executables" in Haiku are in fact shared objects and optimizations which require specific TLS block in memory layout are not possible anyway.
33 lines
682 B
C
33 lines
682 B
C
/*
|
|
* Copyright 2003-2009, Axel Dörfler, axeld@pinc-software.de.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _KERNEL_TLS_H
|
|
#define _KERNEL_TLS_H
|
|
|
|
|
|
#include <support/TLS.h>
|
|
|
|
|
|
#define TLS_SIZE (TLS_MAX_KEYS * sizeof(void *))
|
|
|
|
enum {
|
|
TLS_BASE_ADDRESS_SLOT = 0,
|
|
// contains the address of the local storage space
|
|
|
|
TLS_THREAD_ID_SLOT,
|
|
TLS_ERRNO_SLOT,
|
|
TLS_ON_EXIT_THREAD_SLOT,
|
|
TLS_USER_THREAD_SLOT,
|
|
TLS_DYNAMIC_THREAD_VECTOR,
|
|
|
|
// Note: these entries can safely be changed between
|
|
// releases; 3rd party code always calls tls_allocate()
|
|
// to get a free slot
|
|
|
|
TLS_FIRST_FREE_SLOT
|
|
// the first free slot for user allocations
|
|
};
|
|
|
|
#endif /* _KERNEL_TLS_H */
|