Subversion Repositories HelenOS

Rev

Rev 2479 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2479 Rev 2581
Line 34... Line 34...
34
  * @ingroup libcia32
34
  * @ingroup libcia32
35
 */
35
 */
36
 
36
 
37
#include <thread.h>
37
#include <thread.h>
38
#include <malloc.h>
38
#include <malloc.h>
-
 
39
#include <align.h>
39
 
40
 
40
/** Allocate TLS & TCB for initial module threads
41
/** Allocate TLS & TCB for initial module threads
41
 *
42
 *
42
 * @param data Start of data section
43
 * @param data Start of data section
43
 * @return pointer to tcb_t structure
44
 * @return pointer to tcb_t structure
44
 */
45
 */
45
tcb_t * __alloc_tls(void **data, size_t size)
46
tcb_t * __alloc_tls(void **data, size_t size)
46
{
47
{
47
    tcb_t *tcb;
48
    tcb_t *tcb;
48
   
49
   
-
 
50
    size = ALIGN_UP(size, &_tls_alignment);
49
    *data = malloc(sizeof(tcb_t) + size);
51
    *data = memalign(&_tls_alignment, sizeof(tcb_t) + size);
50
 
52
 
51
    tcb = (tcb_t *) (*data + size);
53
    tcb = (tcb_t *) (*data + size);
52
    tcb->self = tcb;
54
    tcb->self = tcb;
53
 
55
 
54
    return tcb;
56
    return tcb;
55
}
57
}
56
 
58
 
57
void __free_tls_arch(tcb_t *tcb, size_t size)
59
void __free_tls_arch(tcb_t *tcb, size_t size)
58
{
60
{
-
 
61
    size = ALIGN_UP(size, &_tls_alignment);
59
    void *start = ((void *)tcb) - size;
62
    void *start = ((void *)tcb) - size;
60
    free(start);
63
    free(start);
61
}
64
}
62
 
65
 
63
/** @}
66
/** @}