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 | /** @} |