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>
|
2015-04-01 Jon TURNEY <jon.turney@dronecode.org.uk>
|
||||||
|
|
||||||
* include/cygwin/signal.h : Rename struct ucontext to struct
|
* 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) {}
|
framep (in_framep), ctx (in_ctx), e (in_e), h (NULL) {}
|
||||||
void dumpstack ();
|
void dumpstack ();
|
||||||
PCONTEXT context () const {return ctx;}
|
PCONTEXT context () const {return ctx;}
|
||||||
|
EXCEPTION_RECORD *exception_record () const {return e;}
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,6 +27,7 @@ details. */
|
||||||
#include "environ.h"
|
#include "environ.h"
|
||||||
#include "cygserver_setpwd.h"
|
#include "cygserver_setpwd.h"
|
||||||
#include "pwdgrp.h"
|
#include "pwdgrp.h"
|
||||||
|
#include "exception.h"
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
@ -688,6 +689,19 @@ cygwin_internal (cygwin_getinfo_types t, ...)
|
||||||
res = 0;
|
res = 0;
|
||||||
break;
|
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:
|
default:
|
||||||
set_errno (ENOSYS);
|
set_errno (ENOSYS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
/* sys/cygwin.h
|
/* sys/cygwin.h
|
||||||
|
|
||||||
Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
||||||
|
@ -153,7 +154,8 @@ typedef enum
|
||||||
CW_CYGNAME_FROM_WINNAME,
|
CW_CYGNAME_FROM_WINNAME,
|
||||||
CW_FIXED_ATEXIT,
|
CW_FIXED_ATEXIT,
|
||||||
CW_GETNSS_PWD_SRC,
|
CW_GETNSS_PWD_SRC,
|
||||||
CW_GETNSS_GRP_SRC
|
CW_GETNSS_GRP_SRC,
|
||||||
|
CW_EXCEPTION_RECORD_FROM_SIGINFO_T,
|
||||||
} cygwin_getinfo_types;
|
} cygwin_getinfo_types;
|
||||||
|
|
||||||
#define CW_LOCK_PINFO CW_LOCK_PINFO
|
#define CW_LOCK_PINFO CW_LOCK_PINFO
|
||||||
|
@ -214,6 +216,7 @@ typedef enum
|
||||||
#define CW_FIXED_ATEXIT CW_FIXED_ATEXIT
|
#define CW_FIXED_ATEXIT CW_FIXED_ATEXIT
|
||||||
#define CW_GETNSS_PWD_SRC CW_GETNSS_PWD_SRC
|
#define CW_GETNSS_PWD_SRC CW_GETNSS_PWD_SRC
|
||||||
#define CW_GETNSS_GRP_SRC CW_GETNSS_GRP_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 */
|
/* Token type for CW_SET_EXTERNAL_TOKEN */
|
||||||
enum
|
enum
|
||||||
|
|
Loading…
Reference in New Issue