Subversion Repositories HelenOS

Rev

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

Rev 2335 Rev 2346
Line 37... Line 37...
37
 
37
 
38
#include <unistd.h>
38
#include <unistd.h>
39
 
39
 
40
#define THREAD_INITIAL_STACK_PAGES_NO 1
40
#define THREAD_INITIAL_STACK_PAGES_NO 1
41
 
41
 
-
 
42
#define ARM_TP_OFFSET   (-8)
-
 
43
 
42
typedef struct {
44
typedef struct {
43
    void *pst_data;
45
    void *pst_data;
44
} tcb_t;
46
} tcb_t;
45
 
47
 
46
static inline void __tcb_set(tcb_t *tcb)
48
static inline void __tcb_set(tcb_t *tcb)
47
{
49
{
48
    void *tls = (void *)tcb + sizeof(tcb_t);
50
    void *tls = (void *)tcb;
-
 
51
    tls += sizeof(tcb_t) + ARM_TP_OFFSET;
49
    asm volatile (
52
    asm volatile (
50
        "mov r9, %0"
53
        "mov r9, %0"
51
        :
54
        :
52
        : "r"(tls)
55
        : "r"(tls)
53
    );
56
    );
Line 58... Line 61...
58
    void *ret;
61
    void *ret;
59
    asm volatile (
62
    asm volatile (
60
        "mov %0, r9"
63
        "mov %0, r9"
61
        : "=r"(ret)
64
        : "=r"(ret)
62
    );
65
    );
63
    ret -= sizeof(tcb_t);
66
    return (tcb_t *)(ret - ARM_TP_OFFSET - sizeof(tcb_t));
64
    return (tcb_t *)ret;
-
 
65
}
67
}
66
 
68
 
67
#endif
69
#endif
68
 
70
 
69
/** @}
71
/** @}