mirror of
				https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
				synced 2025-10-30 07:38:52 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 
 | |
|  * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
 | |
|  * Licensed under the GPL
 | |
|  */
 | |
| 
 | |
| #ifndef __SYS_SIGCONTEXT_PPC_H
 | |
| #define __SYS_SIGCONTEXT_PPC_H
 | |
| 
 | |
| #define DSISR_WRITE 0x02000000
 | |
| 
 | |
| #define SC_FAULT_ADDR(sc) ({ \
 | |
| 		struct sigcontext *_sc = (sc); \
 | |
| 		long retval = -1; \
 | |
| 		switch (_sc->regs->trap) { \
 | |
| 		case 0x300: \
 | |
| 			/* data exception */ \
 | |
| 			retval = _sc->regs->dar; \
 | |
| 			break; \
 | |
| 		case 0x400: \
 | |
| 			/* instruction exception */ \
 | |
| 			retval = _sc->regs->nip; \
 | |
| 			break; \
 | |
| 		default: \
 | |
| 			panic("SC_FAULT_ADDR: unhandled trap type\n"); \
 | |
| 		} \
 | |
| 		retval; \
 | |
| 	})
 | |
| 
 | |
| #define SC_FAULT_WRITE(sc) ({ \
 | |
| 		struct sigcontext *_sc = (sc); \
 | |
| 		long retval = -1; \
 | |
| 		switch (_sc->regs->trap) { \
 | |
| 		case 0x300: \
 | |
| 			/* data exception */ \
 | |
| 			retval = !!(_sc->regs->dsisr & DSISR_WRITE); \
 | |
| 			break; \
 | |
| 		case 0x400: \
 | |
| 			/* instruction exception: not a write */ \
 | |
| 			retval = 0; \
 | |
| 			break; \
 | |
| 		default: \
 | |
| 			panic("SC_FAULT_ADDR: unhandled trap type\n"); \
 | |
| 		} \
 | |
| 		retval; \
 | |
| 	})
 | |
| 
 | |
| #define SC_IP(sc) ((sc)->regs->nip)
 | |
| #define SC_SP(sc) ((sc)->regs->gpr[1])
 | |
| #define SEGV_IS_FIXABLE(sc) (1)
 | |
| 
 | |
| #endif
 | |
| 
 | 
