| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /* 
 | 
					
						
							| 
									
										
										
										
											2007-10-16 01:27:00 -07:00
										 |  |  |  * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * Licensed under the GPL | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-08 03:27:32 +01:00
										 |  |  | #include <sysdep/ptrace.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* These two are from asm-um/uaccess.h and linux/module.h, check them. */ | 
					
						
							|  |  |  | struct exception_table_entry | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	unsigned long insn; | 
					
						
							|  |  |  | 	unsigned long fixup; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const struct exception_table_entry *search_exception_tables(unsigned long add); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Compare this to arch/i386/mm/extable.c:fixup_exception() */ | 
					
						
							| 
									
										
										
										
											2007-10-16 01:26:58 -07:00
										 |  |  | int arch_fixup(unsigned long address, struct uml_pt_regs *regs) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	const struct exception_table_entry *fixup; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fixup = search_exception_tables(address); | 
					
						
							| 
									
										
										
										
											2012-12-20 14:11:35 -05:00
										 |  |  | 	if (fixup) { | 
					
						
							| 
									
										
										
										
											2007-05-06 14:51:24 -07:00
										 |  |  | 		UPT_IP(regs) = fixup->fixup; | 
					
						
							| 
									
										
										
										
											2007-10-16 01:27:00 -07:00
										 |  |  | 		return 1; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-10-16 01:27:00 -07:00
										 |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } |