w64: Fix definition of setjmp
The default definition of setjmp which is implemented in MinGW-w64 cannot be used with programs like QEMU which call longjmp from code without structured exception handling (SEH). This code therefore disables stack unwinding. We could also implement SEH for QEMU's generated JIT code, but that is much more difficult. Stack unwinding would also cost execution time. Signed-off-by: Stefan Weil <sw@weilnetz.de>
This commit is contained in:
		
							parent
							
								
									acf126ba58
								
							
						
					
					
						commit
						5cf6dd51ab
					
				| @ -56,6 +56,15 @@ | ||||
| # define EWOULDBLOCK  WSAEWOULDBLOCK | ||||
| #endif | ||||
| 
 | ||||
| #if defined(_WIN64) | ||||
| /* On w64, setjmp is implemented by _setjmp which needs a second parameter.
 | ||||
|  * If this parameter is NULL, longjump does no stack unwinding. | ||||
|  * That is what we need for QEMU. Passing the value of register rsp (default) | ||||
|  * lets longjmp try a stack unwinding which will crash with generated code. */ | ||||
| # undef setjmp | ||||
| # define setjmp(env) _setjmp(env, NULL) | ||||
| #endif | ||||
| 
 | ||||
| /* Declaration of ffs() is missing in MinGW's strings.h. */ | ||||
| int ffs(int i); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Stefan Weil
						Stefan Weil