/trunk/uspace/lib/libc/include/thread.h |
---|
41,6 → 41,8 |
typedef uint64_t thread_id_t; |
extern char _tls_alignment; |
extern void __thread_entry(void); |
extern void __thread_main(uspace_arg_t *uarg); |
/trunk/uspace/lib/libc/arch/sparc64/src/thread.c |
---|
36,6 → 36,7 |
#include <thread.h> |
#include <malloc.h> |
#include <align.h> |
/* |
* sparc64 uses thread-local storage data structures, variant II, as described |
56,7 → 57,8 |
{ |
tcb_t *tcb; |
*data = malloc(sizeof(tcb_t) + size); |
size = ALIGN_UP(size, &_tls_alignment); |
*data = memalign(&_tls_alignment, sizeof(tcb_t) + size); |
tcb = (tcb_t *) (*data + size); |
tcb->self = tcb; |
73,6 → 75,7 |
*/ |
void __free_tls_arch(tcb_t *tcb, size_t size) |
{ |
size = ALIGN_UP(size, &_tls_alignment); |
void *start = ((void *) tcb) - size; |
free(start); |
} |
/trunk/uspace/lib/libc/arch/amd64/src/thread.c |
---|
36,6 → 36,7 |
#include <thread.h> |
#include <malloc.h> |
#include <align.h> |
/** Allocate TLS & TCB for initial module threads |
* |
46,7 → 47,8 |
{ |
tcb_t *tcb; |
*data = malloc(sizeof(tcb_t) + size); |
size = ALIGN_UP(size, &_tls_alignment); |
*data = memalign(&_tls_alignment, sizeof(tcb_t) + size); |
tcb = (tcb_t *) (*data + size); |
tcb->self = tcb; |
56,6 → 58,7 |
void __free_tls_arch(tcb_t *tcb, size_t size) |
{ |
size = ALIGN_UP(size, &_tls_alignment); |
void *start = ((void *)tcb) - size; |
free(start); |
} |