entry-armv.S (afeb90ca08000cbd75f22836e667f368e25fe3ac) | entry-armv.S (2dede2d8e925f4c2cb4e136b14df127685e15dd3) |
---|---|
1/* 2 * linux/arch/arm/kernel/entry-armv.S 3 * 4 * Copyright (C) 1996,1997,1998 Russell King. 5 * ARM700 fix by Matthew Godbolt (linux-user@willothewisp.demon.co.uk) 6 * nommu support by Hyok S. Choi (hyok.choi@samsung.com) 7 * 8 * This program is free software; you can redistribute it and/or modify --- 91 unchanged lines hidden (view full) --- 100 101 mov r0, sp 102 and r2, r6, #0x1f 103 b bad_mode 104 105/* 106 * SVC mode handlers 107 */ | 1/* 2 * linux/arch/arm/kernel/entry-armv.S 3 * 4 * Copyright (C) 1996,1997,1998 Russell King. 5 * ARM700 fix by Matthew Godbolt (linux-user@willothewisp.demon.co.uk) 6 * nommu support by Hyok S. Choi (hyok.choi@samsung.com) 7 * 8 * This program is free software; you can redistribute it and/or modify --- 91 unchanged lines hidden (view full) --- 100 101 mov r0, sp 102 and r2, r6, #0x1f 103 b bad_mode 104 105/* 106 * SVC mode handlers 107 */ |
108 109#if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) 110#define SPFIX(code...) code 111#else 112#define SPFIX(code...) 113#endif 114 |
|
108 .macro svc_entry 109 sub sp, sp, #S_FRAME_SIZE | 115 .macro svc_entry 116 sub sp, sp, #S_FRAME_SIZE |
117 SPFIX( tst sp, #4 ) 118 SPFIX( bicne sp, sp, #4 ) |
|
110 stmib sp, {r1 - r12} 111 112 ldmia r0, {r1 - r3} 113 add r5, sp, #S_SP @ here for interlock avoidance 114 mov r4, #-1 @ "" "" "" "" 115 add r0, sp, #S_FRAME_SIZE @ "" "" "" "" | 119 stmib sp, {r1 - r12} 120 121 ldmia r0, {r1 - r3} 122 add r5, sp, #S_SP @ here for interlock avoidance 123 mov r4, #-1 @ "" "" "" "" 124 add r0, sp, #S_FRAME_SIZE @ "" "" "" "" |
125 SPFIX( addne r0, r0, #4 ) |
|
116 str r1, [sp] @ save the "real" r0 copied 117 @ from the exception stack 118 119 mov r1, lr 120 121 @ 122 @ We are now ready to fill in the remaining blanks on the stack: 123 @ --- 174 unchanged lines hidden (view full) --- 298 .word fp_enter 299#ifdef CONFIG_PREEMPT 300.LCirq_stat: 301 .word irq_stat 302#endif 303 304/* 305 * User mode handlers | 126 str r1, [sp] @ save the "real" r0 copied 127 @ from the exception stack 128 129 mov r1, lr 130 131 @ 132 @ We are now ready to fill in the remaining blanks on the stack: 133 @ --- 174 unchanged lines hidden (view full) --- 308 .word fp_enter 309#ifdef CONFIG_PREEMPT 310.LCirq_stat: 311 .word irq_stat 312#endif 313 314/* 315 * User mode handlers |
316 * 317 * EABI note: sp_svc is always 64-bit aligned here, so should S_FRAME_SIZE |
|
306 */ | 318 */ |
319 320#if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) && (S_FRAME_SIZE & 7) 321#error "sizeof(struct pt_regs) must be a multiple of 8" 322#endif 323 |
|
307 .macro usr_entry 308 sub sp, sp, #S_FRAME_SIZE 309 stmib sp, {r1 - r12} 310 311 ldmia r0, {r1 - r3} 312 add r0, sp, #S_PC @ here for interlock avoidance 313 mov r4, #-1 @ "" "" "" "" 314 --- 721 unchanged lines hidden --- | 324 .macro usr_entry 325 sub sp, sp, #S_FRAME_SIZE 326 stmib sp, {r1 - r12} 327 328 ldmia r0, {r1 - r3} 329 add r0, sp, #S_PC @ here for interlock avoidance 330 mov r4, #-1 @ "" "" "" "" 331 --- 721 unchanged lines hidden --- |