|
13 | 13 |
|
14 | 14 | #include <asm/processor.h> |
15 | 15 |
|
16 | | -#define ARCH_HAS_SORT_EXTABLE |
17 | | -#define ARCH_HAS_SEARCH_EXTABLE |
18 | | - |
19 | 16 | /* Sparc is not segmented, however we need to be able to fool access_ok() |
20 | 17 | * when doing system calls from kernel mode legitimately. |
21 | 18 | * |
|
40 | 37 | #define __access_ok(addr, size) (__user_ok((addr) & get_fs().seg, (size))) |
41 | 38 | #define access_ok(addr, size) __access_ok((unsigned long)(addr), size) |
42 | 39 |
|
43 | | -/* |
44 | | - * The exception table consists of pairs of addresses: the first is the |
45 | | - * address of an instruction that is allowed to fault, and the second is |
46 | | - * the address at which the program should continue. No registers are |
47 | | - * modified, so it is entirely up to the continuation code to figure out |
48 | | - * what to do. |
49 | | - * |
50 | | - * All the routines below use bits of fixup code that are out of line |
51 | | - * with the main instruction path. This means when everything is well, |
52 | | - * we don't even have to jump over them. Further, they do not intrude |
53 | | - * on our cache or tlb entries. |
54 | | - * |
55 | | - * There is a special way how to put a range of potentially faulting |
56 | | - * insns (like twenty ldd/std's with now intervening other instructions) |
57 | | - * You specify address of first in insn and 0 in fixup and in the next |
58 | | - * exception_table_entry you specify last potentially faulting insn + 1 |
59 | | - * and in fixup the routine which should handle the fault. |
60 | | - * That fixup code will get |
61 | | - * (faulting_insn_address - first_insn_in_the_range_address)/4 |
62 | | - * in %g2 (ie. index of the faulting instruction in the range). |
63 | | - */ |
64 | | - |
65 | | -struct exception_table_entry |
66 | | -{ |
67 | | - unsigned long insn, fixup; |
68 | | -}; |
69 | | - |
70 | | -/* Returns 0 if exception not found and fixup otherwise. */ |
71 | | -unsigned long search_extables_range(unsigned long addr, unsigned long *g2); |
72 | | - |
73 | 40 | /* Uh, these should become the main single-value transfer routines.. |
74 | 41 | * They automatically use the right size if we just have the right |
75 | 42 | * pointer type.. |
@@ -252,12 +219,7 @@ static inline unsigned long __clear_user(void __user *addr, unsigned long size) |
252 | 219 | unsigned long ret; |
253 | 220 |
|
254 | 221 | __asm__ __volatile__ ( |
255 | | - ".section __ex_table,#alloc\n\t" |
256 | | - ".align 4\n\t" |
257 | | - ".word 1f,3\n\t" |
258 | | - ".previous\n\t" |
259 | 222 | "mov %2, %%o1\n" |
260 | | - "1:\n\t" |
261 | 223 | "call __bzero\n\t" |
262 | 224 | " mov %1, %%o0\n\t" |
263 | 225 | "mov %%o0, %0\n" |
|
0 commit comments