Fix qemu endless loop when raising a SIGSEGV/SIGBUS signal with gdbstub in user emulation
When a SIGSEGV signal is raised in user mode emulation the current test to know whether the signal is sent by the kernel is wrong : info->si_code == SI_KERNEL according to /usr/include/bits/siginfo.h it should be info->si_code > 0 Signed-off-by: Lionel Landwerlin <lionel.landwerlin@openwide.fr> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6151 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									5d04f23bdf
								
							
						
					
					
						commit
						eaa449b940
					
				@ -441,9 +441,9 @@ static void host_signal_handler(int host_signum, siginfo_t *info,
 | 
				
			|||||||
    target_siginfo_t tinfo;
 | 
					    target_siginfo_t tinfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* the CPU emulator uses some host signals to detect exceptions,
 | 
					    /* the CPU emulator uses some host signals to detect exceptions,
 | 
				
			||||||
       we we forward to it some signals */
 | 
					       we forward to it some signals */
 | 
				
			||||||
    if ((host_signum == SIGSEGV || host_signum == SIGBUS)
 | 
					    if ((host_signum == SIGSEGV || host_signum == SIGBUS)
 | 
				
			||||||
        && info->si_code == SI_KERNEL) {
 | 
					        && info->si_code > 0) {
 | 
				
			||||||
        if (cpu_signal_handler(host_signum, info, puc))
 | 
					        if (cpu_signal_handler(host_signum, info, puc))
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user