Add cygwin_internal() operation to retrieve the EXCEPTION_RECORD from a siginfo_t *
* external.cc (cygwin_internal): Add operation to retrieve a copy of the EXCEPTION_RECORD from a siginfo_t *. * include/sys/cygwin.h (cygwin_getinfo_types): Ditto. * exception.h (cygwin_exception): Add exception_record accessor. Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
This commit is contained in:
		
				
					committed by
					
						 Corinna Vinschen
						Corinna Vinschen
					
				
			
			
				
	
			
			
			
						parent
						
							9afde4dff4
						
					
				
				
					commit
					d89cc26903
				
			| @@ -1,3 +1,10 @@ | ||||
| 2015-04-01  Jon TURNEY  <jon.turney@dronecode.org.uk> | ||||
|  | ||||
| 	* external.cc (cygwin_internal): Add operation to retrieve a copy | ||||
| 	of the EXCEPTION_RECORD from a siginfo_t *. | ||||
| 	* include/sys/cygwin.h (cygwin_getinfo_types): Ditto. | ||||
| 	* exception.h (cygwin_exception): Add exception_record accessor. | ||||
|  | ||||
| 2015-04-01  Jon TURNEY  <jon.turney@dronecode.org.uk> | ||||
|  | ||||
| 	* include/cygwin/signal.h : Rename struct ucontext to struct | ||||
|   | ||||
| @@ -175,4 +175,5 @@ public: | ||||
|     framep (in_framep), ctx (in_ctx), e (in_e), h (NULL) {} | ||||
|   void dumpstack (); | ||||
|   PCONTEXT context () const {return ctx;} | ||||
|   EXCEPTION_RECORD *exception_record () const {return e;} | ||||
| }; | ||||
|   | ||||
| @@ -27,6 +27,7 @@ details. */ | ||||
| #include "environ.h" | ||||
| #include "cygserver_setpwd.h" | ||||
| #include "pwdgrp.h" | ||||
| #include "exception.h" | ||||
| #include <unistd.h> | ||||
| #include <stdlib.h> | ||||
| #include <wchar.h> | ||||
| @@ -688,6 +689,19 @@ cygwin_internal (cygwin_getinfo_types t, ...) | ||||
| 	res = 0; | ||||
| 	break; | ||||
|  | ||||
|       case CW_EXCEPTION_RECORD_FROM_SIGINFO_T: | ||||
| 	{ | ||||
| 	  siginfo_t *si = va_arg(arg, siginfo_t *); | ||||
| 	  EXCEPTION_RECORD *er = va_arg(arg, EXCEPTION_RECORD *); | ||||
| 	  if (si && si->si_cyg && er) | ||||
| 	    { | ||||
| 	      memcpy(er, ((cygwin_exception *)si->si_cyg)->exception_record(), | ||||
| 		     sizeof(EXCEPTION_RECORD)); | ||||
| 	      res = 0; | ||||
| 	    } | ||||
| 	} | ||||
| 	break; | ||||
|  | ||||
|       default: | ||||
| 	set_errno (ENOSYS); | ||||
|     } | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
|  | ||||
| /* sys/cygwin.h | ||||
|  | ||||
|    Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, | ||||
| @@ -153,7 +154,8 @@ typedef enum | ||||
|     CW_CYGNAME_FROM_WINNAME, | ||||
|     CW_FIXED_ATEXIT, | ||||
|     CW_GETNSS_PWD_SRC, | ||||
|     CW_GETNSS_GRP_SRC | ||||
|     CW_GETNSS_GRP_SRC, | ||||
|     CW_EXCEPTION_RECORD_FROM_SIGINFO_T, | ||||
|   } cygwin_getinfo_types; | ||||
|  | ||||
| #define CW_LOCK_PINFO CW_LOCK_PINFO | ||||
| @@ -214,6 +216,7 @@ typedef enum | ||||
| #define CW_FIXED_ATEXIT CW_FIXED_ATEXIT | ||||
| #define CW_GETNSS_PWD_SRC CW_GETNSS_PWD_SRC | ||||
| #define CW_GETNSS_GRP_SRC CW_GETNSS_GRP_SRC | ||||
| #define CW_EXCEPTION_RECORD_FROM_SIGINFO_T CW_EXCEPTION_RECORD_FROM_SIGINFO_T | ||||
|  | ||||
| /* Token type for CW_SET_EXTERNAL_TOKEN */ | ||||
| enum | ||||
|   | ||||
		Reference in New Issue
	
	Block a user