diff options
Diffstat (limited to 'include/asm-arm/processor.h')
-rw-r--r-- | include/asm-arm/processor.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/include/asm-arm/processor.h b/include/asm-arm/processor.h index 7d4118e09054..04f4d34c6317 100644 --- a/include/asm-arm/processor.h +++ b/include/asm-arm/processor.h | |||
@@ -49,6 +49,12 @@ struct thread_struct { | |||
49 | 49 | ||
50 | #define INIT_THREAD { } | 50 | #define INIT_THREAD { } |
51 | 51 | ||
52 | #ifdef CONFIG_MMU | ||
53 | #define nommu_start_thread(regs) do { } while (0) | ||
54 | #else | ||
55 | #define nommu_start_thread(regs) regs->ARM_r10 = current->mm->start_data | ||
56 | #endif | ||
57 | |||
52 | #define start_thread(regs,pc,sp) \ | 58 | #define start_thread(regs,pc,sp) \ |
53 | ({ \ | 59 | ({ \ |
54 | unsigned long *stack = (unsigned long *)sp; \ | 60 | unsigned long *stack = (unsigned long *)sp; \ |
@@ -65,6 +71,7 @@ struct thread_struct { | |||
65 | regs->ARM_r2 = stack[2]; /* r2 (envp) */ \ | 71 | regs->ARM_r2 = stack[2]; /* r2 (envp) */ \ |
66 | regs->ARM_r1 = stack[1]; /* r1 (argv) */ \ | 72 | regs->ARM_r1 = stack[1]; /* r1 (argv) */ \ |
67 | regs->ARM_r0 = stack[0]; /* r0 (argc) */ \ | 73 | regs->ARM_r0 = stack[0]; /* r0 (argc) */ \ |
74 | nommu_start_thread(regs); \ | ||
68 | }) | 75 | }) |
69 | 76 | ||
70 | /* Forward declaration, a strange C thing */ | 77 | /* Forward declaration, a strange C thing */ |
@@ -85,9 +92,11 @@ unsigned long get_wchan(struct task_struct *p); | |||
85 | */ | 92 | */ |
86 | extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); | 93 | extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); |
87 | 94 | ||
88 | #define KSTK_REGS(tsk) (((struct pt_regs *)(THREAD_START_SP + (unsigned long)(tsk)->thread_info)) - 1) | 95 | #define task_pt_regs(p) \ |
89 | #define KSTK_EIP(tsk) KSTK_REGS(tsk)->ARM_pc | 96 | ((struct pt_regs *)(THREAD_START_SP + task_stack_page(p)) - 1) |
90 | #define KSTK_ESP(tsk) KSTK_REGS(tsk)->ARM_sp | 97 | |
98 | #define KSTK_EIP(tsk) task_pt_regs(tsk)->ARM_pc | ||
99 | #define KSTK_ESP(tsk) task_pt_regs(tsk)->ARM_sp | ||
91 | 100 | ||
92 | /* | 101 | /* |
93 | * Prefetching support - only ARMv5. | 102 | * Prefetching support - only ARMv5. |