26 lines
		
	
	
	
		
			574 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			26 lines
		
	
	
	
		
			574 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  *  linux/arch/arm26/mm/extable.c | ||
|  |  */ | ||
|  | 
 | ||
|  | #include <linux/config.h>
 | ||
|  | #include <linux/module.h>
 | ||
|  | #include <asm/uaccess.h>
 | ||
|  | 
 | ||
|  | int fixup_exception(struct pt_regs *regs) | ||
|  | { | ||
|  |         const struct exception_table_entry *fixup; | ||
|  | 
 | ||
|  |         fixup = search_exception_tables(instruction_pointer(regs)); | ||
|  | 
 | ||
|  | 	/*
 | ||
|  | 	 * The kernel runs in SVC mode - make sure we keep running in SVC mode | ||
|  | 	 * by frobbing the PSR appropriately (PSR and PC are in the same reg. | ||
|  | 	 * on ARM26) | ||
|  | 	 */ | ||
|  |         if (fixup) | ||
|  |                 regs->ARM_pc = fixup->fixup | PSR_I_BIT | MODE_SVC26; | ||
|  | 
 | ||
|  |         return fixup != NULL; | ||
|  | } | ||
|  | 
 |