Rev 1217 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1217 | Rev 1286 | ||
---|---|---|---|
Line 29... | Line 29... | ||
29 | #ifndef __LIBC__ppc32__PSTHREAD_H__ |
29 | #ifndef __LIBC__ppc32__PSTHREAD_H__ |
30 | #define __LIBC__ppc32__PSTHREAD_H__ |
30 | #define __LIBC__ppc32__PSTHREAD_H__ |
31 | 31 | ||
32 | #include <types.h> |
32 | #include <types.h> |
33 | 33 | ||
- | 34 | /* We define our own context_set, because we need to set |
|
- | 35 | * the TLS pointer to the tcb+0x7000 |
|
- | 36 | * |
|
- | 37 | * See tls_set in thread.h |
|
- | 38 | */ |
|
34 | #define context_set(c, _pc, stack, size, ptls) \ |
39 | #define context_set(c, _pc, stack, size, ptls) \ |
35 | (c)->pc = (sysarg_t) (_pc); \ |
40 | (c)->pc = (sysarg_t) (_pc); \ |
36 | (c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; \ |
41 | (c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; \ |
37 | (c)->tls = ((sysarg_t)(ptls)) + 0x7000 + sizeof(tcb_t); |
42 | (c)->tls = ((sysarg_t) (ptls)) + 0x7000 + sizeof(tcb_t); |
38 | 43 | ||
39 | #define SP_DELTA (8+16) |
44 | #define SP_DELTA 16 |
40 | 45 | ||
41 | typedef struct { |
46 | typedef struct { |
42 | uint32_t sp; |
47 | uint32_t sp; |
43 | uint32_t pc; |
48 | uint32_t pc; |
44 | 49 | ||
45 | uint32_t tls; |
50 | uint32_t tls; |
- | 51 | uint32_t r13; |
|
- | 52 | uint32_t r14; |
|
- | 53 | uint32_t r15; |
|
- | 54 | uint32_t r16; |
|
- | 55 | uint32_t r17; |
|
- | 56 | uint32_t r18; |
|
- | 57 | uint32_t r19; |
|
- | 58 | uint32_t r20; |
|
- | 59 | uint32_t r21; |
|
- | 60 | uint32_t r22; |
|
- | 61 | uint32_t r23; |
|
- | 62 | uint32_t r24; |
|
- | 63 | uint32_t r25; |
|
- | 64 | uint32_t r26; |
|
- | 65 | uint32_t r27; |
|
- | 66 | uint32_t r28; |
|
- | 67 | uint32_t r29; |
|
- | 68 | uint32_t r30; |
|
- | 69 | uint32_t r31; |
|
- | 70 | ||
46 | } context_t; |
71 | uint32_t cr; |
- | 72 | } __attribute__ ((packed)) context_t; |
|
47 | 73 | ||
48 | #endif |
74 | #endif |