summaryrefslogtreecommitdiff
path: root/firmware/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/thread.c')
-rw-r--r--firmware/thread.c12
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 */
100int create_thread(void* function, void* stack, int stack_size) 100int 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()