microblaze: User-mode emulation of hw-excp signals
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@petalogix.com>
This commit is contained in:
		
							parent
							
								
									97694c57d7
								
							
						
					
					
						commit
						b76da7e376
					
				| @ -2233,6 +2233,37 @@ void cpu_loop (CPUState *env) | ||||
|             env->regs[3] = ret; | ||||
|             env->sregs[SR_PC] = env->regs[14]; | ||||
|             break; | ||||
|         case EXCP_HW_EXCP: | ||||
|             env->regs[17] = env->sregs[SR_PC] + 4; | ||||
|             if (env->iflags & D_FLAG) { | ||||
|                 env->sregs[SR_ESR] |= 1 << 12; | ||||
|                 env->sregs[SR_PC] -= 4; | ||||
|                 /* FIXME: if branch was immed, replay the imm aswell.  */ | ||||
|             } | ||||
| 
 | ||||
|             env->iflags &= ~(IMM_FLAG | D_FLAG); | ||||
| 
 | ||||
|             switch (env->sregs[SR_ESR] & 31) { | ||||
|                 case ESR_EC_FPU: | ||||
|                     info.si_signo = SIGFPE; | ||||
|                     info.si_errno = 0; | ||||
|                     if (env->sregs[SR_FSR] & FSR_IO) { | ||||
|                         info.si_code = TARGET_FPE_FLTINV; | ||||
|                     } | ||||
|                     if (env->sregs[SR_FSR] & FSR_DZ) { | ||||
|                         info.si_code = TARGET_FPE_FLTDIV; | ||||
|                     } | ||||
|                     info._sifields._sigfault._addr = 0; | ||||
|                     queue_signal(env, info.si_signo, &info); | ||||
|                     break; | ||||
|                 default: | ||||
|                     printf ("Unhandled hw-exception: 0x%x\n", | ||||
|                             env->sregs[SR_ESR] & 5); | ||||
|                     cpu_dump_state(env, stderr, fprintf, 0); | ||||
|                     exit (1); | ||||
|                     break; | ||||
|             } | ||||
|             break; | ||||
|         case EXCP_DEBUG: | ||||
|             { | ||||
|                 int sig; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Edgar E. Iglesias
						Edgar E. Iglesias