aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/entry-armv.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/kernel/entry-armv.S')
-rw-r--r--arch/arm/kernel/entry-armv.S50
1 files changed, 24 insertions, 26 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index 02437345289a..79a41fa978f5 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -944,9 +944,9 @@ __kuser_helper_end:
944/* 944/*
945 * Vector stubs. 945 * Vector stubs.
946 * 946 *
947 * This code is copied to 0xffff0200 so we can use branches in the 947 * This code is copied to 0xffff1000 so we can use branches in the
948 * vectors, rather than ldr's. Note that this code must not 948 * vectors, rather than ldr's. Note that this code must not exceed
949 * exceed 0x300 bytes. 949 * a page size.
950 * 950 *
951 * Common stub entry macro: 951 * Common stub entry macro:
952 * Enter in IRQ mode, spsr = SVC/USR CPSR, lr = SVC/USR PC 952 * Enter in IRQ mode, spsr = SVC/USR CPSR, lr = SVC/USR PC
@@ -995,6 +995,15 @@ ENDPROC(vector_\name)
995 995
996 .globl __stubs_start 996 .globl __stubs_start
997__stubs_start: 997__stubs_start:
998 @ This must be the first word
999 .word vector_swi
1000
1001vector_rst:
1002 ARM( swi SYS_ERROR0 )
1003 THUMB( svc #0 )
1004 THUMB( nop )
1005 b vector_und
1006
998/* 1007/*
999 * Interrupt dispatcher 1008 * Interrupt dispatcher
1000 */ 1009 */
@@ -1089,6 +1098,16 @@ __stubs_start:
1089 .align 5 1098 .align 5
1090 1099
1091/*============================================================================= 1100/*=============================================================================
1101 * Address exception handler
1102 *-----------------------------------------------------------------------------
1103 * These aren't too critical.
1104 * (they're not supposed to happen, and won't happen in 32-bit data mode).
1105 */
1106
1107vector_addrexcptn:
1108 b vector_addrexcptn
1109
1110/*=============================================================================
1092 * Undefined FIQs 1111 * Undefined FIQs
1093 *----------------------------------------------------------------------------- 1112 *-----------------------------------------------------------------------------
1094 * Enter in FIQ mode, spsr = ANY CPSR, lr = ANY PC 1113 * Enter in FIQ mode, spsr = ANY CPSR, lr = ANY PC
@@ -1101,35 +1120,14 @@ __stubs_start:
1101vector_fiq: 1120vector_fiq:
1102 subs pc, lr, #4 1121 subs pc, lr, #4
1103 1122
1104/*=============================================================================
1105 * Address exception handler
1106 *-----------------------------------------------------------------------------
1107 * These aren't too critical.
1108 * (they're not supposed to happen, and won't happen in 32-bit data mode).
1109 */
1110
1111vector_addrexcptn:
1112 b vector_addrexcptn
1113
1114/*
1115 * We group all the following data together to optimise
1116 * for CPUs with separate I & D caches.
1117 */
1118 .align 5
1119
1120.LCvswi:
1121 .word vector_swi
1122
1123 .globl __stubs_end 1123 .globl __stubs_end
1124__stubs_end: 1124__stubs_end:
1125 1125
1126 .equ stubs_offset, __vectors_start + 0x200 - __stubs_start 1126 .equ stubs_offset, __vectors_start + 0x1000 - __stubs_start
1127 1127
1128 .globl __vectors_start 1128 .globl __vectors_start
1129__vectors_start: 1129__vectors_start:
1130 ARM( swi SYS_ERROR0 ) 1130 W(b) vector_rst + stubs_offset
1131 THUMB( svc #0 )
1132 THUMB( nop )
1133 W(b) vector_und + stubs_offset 1131 W(b) vector_und + stubs_offset
1134 W(ldr) pc, .LCvswi + stubs_offset 1132 W(ldr) pc, .LCvswi + stubs_offset
1135 W(b) vector_pabt + stubs_offset 1133 W(b) vector_pabt + stubs_offset