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:
parent
abf6791ecb
commit
431b28c196
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue