diff options
-rw-r--r-- | firmware/thread.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/firmware/thread.c b/firmware/thread.c index fc8370b42d..d1cd8da6ef 100644 --- a/firmware/thread.c +++ b/firmware/thread.c | |||
@@ -99,10 +99,22 @@ void switch_thread(void) | |||
99 | */ | 99 | */ |
100 | int create_thread(void* function, void* stack, int stack_size) | 100 | int create_thread(void* function, void* stack, int stack_size) |
101 | { | 101 | { |
102 | unsigned int i; | ||
103 | unsigned int stacklen; | ||
104 | unsigned int *stackptr; | ||
105 | |||
102 | if (num_threads >= MAXTHREADS) | 106 | if (num_threads >= MAXTHREADS) |
103 | return -1; | 107 | return -1; |
104 | else | 108 | else |
105 | { | 109 | { |
110 | /* Munge the stack to make it easy to spot stack overflows */ | ||
111 | stacklen = stack_size / 4; | ||
112 | stackptr = stack; | ||
113 | for(i = 0;i < stacklen;i++) | ||
114 | { | ||
115 | stackptr[i] = 0xdeadbeef; | ||
116 | } | ||
117 | |||
106 | struct regs* regs = &thread_contexts[num_threads++]; | 118 | struct regs* regs = &thread_contexts[num_threads++]; |
107 | store_context(regs); | 119 | store_context(regs); |
108 | /* Subtract 4 to leave room for the PR push in ldctx() | 120 | /* Subtract 4 to leave room for the PR push in ldctx() |