diff options
Diffstat (limited to 'arch/blackfin/mach-common/entry.S')
-rw-r--r-- | arch/blackfin/mach-common/entry.S | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S index 2188f81c6456..3feca05694f8 100644 --- a/arch/blackfin/mach-common/entry.S +++ b/arch/blackfin/mach-common/entry.S | |||
@@ -143,7 +143,7 @@ ENTRY(_ex_single_step) | |||
143 | cc = r6 == r7; | 143 | cc = r6 == r7; |
144 | if !cc jump _ex_trap_c; | 144 | if !cc jump _ex_trap_c; |
145 | 145 | ||
146 | _return_from_exception: | 146 | ENTRY(_return_from_exception) |
147 | DEBUG_START_HWTRACE(p5, r7) | 147 | DEBUG_START_HWTRACE(p5, r7) |
148 | #if ANOMALY_05000257 | 148 | #if ANOMALY_05000257 |
149 | R7=LC0; | 149 | R7=LC0; |
@@ -171,6 +171,9 @@ ENTRY(_handle_bad_cplb) | |||
171 | [--sp] = ASTAT; | 171 | [--sp] = ASTAT; |
172 | [--sp] = (R7:6, P5:4); | 172 | [--sp] = (R7:6, P5:4); |
173 | 173 | ||
174 | ENTRY(_ex_replaceable) | ||
175 | nop; | ||
176 | |||
174 | ENTRY(_ex_trap_c) | 177 | ENTRY(_ex_trap_c) |
175 | /* Call C code (trap_c) to handle the exception, which most | 178 | /* Call C code (trap_c) to handle the exception, which most |
176 | * likely involves sending a signal to the current process. | 179 | * likely involves sending a signal to the current process. |
@@ -298,8 +301,8 @@ ENTRY(_trap) /* Exception: 4th entry into system event table(supervisor mode)*/ | |||
298 | r6.l = lo(SEQSTAT_EXCAUSE); | 301 | r6.l = lo(SEQSTAT_EXCAUSE); |
299 | r6.h = hi(SEQSTAT_EXCAUSE); | 302 | r6.h = hi(SEQSTAT_EXCAUSE); |
300 | r7 = r7 & r6; | 303 | r7 = r7 & r6; |
301 | p5.h = _extable; | 304 | p5.h = _ex_table; |
302 | p5.l = _extable; | 305 | p5.l = _ex_table; |
303 | p4 = r7; | 306 | p4 = r7; |
304 | p5 = p5 + (p4 << 2); | 307 | p5 = p5 + (p4 << 2); |
305 | p4 = [p5]; | 308 | p4 = [p5]; |
@@ -818,28 +821,27 @@ ENTRY(_software_trace_buff) | |||
818 | #else | 821 | #else |
819 | .data | 822 | .data |
820 | #endif | 823 | #endif |
821 | ALIGN | 824 | ENTRY(_ex_table) |
822 | _extable: | ||
823 | /* entry for each EXCAUSE[5:0] | 825 | /* entry for each EXCAUSE[5:0] |
824 | * This table must be in sync with the table in ./kernel/traps.c | 826 | * This table must be in sync with the table in ./kernel/traps.c |
825 | * EXCPT instruction can provide 4 bits of EXCAUSE, allowing 16 to be user defined | 827 | * EXCPT instruction can provide 4 bits of EXCAUSE, allowing 16 to be user defined |
826 | */ | 828 | */ |
827 | .long _ex_syscall; /* 0x00 - User Defined - Linux Syscall */ | 829 | .long _ex_syscall /* 0x00 - User Defined - Linux Syscall */ |
828 | .long _ex_soft_bp /* 0x01 - User Defined - Software breakpoint */ | 830 | .long _ex_soft_bp /* 0x01 - User Defined - Software breakpoint */ |
829 | .long _ex_trap_c /* 0x02 - User Defined */ | 831 | .long _ex_replaceable /* 0x02 - User Defined */ |
830 | .long _ex_trap_c /* 0x03 - User Defined - userspace stack overflow */ | 832 | .long _ex_trap_c /* 0x03 - User Defined - userspace stack overflow */ |
831 | .long _ex_trap_c /* 0x04 - User Defined */ | 833 | .long _ex_replaceable /* 0x04 - User Defined */ |
832 | .long _ex_trap_c /* 0x05 - User Defined */ | 834 | .long _ex_replaceable /* 0x05 - User Defined */ |
833 | .long _ex_trap_c /* 0x06 - User Defined */ | 835 | .long _ex_replaceable /* 0x06 - User Defined */ |
834 | .long _ex_trap_c /* 0x07 - User Defined */ | 836 | .long _ex_replaceable /* 0x07 - User Defined */ |
835 | .long _ex_trap_c /* 0x08 - User Defined */ | 837 | .long _ex_replaceable /* 0x08 - User Defined */ |
836 | .long _ex_trap_c /* 0x09 - User Defined */ | 838 | .long _ex_replaceable /* 0x09 - User Defined */ |
837 | .long _ex_trap_c /* 0x0A - User Defined */ | 839 | .long _ex_replaceable /* 0x0A - User Defined */ |
838 | .long _ex_trap_c /* 0x0B - User Defined */ | 840 | .long _ex_replaceable /* 0x0B - User Defined */ |
839 | .long _ex_trap_c /* 0x0C - User Defined */ | 841 | .long _ex_replaceable /* 0x0C - User Defined */ |
840 | .long _ex_trap_c /* 0x0D - User Defined */ | 842 | .long _ex_replaceable /* 0x0D - User Defined */ |
841 | .long _ex_trap_c /* 0x0E - User Defined */ | 843 | .long _ex_replaceable /* 0x0E - User Defined */ |
842 | .long _ex_trap_c /* 0x0F - User Defined */ | 844 | .long _ex_replaceable /* 0x0F - User Defined */ |
843 | .long _ex_single_step /* 0x10 - HW Single step */ | 845 | .long _ex_single_step /* 0x10 - HW Single step */ |
844 | #ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND | 846 | #ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND |
845 | .long _ex_trace_buff_full /* 0x11 - Trace Buffer Full */ | 847 | .long _ex_trace_buff_full /* 0x11 - Trace Buffer Full */ |
@@ -893,8 +895,8 @@ _extable: | |||
893 | .long _ex_trap_c /* 0x3D - Reserved */ | 895 | .long _ex_trap_c /* 0x3D - Reserved */ |
894 | .long _ex_trap_c /* 0x3E - Reserved */ | 896 | .long _ex_trap_c /* 0x3E - Reserved */ |
895 | .long _ex_trap_c /* 0x3F - Reserved */ | 897 | .long _ex_trap_c /* 0x3F - Reserved */ |
898 | END(_ex_table) | ||
896 | 899 | ||
897 | ALIGN | ||
898 | ENTRY(_sys_call_table) | 900 | ENTRY(_sys_call_table) |
899 | .long _sys_restart_syscall /* 0 */ | 901 | .long _sys_restart_syscall /* 0 */ |
900 | .long _sys_exit | 902 | .long _sys_exit |